Intro::
이펙티브 자바 정리본입니다.
사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않습니다.
대신 클래스가 여러 자원 인스턴스를 지원해야 하며, 클라이언트가 원하는 자원을 사용해야 합니다. 이 조건을 만족하는 패턴이 바로 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식입니다. 이는 의존 객체 주입의 한 형태입니다.
public class SpellChecker { private final Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = Objects.requireNonNull(dictionary); } }
이 패턴의 쓸만한 변형으로 생성자에 자원 팩터리를 넘겨주는 방식이 있습니다. 자바 8에서 소개한 Supplier<T> 인터페이스가 팩터리를 표현한 완벽한 예입니다. 이러한 방식을 사용해 클라이언트는 자신이 명시한 타입의 하위 타입이라면 무엇이든 생성할 수 있는 팩터리를 넘길 수 있습니다.
Mosaic create(Supplier<? extend Tile> tileFactory) { ... }
대거, 주스, 스프링과 같은 의존 객체 주입 프레임워크를 사용하여 유연성과 테스트 용이성을 개선할 수 있습니다.
References::
이펙티브 자바 / 조슈아 블로크 지음 (프로그래밍 인사이트)
Loading Comments...