아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
JAVA
·
자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
- 사용하는 자원에 따라 동작이 달라지는 클래스는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다.
- 이는 하나의 자원만 있다고 가정하는 것과 같다.
- 유연하지 않고, 재사용이 어렵다.
- 자원에 final 한정자를 명시하지 않으면 자원 교체가 가능하긴 하지만, 어색하고 오류를 내기 쉽고 멀티스레드 환경에서는 쓸 수 없다.
- 의존 객체 주입이란 인스턴스를 생성할 때 필요한 자원을 넘겨주는 방식
- 생성자, 정적 팩터리, 빌더 모두에 똑같이 응용 가능
- 이 방식의 쓸만한 변형으로 생성자에 자원 팩터리를 넘겨줄 수 있다. (팩터리 메서드 패턴)
- 팩터리란 호출할 때마다 특정 타입의 인스턴스를 반복해서 만들어주는 객체
- Supplier 인터페이스가 팩터리를 표현한 완벽한 예
- Supplier를 입력으로 받는 메서드에서 한정적 와일드카드 타입을 사용해 팩터리의 타입 매개변수를 제한하면 자신이 명시한 타입의 하위 타입이라면 무엇이든 생성할 수 있는 팩터리를 넘길 수 있다.
- 의존 객체 주입을 사용하면 클래스의 유연성, 재사용성, 테스트 용이성을 개선할 수 있다.
- 다른 의존 객체를 원할 시에 코드 변화 없이 변경 가능
- 실제 코드와 다른 객체를 주입 받아 테스트하기에도 용이
출처
이펙티브 자바 3/E
이펙티브 자바 완벽 공략 1