다양한 의존관계 주입에 대해서 정리하자 !

김영한 선생님의 강의 내용을 토대로 공부한 내용을 정리했습니다.

 

1. 생성자 주입

- 생성자를 통해서 의존관계를 주입하는 방법이다.

- 생성자 호출 시점에 딱 1번 주입되는 것이 보장된다.

@Component
public class Student{
    // final로 선언해서 값세팅을 강제한다.
    // 값 설정하지 않을 경우 compile 오류!
    private final Book book;
    
    public Student(Book book){
    	this.book = book;
    }
}

 

2. 수정자 주입

- setter를 통해서 의존관계를 주입하는 방법이다.

- 의존관계의 선택, 변경이 필요한 경우 사용한다.

@Component
public class Student{
    private Book book;
    
    @Autowired
    public void setBook(Book book){
    	this.book = book;
    }
	
    public Student(Book book){
    	this.book = book;
    }
}

 

3.필드 주입

- 코드가 간결해서 많이 사용했지만, 현재는 권장하지 않는다.

- 만약 변경하고 싶을 경우 변경할 방법이 없다. 이를 위한 추가적인 코드가 더 많이 사용된다.

- DI 프레임워크가 없으면 사용할 수가 없다.

- 애플리케이션과 상관없는 테스트 코드에서만 사용하자.

@Component
public class Student{

	@Autowired
	private Book book;

}

 

4. 일반 메서드 주입

- 아무 메서드에서 사용가능 하다.

- 일반적으로 잘 사용하지 않는다.

@Component
public class Student{
	private Book book;
    
    @Autowired
    public void init(Book book){
    	this.book = book;
    }

}

 

 

이 중에서 가장 유용한 방법은 생성자 주입 방법이다.

final 로 선언함으로써  컴파일 단계에서 명확하게 의존관계를 확인할 수 있다.

또한, 생성자에서만 값을 세팅할 수 있다는 장점이 있다.

 

수정자 주입을 포함해서 나머지 주입방식은 모두 생성자 이후에 호출되므로, 필드에 final 키워드를 사용할 수 없다.

생성자 주입을 항상 사용하고, 가끔 옵션이 필요한 경우에만 수정자 주입을 사용하도록 하자.

 

 

출처 : 인프런 김영한 - 스프링 핵심 원리 기본편

+ Recent posts