728x90 Effective JAVA4 4. 인스턴스화를 막으려거든 private 생성자를 사용하라 * 인스턴스화 : 인스턴스가 실제로 메모리에 할당된 상태 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이다. -> private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. (명시적 생성자가 private이므로 클래스 밖에서 접근할 수 없다.) public class Coffee{ private Coffee{// 생성자(인스턴스화 방지) ... } ... } 이 코드는 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아줍니다. * 이 방식은 상속을 불가능하게 막아준다. 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하게 되는데, 이를 private으로 선언했으므로 하위 클래스가 상위 클래스의 생성자에 접근할 수 없다. 2021. 8. 22. 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 - 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기 어려워질 수 있다. 싱글턴을 만드는 방식 1. 생성자를 private로 감춰두고 인스턴스에 접근할 수 있는 수단으로 public static 맴버를 하나 생성한다. public class Coffee{ public static final Coffee INSTANCE = new Coffee(); private Coffee(){...} public void leaveTheBuilding(){...} } 2. 정적 팩터리 메소드를 public static 맴버로 제공 public class Coffee{ private static final Coffee INSTANCE = new Coffee(); private Coffee(){...} pub.. 2021. 8. 22. 2. 생성자에 매개변수가 많다면 빌더를 고려하라 점층적 생성자 패턴 단점 매개변수가 많아지면 코드를 작성하거나 읽기 힘들다. - 매개변수의 개수, 의미를 주의해서 확인해야 한다.. - 타입이 같은 매개변수가 연달아 늘어 있으면 찾기 어려운 버그로 이어질 수 있다. -> 실수로 매개변수의 순서를 바꿔 전달해도 컴파일러단에서 확인할 수 없다. JavaBeans 패턴 * 점층적 패턴의 단점을 보완하기 위해 등장 단점 - 객체를 하나 만들기 위해 메서드를 여러개 호출해야 한다. - 객체가 완전히 생성되기 전까지 일관성(consistency)이 무너진 상태에 놓이게 된다. - 스레드 안전성을 얻기 위해 프로그래머가 추가 작업을 해줘야 한다. Builder 패턴 * 매개변수 중 다수가 필수가 아니거나 같은 타입이면 점층적 생성자보다 코드를 읽고 쓰기가 훨씬 간결.. 2021. 8. 22. 1. 생성자 대신 정적 팩토리 메서드를 고려하라 * 다음과 같이 public 생성자 대신(or 함께) 정적 팩토리 메서드를 제공할 수 있습니다. Class Coffe{ private String name; private int price; public Coffee(String name, int price){//생성자 this.name = name; this.price = price; } public static Coffee Americano(){//정적 펙토리 메서드 return new Coffee("Americano", 4100); } public static Coffee Latte(){ return new Coffe("Latte", 4800); } } 장점 1. 이름을 가질 수 있어 반환될 객체의 특성을 쉽게 묘사할 수 있습니다. 2. 호출될 때마.. 2021. 8. 22. 이전 1 다음 728x90