package com.haenin.section05.dependencyinversion.problem;
/* 설명.
* 의존성 역전 원칙(Denpendency Inversion Principle) -"자식에게 의존하면 자식 때문에 휘둘려!"
* - 고수준 모듈은 저수준 모듈에 의존해서는 안된다. (둘 다 추상화에 위존해야 한다.)
* - 추상화는 세부 사항에 의존해서는 안된다. 세부 사항이 추상화에 의존해야 한다.
* */
public class Application {
public static void main(String[] args) {
BadNotificationService badService = new BadNotificationService();
badService.sendNotification(1,"중요 공지사항입니다."); // 1은 email
badService.sendNotification(2,"중요 공지사항입니다."); // 2는 sms
}
}
package com.haenin.section05.dependencyinversion.problem;
public class BadNotificationService {
/* 설명.
* 구현 클래스에 대해 직접 의존(강한 결합)
* - 메세지 전송 방식이 추가되면 필드 및 메소드 안의 코드도 수정
* 심지억 각 메세지 전송 방식에 따른 클래스와 메세지 전송 메소드도
* 메소드명이 규약으로 통일되어 있지않다. (세부사항에 의존적, 추상화X)
* */
private BadEmailSender emailSender = new BadEmailSender();
private BadSMSSender smsSender = new BadSMSSender();
public void sendNotification(int separate, String message){
if(separate == 1) emailSender.sendEmail(message);
else if( separate == 2) smsSender.sendSMS(message);
}
}
package com.haenin.section05.dependencyinversion.problem;
public class BadEmailSender
{
public void sendEmail(String message) {
System.out.println("이메일 발송: " + message);
}
}
package com.haenin.section05.dependencyinversion.problem;
public class BadSMSSender {
public void sendSMS(String message) {
System.out.println("문자 발송: " + message);
}
}