개발 공부

Annotation 을 이용한 조립법 Autowired / Qualifier / Component

준군 2020. 9. 10. 17:58

Dependency Injection 을 이해하기 쉬운 예제 를 보면 setting.xml에서 따로 개체의 생성과 조립을 하여 ApplicationContext를 이용해 전달받았었다. 하지만 앞으로는 Annotation을 이용하여 지시서에 따로 쓰지 않고도 조립을 할 수 있는 방법을 배워볼 것이다. 이번 글에서는 @Autowired와 @Qualifier를 통하여 지시서에 생성된 개체들을 생성자 또는 Setter에서 조립하는 방법에 대해 배우고자 한다. 

 

@Autowired

 

말 그대로 자동연결을 해주는 annotation이다. Dependency Injection을 이해하기 쉬운 예제에서는 employee 개체를 console 개체에다가 setting.xml에서 property를 통하여 setter를 이용했었다. 이 방법 대신에 사용되는 것이 @Autowired이다. 

 

(좌) HorizontalConsole 클래스  (우) setting.xml

setting.xml에서 property 부분이 주석 처리되고 setEmployee 메서드에서 @Autowired 가 추가된 것을 볼 수 있다. @Autowired는 꼭 setter에만 적용되는 것은 아니고 속성 위에도 쓸 수 있다. 

 

속성 Autowired

@Autowired를 쓰면 적용된 객체 타입을 찾아서 자동으로 연결해주는 방식이다. 그렇다면 만약에 똑같은 객체 타입의 개체가 두 개 이상이면 어떻게 될까? 이때 사용되는 것이 @Qualifier이다.

 

@Qualifier

 

Qualifier은 특정한 id값의 개체를 가져올 때 사용된다. 예를 들어 아래와 같이 똑같은 객체 타입의 개체를 두 개 만들고 id 값을 다르게 할 경우에 적용된다. id가 employee2인 개체를 가져온다.

 

속성 Qualifier

이제 Annotation을 이용하여 개체를 생성하는 방법을 학습하고자 한다.

 

@Component

 

Component는 개체를 생성할 때 쓰이는 Annotation이며 웹 애플리케이션을 MVC 모델로 개발할 경우 Component에서 특화된 Annotation인 @Service, @Repository, @Controller 등이 사용되는데 먼저 Component를 써서 개념을 짚고 넘어가고자 한다. 

 

(좌) Developer 클래스   (우) HorizontalConsole 클래스

클래스 선언 위에 보면 @Component를 사용해 IOC 컨테이너에 개체를 저장하는 방법이다. 우측 사진에서는 "console"이라는 id를 부여하여 나중에 id값으로 다시 호출할 수 있게 해 준다. 또한 Developer 개체를 만들 때 @Value를 이용하여 초기값을 설정해주는 모습이다.

 

실행

위와 같이 "console"을 이용해 IOC 컨테이너에서 불러오고 실행시키는 모습이다.