[Spring] DI와 DIP

·2022년 10월 11일
0

Spring

목록 보기
4/24
post-thumbnail

DI(Dependency Injection)

DI의 정의

DI(Dependency Injection)

의존성 주입

의존성 주입이란?

  • A클래스의 프로그래밍 로직 완성을 위해 B클래스의 도움을 요청하는 것을 A클래스B클래스 에게 의존한다라고 한다.

클래스 간의 의존 관계 성립(단순의존)

  • 클래스끼리 사용하고자 하는 클래스의 객체를 생성해서 참조하게 되면 의존 관계가 성립된다.
    • A클래스에서 B클래스의 객체를 생성하고 생성된 객체로 B클래스의 메서드를 호출

의존성 주입

  • 생성자를 통해 어떤 클래스의 객체를 전달 받는 것
  • 생성자의 파라미터로 객체를 전달하는 것을 외부에서 객체를 주입한다고 표현한다.
    • C클래스에서 A클래스의 객체를 생성할 때, 생성자의 파라미터로 B클래스객체를 전달

DI가 필요한 이유

의존성 주입을 사용할 때, 유의해야 할 점

new 키워드의 사용 유무

  • 애플리케이션 코드 내부에서 직접적으로 new 키워드를 사용하여 객체를 생성할 경우 객체 지향 설계의 관점에서 중요한 문제가 발생할 수 있다.

💡new 키워드를 사용하여 객체를 생성할 경우 참조할 클래스가 바뀌면 이 클래스를 사용하는 모든 클래스들을 수정해야 한다.
💡new 키워드를 사용하여 의존 객체를 생성할 때, 클래스들 간에 강한 결합(Tight Coupling) 이 이루어 지는데, 이런 결합은 의존성 주입의 강점에 방해가 될 수 있다.

느슨한 의존성 주입

  • 느슨한 의존성 주입을 만드는 대표적인 방법은 인터페이스를 사용하는 것

외부에서 변경이 가능한 파라미터(인터페이스)를 생성자에 주입하므로서 생성된 객체가 구현체에 의존하지 않아 다형성의 의미를 증가시킬 수 있는 개념.

DIP(Dependency Inversion Principle)

의존관계 역전 원칙

  • 객체지향 프로그래밍의 다섯가지 원칙인 SOLID중의 하나
  • 모듈들을 분리하는 특정 형식을 지칭하며 이 원칙에 따르면 상위 계층이 하위 계층에 의존하는 전통적인 의존관계를 역전시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
    • 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위, 하위 모듈 모두 추상화에 의존해야 한다.
    • 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.

내용 정정할 예정 ㅠㅅㅠ

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글