[Effective JAVA] 자원을 직접 명시하지 말고 의존객체 주입을 사용하라. ( 아이템5 )
싱글톤 패턴은 final로 선언된 멤버변수에 미리 인스턴스를 생성해놓는다. 그러나 이 방식은 유연하지 못하다. 스펠링을 체크하는 클래스가 있다. 스펠링을 체크 클래스는 사전에 의존한다. 싱글톤 방식은 멤버변수에 인스턴스를 미리 생성해 놓으므로 사전A, 사전B와 같이 구체적인 클래스에 결합하게 된다. 그렇다고 final을 지우고 setter 함수를 만들어사전A, 사전B를 번갈아 설정 가능하게 한다면 멀티스레드 환경에서 동시성 오류가 발생할 수 있다. 그러므로 final을 유지하면서 환경에 따라 적절한 인스턴스를 유연하게 의존할 수 있는 방법을 선택해야 한다. 그것이 바로, 의존객체 주입이다. 생성자 주입 방식을 사용하면 객체가 생성되는 시점에 멤버변수가 초기화 되므로 final을 유지할 수 있다.