◆ TURNING · SPRING

new 의 함정

Spring 기초
SMHRD

학습 목표

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; } }

학습 확인 체크리스트