다음 코드의 RecordService와 FileStore는 모두 Store 추상화에 의존한다. 이 구조에 가장 직접적으로 적용된 SOLID 원칙의 명칭과 저장 구현을 교체할 때의 효과를 쓰시오.
interface Store {
void save(String value);
}
class FileStore implements Store {
public void save(String value) { /* 파일 저장 */ }
}
class RecordService {
private final Store store;
RecordService(Store store) {
this.store = store;
}
void add(String value) {
store.save(value);
}
}모범답안
의존관계 역전 원칙(DIP)이다. 상위 모듈과 하위 구현이 모두 Store 추상화에 의존하므로 저장 구현을 바꿔도 RecordService의 변경을 줄일 수 있다.
풀이와 판단 근거
의존관계 역전 원칙은 상위 수준 모듈이 하위 수준의 구체 클래스에 직접 의존하지 않고 양쪽 모두 추상화에 의존하도록 한다.
RecordService는 FileStore를 직접 생성하지 않고 Store를 통해 사용하므로 메모리 저장소나 데이터베이스 저장소로 교체해도 핵심 로직을 수정할 필요가 줄어든다. 생성자로 구현 객체를 받는 것은 이 원칙을 적용하는 의존성 주입 기법이다.
자주 틀리는 지점
- 구현 기법인 의존성 주입만 쓰고 SOLID 원칙을 쓰지 않음
- 단일 책임 원칙으로 답함
- 구체 클래스를 직접 생성해야 결합도가 낮아진다고 설명
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.