강한 결합을 직접 느껴본다
new 가 만드는 강한 결합 을 코드로 본다
public class OrderService {
private MailSender mail = new GmailSender(); // ⭐
public void order() {
// ... 주문 처리
mail.send("주문 완료 메일");
}
}
아무 문제 없어 보입니다. 학생이 자바를 배운 직후 자연스럽게 짤 코드 — new 로 직접 만들기.
public class OrderService {
private KakaoSender mail = new KakaoSender(); // 변경
// ^^^^^^^^^^^
public void order() {
mail.send("주문 완료 메일"); // 메서드 이름이 send 가 맞나?
}
}
KakaoSender 의 메서드 이름이 send 가 아니라 notify(String userId, String msg) — 시그니처도 다름.
public class OrderService {
private KakaoSender messenger = new KakaoSender();
// ^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^
public void order() {
messenger.notify("user123", "주문 완료");
// ^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^
}
}
👉 한 클래스에서만 5 줄 수정. 같은 패턴이 5 곳에 있다면 — 5 × 5 = 25 줄 수정.
클래스 내부에서 new ConcreteClass() 로 객체를 직접 생성하면 — 그 클래스는 해당 구체 클래스에 꽉 묶여 있게 됩니다.
OCP (개방-폐쇄 원칙): "확장에는 열려있고, 수정에는 닫혀있어야 한다."
다음 두 차시 (IoC + DI) 에서 다음 패턴을 배웁니다 — 미리 살짝:
public class OrderService {
private MessageSender sender; // 인터페이스에 의존
public OrderService(MessageSender sender) { // 외부에서 받음
this.sender = sender;
}
public void order() {
sender.send("주문 완료");
}
}
GmailSender) 가 사라짐 → 인터페이스만 의존new「new 잘 쓰면 되는 거 아닌가?」 의 막연한 자세.
부품 교체 시 코드가 어디까지 부서지는지 손으로 느꼈다. 다음 도구의 동기가 명확.
new = 클래스 내부에서 직접 만들기 = 강한 결합