본문 내용은 초보 웹 개발자를 위한 스프링5 프로그래밍 입문(최범균)을 참고하고 있습니다.
DI
- DI는 'Dependency Injection'의 약자로 우리말로는 '의존 주입'이라고 한다.
- 의존이란 변경에 의해 영향을 받는 관계를 의미하며, 한 클래스가 다른 클래스의 메소드를 실행할 때 이를 '의존'한다고 표현할 수 있다.
DI를 통한 의존 처리
- DI는 의존하는 객체를 직접 생성하는 대신 의존 객체를 전달 받는 방식을 사용한다.
ex)
public class MemberService {
// 의존 객체를 직접 생성하는 방법
private MemberDao memberDao = new MemberDao()
...
}
public class MemberService {
private MemberDao memberDao;
public MemberService(MemberDao memberDao) {
// 의존 객체를 전달받는 방법
this.memberDao = memberDao;
}
}
DI를 사용하면 의존 주입 대상이 되는 객체를 생성하는 코드를 한 곳에 설정할 수 있다. 따라서 의존 객체를 직접 생성했던 방식에 비해 변경할 코드가 한 곳으로 집중되는 장점이 있다.
@Configuration
- 스프링 설정 클래스를 의미한다.
- 이 애노테이션을 붙여야 스프링 설정 클래스로 사용할 수 있다.
@Bean
- 해당 메소드가 생성한 객체를 스프링 빈이라고 설정한다.
- 메소드 이름을 빈 객체의 이름으로 설정한다.
DI 방식 1 : 생성자 방식
- 빈 객체를 생성하는 시점에 모든 의존 객체가 주입된다.
- 생성자에게 파라미터를 만들어두고 이를 통해 DI 컨테이너가 의존할 오브젝트 레퍼런스를 넘겨주도록 만든다.
DI 방식 2 : Setter 메소드 방식
- 세터 메소드의 이름을 통해 어떤 의존 객체가 주입되는지 알 수 있다.
- 외부에서 오브젝트 내부의 속성 값을 변경하려는 용도로 주로 사용된다.
- 한 번에 한 개의 파라미터만 받을 수 있다.
- 외부로부터 제공받은 오브젝트 레퍼런스를 저장해두었다가 내부의 메소드에서 사용한다.
주입 대상 객체를 모두 빈 객체로 설정해야 하나?
객체를 스프링 빈으로 등록할 때와 등록하지 않을 때의 차이는 스프링 컨테이너가 객체를 관리하는지의 여부이다. 따라서 스프링 컨테이너가 제공하는 관리 기능이 없고 getBean() 메소드로 구할 필요가 없다면 반드시 빈 객체로 설정할 필요는 없다. 하지만 의존 자동 주입 기능을 프로젝트 전반에 걸쳐 사용하는 추세이기 때문에 의존 주입 대상은 보통 빈으로 등록한다.
'Back-end > Spring' 카테고리의 다른 글
빈 라이프 사이클과 범위 (0) | 2021.10.01 |
---|---|
컴포넌트 스캔(@Component, @ComponentScan) - 학습필요 (0) | 2021.10.01 |
의존 자동 주입 (0) | 2021.10.01 |
싱글톤(Singleton) 객체 (0) | 2021.10.01 |
스프링 컨테이너 (0) | 2021.10.01 |