[Comment] Autowired 보단 생성자로 처리해주세요!
by Roel DowneyComment
@AutoWired 보단 생성자로 처리해주세요~
왜? 생성자로 처리하는게 좋을까? 라는 궁금증이 생겼다. 그냥 Annotation 써주면 끝날껄? 왜? 생성자로 처리를 할까?
먼저 의존성을 주입하는 방법(DI : Dependency Injection) 3가지가 있다.
1. Constructor 주입
2. Field 주입
3. Setter 주입
Constructor 주입 방법 사용시 장점
- 순환 참조를 방지 할 수 있다.
Constructor 주입 방법은 Field 주입이나 Setter 주입과는 빈을 주입하는 순서가 다르다.
Field 주입 : inject 주입 받으려는 bean을 생성한 후에 어노테이션이 붙은 필드에 해당하는 bean을 찾아서 주입하는 방법이다. 즉, 먼저 bean을 생성한 후에 주입한다.
Setter 주입 : inject 주입 받으려는 bean의 생성자를 호출하여 bean을 찾거나 beanFactory에 등록한다. 그 후에 Constructor 인자에 사용하는 bean을 찾거나 만든다. 그 이후에 주입하려는 bean 객체의 Setter를 호출하여 주입한다.
Constructor 주입 : Constructor로 객체를 생성하는 시점에 필요한 bean을 주입한다.
먼저 Constructor의 인자에 사용되는 bean을 찾거나 beanFactory에서 만든다. 이후에 찾은 인자 bean으로 주입하려는 bean의 Constructor를 호출한다. 즉, 먼저 bean을 생성하지 않는다.
- 테스트 코드 작성이 편리
Constructor 주입을 사용하게 되면 테스트 코드를 더 편리하게 작성할 수 있다.
DI의 핵심은 관리되는 클래스가 DI 컨테이너에 의존성이 없어야 한다는 것이다. 즉, 독립적으로 인스턴스화가 가능한 POJO(Plain Old Java Ojbect) 여야 한다. DI 컨테이너를 사용하지 않고서도 단위 테스트에서 인스턴스화 할 수 있어야 한다.
- 불변으로 선언 가능
Field 주입이나 Setter 주입은 해당 필드를 final로 선언할 수 없다. Constructor 주입의 경우 Field를 final로 선언할 수 있다.
'Web > review And comment' 카테고리의 다른 글
[comment] 상태를 가지는 객체에 Getter Setter를 쓰지마라?! (0) | 2020.08.25 |
---|---|
[부스트코스] To-Do List 구현 (Pass) (0) | 2020.05.12 |
블로그의 정보
What doing?
Roel Downey