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중의 하나
- 모듈들을 분리하는 특정 형식을 지칭하며 이 원칙에 따르면 상위 계층이 하위 계층에 의존하는 전통적인 의존관계를 역전시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다.
- 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위, 하위 모듈 모두 추상화에 의존해야 한다.
- 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
내용 정정할 예정 ㅠㅅㅠ