EffectiveJava
-
아이템 4 . 인스턴스화를 막으려거든 private 생성자를 사용하라EffectiveJava 2021. 4. 21. 22:29
정적 메서드와 정적 필드만을 담은 클래스를 만들 때 예시 java.lang.Math java.util.Array java.util.Collections final 클래스와 관련한 메서드들 기본 타입, 배열 관련 메서드, 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을 수 있음 위에처럼 정적 멤버만들 담은 유틸리티 클래스는 인스턴스로 만들려고 설계한 것이 아니지만, 컴파일러가 자동으로 기본 생성자를 만든다. 매개변수를 받지 않는 public 생성자가 만들어짐. 컴파일러가 기본 생성자를 만드는 경우 명시된 생성자가 없을 때 추상 클래스로 만드는 것으로는 인스턴스 화를 막을 수 없음 해결방법 private 생성자를 추가하여 클래스의 인스턴스 화를 막을 수 있음 (상속은 불가능) public..
-
아이템 3 . private 생성자나 열거 타입으로 싱글턴임을 보증하라EffectiveJava 2021. 4. 21. 21:56
싱글턴(Singleton) 하나의 인스턴스만을 생성할 수 있는 클래스 싱글턴을 만드는 방식 생성자를 private으로 만들고, 생성자에 접근할 수 있는 수단으로 public static멤버가 final인 경우 public class Employee { public static final Employee INSTANCE = new Employee(); private Employee() {}; .. } 첫 번째 방식으로 코드를 작성 할 경우, 코드에서 해당 클래스가 싱글턴임이 드러난다는 장점이 있다. 생성자를 private으로 만들고, 정적 팩터리 메서드를 public static 멤버로 제공 public class Employee { private static final Employee INSTANCE =..
-
아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라EffectiveJava 2021. 4. 16. 16:10
파라미터가 너무 많은 경우 점층적 생성자 패턴(telescoping constructor pattern) 을 주로 사용했다. 점층적 생성자 패턴 필요한 파라미터에 따라 생성자를 모두 만드는 것 public class Food { private final String name; private final int servings; private final int calories; private final int fat; ... public Food(String name, int servings) { this(name, servings); } public Food(String name, int servings, calories) { this(name, servings, 0); } } 점층적 생성자 패턴을 이용하..
-
아이템 1. 생성자 대신 정적 팩토리 메서드를 고려하라EffectiveJava 2021. 4. 15. 16:03
클라이언트가 클래스의 인스턴스를 얻는 방법 public 생성자 정적 팩터리 메서드(static factory method) 정적 팩터리 메서드(static factory method)란? 클래스의 인스턴스를 반환하는 정적 메서드 객체 생성의 역할을 하는 메서드라고 볼 수 있음 예시 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }정적 팩터리 메서드의 장점 이름을 가질 수 있음 이름을 지어 반환될 객체의 특성을 쉽게 표현할 수 있다 ex) 소수점을 반환하는 메서드 BigInteger.probablePrime 은 BigInteger(int, int, Random) 처럼 파라미터로 파악하는 것보다 메서드의 ..