본문 바로가기
728x90

Books23

5.자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 5-1 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다. public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) { ... }; public static List suggestions(String typo) {...}; } 5-2 싱글턴을 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker(...) {} pu.. 2021. 9. 18.
4.인스턴스화를 막으려거든 private 생성자를 사용하라 4-1 정적 메서드와 정적 필드만을 담은 클래스를 만들 때 1. java.lang.Math 와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아 놓는다 2. java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓는다 3. final 클래스와 관련한 메서드들을 모아 놓을 때 사용한다 - 정적 멤버만 다음 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 게 아니다 - 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어 준다 - 즉 매개변수를 받지 않는 public 생성자가 만들어지며 사용자는 이 생성자가 자동 생성된 것인지 구분할 수 없다 4-2 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다 .. 2021. 9. 16.
3.private 생성자나 열거 타입으로 싱글턴임을 보증하라 목차 1. public static final 필드 방식의 싱글턴 2. 정적 팩토리 방식의 싱글턴 3. 열거 타입 방식의 싱글턴 3-1 싱글턴 이란? 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수도 있다 3-2 싱글턴을 만드는 방식 코드 3-1 public static final 필드 방식의 싱글턴 // 코드 3-1 public static final 필드 방식의 싱글턴 (23쪽) public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } public void leaveTheBuilding() { System.o.. 2021. 9. 16.
2.생성자에 매개변수가 많다면 빌더를 고려하라 목차 1. 점층적 생성자 패턴 2. 자바 빈즈 패턴 3. 빌더 패턴 2-1 정적 팩토리와 생성자에는 똑같은 제약이 하나 있다 선택적 매개변수가 많을때 적절히 대응하기 어렵다 2-2 점층적 생성자 패턴 - 확장하기 어렵다 // 코드 2-1 점층적 생성자 패턴 - 확장하기 어렵다! (14~15쪽) public class NutritionFacts { private final int servingSize; // (mL, 1회 제공량) 필수 private final int servings; // (회, 총 n회 제공량) 필수 private final int calories; // (1회 제공량당) 선택 private final int fat; // (g/1회 제공량) 선택 private final int sod.. 2021. 9. 14.
1.생성자 대신 정적 팩터리 메서드를 고려하라 목차 1. 정적 팩터리 5가지 장점 2. 정적 팩터리 2가지 단점 3. 정적 팩토리 메서드에 흔히 사용하는 명명 방식 1-1 클라이언트가 클래스의 인스턴스를 얻는 방법 클라이언트가 인스턴스를 얻는 전통적인 수단 -> Public 클래스는 생성자와 별도로 정적 펙토리 메서드를 제공할 수 있다 1-2 정적 펙토리 메서드가 생성자보다 좋은 5가지 장점 1. 이름을 가질 수 있다. - 한 클래스에 시그니처가 같은 생성자가 여러 개 필요할 것 같으면, 생성자를 정적 팩토리 메서드로 바꾸고 각각의 차 이를 잘 드러내는 이름을 지어주자 2. 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. - 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피.. 2021. 9. 13.
728x90