[Spring] 자동 빈 등록 vs 수동 빈 등록

김형진·2023년 3월 29일
1

Spring에서는 @Component 어노테이션 (혹은 @Service, @Repository, @Controller 같이 @Component이 붙어있는 어노테이션 등) 을 통해 빈을 자동으로 등록할 수 있다.

객체를 생성할 때마다 config파일을 건드리는 것보다 어노테이션 하나만을 사용하는 것이 훨씬 편리하기 때문에 모든 경우에 @Component를 사용하면 될 것 같지만, 꼭 그렇지만도 않다.

수동으로 빈을 관리하면 좋을 경우가 있는데,
하나의 인터페이스에 대해 여러 구현체가 있는 경우, 그리고 그 구현체들 모두 빈 등록할 때이다.

인터페이스에 대한 구현이 하나가 아니라도, 이 인터페이스에 대한 구현을 List나 Map으로 의존주입 받는다면 구현체들을 한 번에 가져올 수 있는데,
모든 구현체를 @Component를 통해 자동 빈 등록한다면 개발자는 어떤 구현체가 빈 등록되었는지 확인하기 위해 모든 구현체를 열어 확인해야 한다.

예를 들어

[상황]
A개발자가 어떤 정책을 표현한 xxxPoilcy 인터페이스에 대한 구현을 AxxxPolicy, BxxxPolicy, CxxxPolicy, ... Zxxxpolicy 와 같이 여럿 만들었으며 전략패턴을 통해 이들 구현 모두를 사용하고자 각 객체에 @Component를 붙였다고 한다.

A개발가 퇴사 후 B개발자가 이를 유지보수 하고자 할 때, xxxPolicy에 대한 구현중 어느 것이 빈 등록되었는지 확인하기 위해서는 AxxxPolicy객체부터 ZxxxPolicy객체의 파일까지 모두 열어보아 일일이 확인해야 한다.

이런 경우 각 구현을 자동 빈 등록하기보단

@Configuration
public class XxxPolicyConfig{
        
    @Bean
    public XxxPolicy aXxxPolicy(){
    	return new AXxxPolicy();
    }
    
    @Bean
    public XxxPolicy bXxxPolicy(){
    	return new BXxxPolicy();
    }
    
    @Bean
    public XxxPolicy cXxxPolicy(){
    	return new CXxxPolicy();
    }
    
    .
    .
    .
    
    @Bean
    public XxxPolicy zXxxPolicy(){
    	return new ZXxxPolicy();
    }
}

xxxPolicyConfig 파일을 만들어 수동으로 빈을 등록해준다면 한 눈에 어떤 구현이 빈 등록되었는지 확인하기 쉽고 유지보수하기 용이하다.

profile
히히

0개의 댓글