📙17 [Effective Java 3/E] Item 5. 의존 객체 주입 사용하는 자원에 따라 동작이 달라지는 클래스는 정적 유틸리티 클래스나 싱글턴 방식은 적합하지 않다. * 정적 유틸리티를 잘못 사용한 예 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker(...) {} public static boolean isValid(String word) { ... } public static List suggestions(String typo) {...} } * 싱글턴을 잘못 사용한 예 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker(...) {} pu.. 2021. 1. 10. [Effective Java 3/E] Item 4. private 생성자 인스턴스화를 막으려면 private 생성자를 사용해야 한다. 추상 클래스로 만드는 것으로는 하위 클래스를 만들어 인스턴스화 하면 되기때문에 인스턴스화를 막을 수 없다. public class UtilityClass { private UtilityClass() { throw nes AssertionError(); } } 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는데, 이를 private 으로 선언 했기 때문에 상속을 불가능 하게 한다. 2021. 1. 10. [Effective Java 3/E] Item 3. private 생성자나 열거 타입으로 싱글턴 만들기 싱글턴 (singleton) 인스턴스를 오직 하나만 생성할 수 있는 클래스 클래스를 싱글턴으로 만들 시 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있음 싱글턴을 만드는 법 private 생성자 static 멤버가 final 필드인 방식 해당 클래스가 싱글턴임이 명백히 드러남 간결함 정적 팩터리 메서드를 public static 멤버로 제공하는 방식 api 를 바꾸지 않고도 싱글턴이 아니게 변경할 수 있음 제네릭 싱글턴 팩터리로 만들 수 있음 메서드 참조를 공급자로 사용할 수 있음 private 생성자 방식으로 만든 싱글턴 클래스를 직렬화하려면 모든 인스턴스 필드를 일시적이라고 선언하고 readResolve 메서드를 제공하여 직렬화된 인스턴스를 역직렬화 할 때마다 새로운 인스턴스가 만들어지는 것을 .. 2021. 1. 6. 이전 1 2 3 4 5 6 다음 728x90 반응형