[Spring] 왜 자바 객체를 IoC 컨테이너의 빈으로 만들까?
IoC는 Spring을 통해서만 적용할 수 있는게 아니며 일반 자바 객체로 DI를 직접 구현할 수도 있다.
그런데 Spring의 IoC 컨테이너를 사용하는 이유는 다음과 같다.
DI(Dependency Injection, 의존성 주입)
DI를 직접 구현하는 것 보다 Spring에서 제공하는 IoC 컨테이너의 DI를 이용하는 것이 편리하고 효율적이다.
객체의 Scope
자바 객체를 IoC 컨테이너의 빈으로 만들면 객체의 scope를 관리하기 용이하다.
IoC 컨테이너에서 관리되는 빈들은 기본적으로 싱글톤 scpoe로 등록된다.
따라서 어플리케이션 전반적으로 오로지 하나의 인스턴스만 사용해도 되는 객체라면 IoC 컨테이너에 빈으로 등록해서 아주 편리하게 사용할 수 있다.
싱글톤의 반대 개념 = 프로토타입 = 매번 다른 인스턴스를 만들어 사용하는 것
어플리케이션 전반에 하나의 인스턴스만 필요한 객체는 싱글톤 scope이 메모리 측면에 효율적이며 성능 최적화에 유리하다.
라이프 사이클 인터페이스 지원
특히 라이프 사이클 인터페이스는 Spring IoC 컨테이너에 등록된 빈들에만 제한되어 일반 자바 객체는 사용할 수 없다.
라이프 사이클 인터페이스를 이용해 어떤 빈이 만들어질 때 빈에 추가적인 작업을 할 수 있다.
예를 들어 클래스들이 모두 구현되지 않은 상태에서는 의존 객체를 사용하는 클래스의 단위 테스트를 만들기가 어려운데 라이프 사이클 인터페이스를 사용하면 그런 상황에서도 테스트를 수행할 수 있다.