[JAVA] DI 예제 구현 그리고 UML

2024. 12. 29. 23:27·개발/Java

 

 

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
'개발/Java' 카테고리의 다른 글
  • Stream API를 활용해보자
  • [IDE - IntelliJ] auto Parameter Info (매개변수 정보) 팝업 숨기기
  • [Java] 다형성 그리고 Interface와 친해지고싶어요.
  • 자바의 정석 정리 Ver 1.0 (나만 알아볼수 있음)
NextHeaven
NextHeaven
취미로 사진을찍고 넋두리를 공유하고자 합니다.
  • NextHeaven
    Nextheaven
    NextHeaven
  • 전체
    오늘
    어제
    • 분류 전체.. (34)
      • 일기 (25)
        • 2021 (8)
        • 2022 (5)
        • 2023 (0)
        • 2024 (12)
        • 2025 (0)
      • 개발 (9)
        • Java (6)
        • DB (2)
        • Tip (1)
  • 블로그 메뉴

    • 홈
    • 나라는 사람은
    • 방명록
  • 태그

    java
    일기
    남궁성 백엔드 부트캠프
    intellij
    백엔드
    a7m3
    부트캠프
    백엔드 부트캠프
    일하는 마음
    남궁성
  • hELLO· Designed By정상우.v4.10.1
NextHeaven
[JAVA] DI 예제 구현 그리고 UML
상단으로

티스토리툴바