728x90
방장은 회사 프로젝트에서 @Autowired를 통해 객체를 주입하여 사용했었다.
이직을 하면서 다양한 프로젝트를 통해 생성자, Setter를 통한 의존성 주입을 경험하게 되었고, 그에 따라 DI에 대해 정리하게 되었다.
DI(의존성 주입) ?
Dependency Injection의 약자로 의존성 주입이라는 뜻
이해가 쉽게 코드로 설명하겠다.
public class Code1 {
...
}
public class Computer {
private Code1 code1 = new Code1();
public getCode() {
this.code1.getCode();
}
}
위 코드에서 Computer 객체가 Code1 객체를 생성하여 사용하고 있다.(Computer -> Code1에 의존한다.)
만약 getCode 메서드에서 Code1 객체 대신 다른 객체를 사용하고자 할 경우 수정이 필요하게 된다.(결합도 ↑)
public class Code1 {
...
}
public class Code2 {
...
}
public class Computer {
private Code code;
public Computer(Code code) {
this.code = code;
}
public getCode() {
this.code.getCode();
}
}
위 코드와 같이 작성할 경우 Computer 객체를 생성할 때 필요한 객체를 주입하여 생성하게 되면 결합도가 낮아져 코드를 재사용할 수 있게 된다. 이를 의존성 주입이라고 한다.
DI(의존성 주입) 방법
의존성 주입방법은 3가지가 있다.
1. 생성자 주입
public class Code1 {
...
}
public class Computer {
private Code1 code1;
// @Autowired(생성자가 여러개일 경우)
public Computer(Code1 code1) {
this.code1 = code1;
}
}
위에서 설명했던 방법이다. 만약 Computer 객체의 생성자가 여러개일 경우 @Autowired 어노테이션을 작성해야 한다.
Spring에서는 해당 방법을 권고하고 있다.
2. Setter 주입
public class Code1 {
...
}
public class Computer {
private Code1 code1 = new Code1();
public setCode1(Code1 code1) {
this.code1 = code1;
}
}
객체의 Setter를 사용해 의존관계를 주입하는 방법인데, 주입받는 객체가 변경될 가능성이 있는 경우에 사용된다.(사실 정확하게 이해하지 못했다.)
3. 필드 주입
public class Code1 {
...
}
public class Computer {
@Autowired
private Code1 code1;
}
필드에 의존관계를 주입하는 방법이다. 코드가 간결해지는 장점이 있으며, 방장은 회사 프로젝트에서 주로 사용했다.
* 질문이나 문의사항, 피드백은 댓글로 남겨주세요.
참고
'프로그래밍 언어 > JAVA, SPRING' 카테고리의 다른 글
[SPRING] EXCEL 업로드하여 데이터 처리하기 #2 (12) | 2023.08.22 |
---|---|
[SPRING] EXCEL 업로드하여 데이터 처리하기 #1 (0) | 2023.08.22 |
[DI] @Autowird vs @RequiredArgsConstructor (4) | 2023.08.16 |
Google SpreadSheet API와 JAVA 연동하기 #2 (2) | 2023.08.14 |
Google SpreadSheet API와 JAVA 연동하기 #1 (0) | 2023.08.14 |