Roel Notebook

[Comment] Autowired 보단 생성자로 처리해주세요!

by Roel Downey
728x90
반응형

Comment

@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으로 주입하려는 beanConstructor를 호출한다. 즉, 먼저 bean을 생성하지 않는다. 

 

 

- 테스트 코드 작성이 편리

Constructor 주입을 사용하게 되면 테스트 코드를 더 편리하게 작성할 수 있다.

DI의 핵심은 관리되는 클래스가 DI 컨테이너에 의존성이 없어야 한다는 것이다. 즉, 독립적으로 인스턴스화가 가능한 POJO(Plain Old Java Ojbect) 여야 한다. DI 컨테이너를 사용하지 않고서도 단위 테스트에서 인스턴스화 할 수 있어야 한다.

 

 

- 불변으로 선언 가능

Field 주입이나 Setter 주입은 해당 필드를 final로 선언할 수 없다. Constructor 주입의 경우 Field를 final로 선언할 수 있다. 

 

 

 

 

 

 

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기