본문 바로가기

Effective Java4

item 4 간혹 정적 메서드만 담은 유틸리티 클래스처럼 인스턴스화가 필요없는 클래스가 발생 할 수도 있다. 이들의 인스턴스화를 막기 위해 다음과 같이 추상 클래스로 만들 수 있겠지만 public abstract class UtilityClass { } 이런 추상 클래스로는 인스턴스화를 막을 수 없다. 그 이유는 간단한데 만약 저 추상 클래스를 상속받는 하위 클래스가 있는 경우, 자동적으로 인스턴스가 만들어진다. 오히려 abstract 키워드 때문에 상속하여 사용하라는 듯한 오해를 불러 일으킬 수 있다. 이런 경우 private 생성자를 추가하여 인스턴스 생성을 막을 수 있다. public class UtilityClass { private UtilityClass() { throw new AssertionError(.. 2023. 10. 4.
item 3 아이템 3. 생성자가 열거 타입으로 싱글턴임을 보증하라. 방법 1. private 생성자 + public static final 필드 public class Elvis { /** * 싱글톤 오브젝트 */ public static final Elvis INSTANCE = new Elvis(); private Elvis() {} public void leaveTheBuilding() { System.out.println("Whoa baby, I'm otta here!"); } public void sing() { System.out.println("I'll have a blue~ Christmas without you~"); } } 이 방식의 장점이라면 굉장히 간결하고, 싱글턴임을 API에 드러낼 수 있다... 2023. 9. 21.
item 2 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라. 대안 1. 점층적 생성자 패턴 또는 생성자 체이닝 public class NutritionFacts { private int servingSize; //필수 private int servings; //필수 private int calories; //옵션 private int fat; //옵션 private int sodium; //옵션 private int carbohydrate; //옵션 public NutritionFacts(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; this.calories = 0; this.fat = 0; .. 2023. 9. 21.
item 1 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라. 장점 1 이름을 가질 수 있다. public class Order { private Product product; private boolean prime; private boolean urgent; **public Order(Product product, boolean prime) { this.product = product; this.prime = prime; }** **public Order(Product product, boolean urgent) { this.product = product; this.urgent= urgent; }** } 위의 예시는 Order에 대한 두개의 생성자를 가지고 있다. 하나는 prime한 order, 또 하나는.. 2023. 9. 9.
728x90