[Effective Java 3/e] 아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
아이템 5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다
public class SpellChecker {
private static final Lexicon dictionary = ...;
private SpellChecker() {}
public static boolean isValid(String word) { ... }
}
싱글턴을 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다
public class SpellChecker {
private final Lexicon dictionary = ...;
private SpellChecker() {}
public static SpellChecker INSTANCE = new SpellChecker(...);
public static boolean isValid(String word) { ... }
}
의존 객체 주입은 유연성과 테스트 용이성을 높여준다
public class SpellChecker {
private final Lexicon dictionary;
private SpellChecker(Lexicon dictionary) {
this.dictionary= Objects.requireNonNull(dictionary);
}
public boolean isValid(String word) { ... }
}
아이템 5 - 정리
- 클래스가 내부적으로 하나 이상의 자원에 의존하고, 그 자원이 클래스 동작에 영향을 준다면 싱글턴과 정적 유틸리티 클래스는 사용하지 않는 것이 좋다.