더북(TheBook)

실행 결과에서 singerOne은 구성 파일에 지정한 프로퍼티 값을 사용해 정상적으로 구성된 것을 확인할 수 있습니다. singerTwo는 빈 구성 시 name 프로퍼티 값을 지정하지 않아 기본값을 사용했습니다. 마지막으로 singerThreeage 프로퍼티의 값이 없어서 init() 메서드에서 에러가 발생해 빈 인스턴스를 생성하지 못했습니다.

지금까지 알아본 것처럼 초기화 메서드는 제대로 빈이 구성됐는지 확인할 수 있는 이상적인 방법입니다. 이 메커니즘을 사용하면 의존성을 직접 제어할 때의 제어 권한을 하나도 잃지 않으면서 IoC가 제공하는 모든 장점을 활용할 수 있습니다. 초기화 메서드가 가진 유일한 제약은 인자를 받을 수 없다는 것입니다. 초기화 메서드는 무엇을 반환해도 스프링이 무시하므로 상관없으며 초기화 메서드를 정적(static) 메서드로 선언해도 되지만 인자를 받을 수는 없습니다.

이 메커니즘의 장점은 정적(static) 초기화 메서드를 사용하려고 할 때 사라집니다. 정적 초기화 메서드에서는 검증 작업을 위해 각 빈의 상태 정보에 접근할 수 없기 때문입니다. 메모리를 절약하려고 빈에서 정적 상태 정보를 사용하고 해당 상태 정보를 검증하려고 정적 초기화를 사용한다면, 정적 상태 정보를 인스턴트 상태 정보로 옮기고 비정적(nonstatic) 초기화 메서드를 사용할 것을 검토해야 합니다. 스프링에 제공하는 싱글턴 관리 기능을 사용하면 동일한 결과를 얻을 수 있을 뿐 아니라 테스트하기도 쉬워집니다. 또한, 필요에 따라 상태 정보만 다른 빈 인스턴스를 여러 개 생성할 수도 있습니다. 물론 어떤 인스턴스에서는 여러 빈 인스턴스 사이에 공유되는 정적 상태 정보를 사용해야 하며, 이때는 언제든 정적 초기화 메서드를 사용할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.