의존성 주입 Dependency Injection
의존성 주입이란, 사용하는 객체를 클래스 내부에서 직접 생성/정의하지 않고, 외부에서 독립적으로 생성된 객체를 전달받아 사용하는 것을 의미한다.
런타임(실행) 시점에 외부에서 실제 구현 객체를 전달받아 사용하는 것을 의미한다.
의존성 주입 방법
생성자 주입 Constructor Injection
생성자를 이용해 객체를 주입받는 방법을 말한다. 컴파일 타임에 의존성을 확인할 수 있다.
객체가 올바르게 생성되기 위해서, 필수적으로 주입받아야 할 객체를 명시할 수 있다.
public class 컴퓨터(){
private final 키보드 키보드;
private final 모니터 모니터;
//생성자 constructor
public 컴퓨터(키보드 keyborad, 모니터 moniter){
this.키보드 = keyboard;
this.모니터 = moniter;
}
}
public class Main {
public static void main(String[] args) {
컴퓨터 내컴퓨터 = new 컴퓨터 ( new 저소음_적축_키보드(), new 27인치_와이드_모니터());
}
}
Setter 주입 Setter Injection
런타임 시점에 의존성을 변경할 수 있다. (주입받은 객체를 변경할 수 있다.)
객체가 올바르게 생성되기 위해 필수적으로 주입받아야 할 객체를 명시할 수 없다.
public class 컴퓨터(){
private final 키보드 keyboard;
private final 모니터 monitor;
//setter
public void setKeybord(키보드 keyboard){
this.keyboard = keyboard;
}
public void setMonitor(모니터 monitor){
this.monitor = monitor;
}
}
public class Main {
public static void main(String[] args) {
//객체 생성
컴퓨터 내컴퓨터 = new 컴퓨터();
// 의존성 주입
내컴퓨터.setKeyboard( new 저소음_적축_키보드() );
내컴퓨터.setMonitor( new 27인치_와이드_모니터() );
}
}
메서드 주입 Method Injection
외부에서 주입받은 객체가 특정 메소드에서만 사용된다면 (일시적), 메소드의 매개변수로 주입받아 사용하도록 하는 것이 더 나은 방법일 수 있다.
public class 컴퓨터(){
private final 키보드 keyboard;
private final 모니터 monitor;
private final int powerConsumption = 100;
//메소드 주입
private void 예상_사용전기량_계산하기(키보드 keyboard, 모니터 monitor){
return powerConsumption
+ keyboard.getPowerConsumption()
+ monitor.getPowerConsumption();
}
}
public class Main {
public static void main(String[] args) {
컴퓨터 myComputer = new 내컴퓨터();
int powerConsumption = myComputer.예상_사용전기량_계산하기(
new 저소음_적축_키보드(), new 27인치_와이드_모니터());
}
}
참고자료
- 조영호, 오브젝트, 위키북스
- 김영한, 스프링 핵심원리 - 기본편, 인프런
'JAVA > Architecture' 카테고리의 다른 글
[DDD] 아키텍처 계층과 도메인 구성 요소 (0) | 2022.02.02 |
---|---|
[DDD] Entity와 Value Object (0) | 2022.01.30 |
객체지향 설계의 5가지 원칙 SOLID (0) | 2022.01.09 |
상속과 합성 Inheritance And Composition (0) | 2021.12.10 |