Spring을 공부하다 보니 DI(Dependency Injection)이라는 부분이 정말 너무 이해가 되지 않았다.
그리고 더욱 슬픈 건 UML조차도 이해가 되지 않았다.
그래서 직접 공부 후 JAVA 예제, Intellij의 Diagram기능을 활용해서 UML로도 분석한 기록을 남긴다.
◆ 예제 코드
public interface Service {
void sendMessage(String message, String recipient);
}
> 서비스 인터페이스를 생성한다
public class FakeService implements Service {
@Override
public void sendMessage(String message, String recipient) {
System.out.println("Fake send message " + recipient + " to " + message);
}
}
public class RealService implements Service{
@Override
public void sendMessage(String message, String recipient) {
System.out.println("Real send message " + recipient + " to " + message);
}
}
> Service를 Impl (implements)하는 클래스 2개를 구현한다 (FakeService, RealService)
public class MessageSender {
private final Service service;
public MessageSender(Service service) {
this.service = service;
}
public void send(String message, String recipient){
service.sendMessage(message, recipient);
}
}
> 그리고 이 서비스들을 주입받아 사용하는 클래스 MessageSender를 구현한다
> 여기서 Service 인터페이스를 활용(다형성) 주입받은 sendMessage를 사용할 수 있게 한다
public class main {
public static void main(String[] args){
MessageSender messageSender = new MessageSender(new RealService());
messageSender.send("helloWorld Java", "hihihihi@email.com");
MessageSender fakeSender = new MessageSender(new FakeService());
fakeSender.send("helloWorld Java", "hihihihi@email.com");
}
}
> Messeage Sender에 각 서비스들을 주입하니 주입한 구현정보들이 출력되는 것을 알 수 있었다.
> 실행 후 콘솔은 아래와 같다.
< console >
Real send message hihihihi@email.com to helloWorld Java
Fake send message hihihihi@email.com to helloWorld Java
◆ UML ( Feat. Intelli J Ultimate )
> main은 MessageSender를 통해 주입받은 객체를 활용하는 것을 알 수 있다.
> MessageSender는 service라는 interface의 다형성을 주입받아 활용된다는 것을 알 수 있다.
> 이렇게 UML로 다시한번 그려서보니 더욱더 이해가 잘되는것같다.
[끝]
'개발 > Java' 카테고리의 다른 글
Stream API를 활용해보자 (0) | 2025.01.08 |
---|---|
[IDE - IntelliJ] auto Parameter Info (매개변수 정보) 팝업 숨기기 (0) | 2024.11.24 |
[Java] 다형성 그리고 Interface와 친해지고싶어요. (2) | 2024.11.19 |
자바의 정석 정리 Ver 1.0 (나만 알아볼수 있음) (0) | 2024.10.28 |
프로그램, 객체, 클래스, 메서드 (0) | 2024.10.07 |