학습 목표
new 가 만드는 강한 결합을 안다
- 부품 교체 시 코드가 어디까지 수정되는지 안다
- 다음 차시 IoC/DI 의 동기를 안다
1. 문제의 코드
class OrderService {
private MailSender mail = new GmailSender(); // ← 강한 결합
}
아무 문제 없어 보이지만 「Gmail → KakaoTalk」 변경 요청 한 줄에 코드 여러 군데를 수정해야 합니다.
2. 강한 결합의 비용
| 상황 | 결과 |
| 부품 클래스 교체 | OrderService 코드 수정 |
| 부품 메서드 이름 변경 | OrderService 호출 코드 수정 |
| 같은 패턴이 5 곳에 있음 | 5 군데 모두 동일하게 수정 |
| 단위 테스트 | 실제 부품 호출을 막기 위해 Mock 으로 갈아끼움 |
3. 비유
일체형 가전: 메인보드 하나만 고장나도 통째로 버려야 한다. new 직접 생성도 똑같음.
4. 다음 차시의 약속
IoC/DI 는 객체 생성을 외부로 위임하고, 클래스는 인터페이스에만 의존하게 합니다. 부품 교체 시 클래스를 수정하지 않아도 됩니다.
// AFTER (다음 차시)
class OrderService {
private MessageSender sender; // 인터페이스
OrderService(MessageSender sender) { // 외부 주입
this.sender = sender;
}
}
학습 확인 체크리스트
- 강한 결합이 무엇인지 한 문장으로 말할 수 있다
- 부품 교체가 어렵게 만드는 이유를 안다
- 인터페이스 + 외부 주입이 답이라는 방향을 안다