Effective Java
-
[Effective Java] 아이템4: 인스턴스화를 막으려거든 private 생성자를 사용하라Language/Java 2022. 5. 14. 02:17
이따금 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있을 것이다. 이렇게 정적 멤버만 담은 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다. 따라서 이러한 클래스의 인스턴스화를 막아야하는데, 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다는 문제가 있다. 그렇다면 어떻게 클래스의 인스턴스화를 막을 수 있을까? 그 방법은 private 생성자를 추가하는 것이다. 다음의 코드를 참고하자. public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다 (인스턴스화 방지용) private UtilityClass() { throw new AssertionError(); } ... // 나머지 코드는 생략 } 이렇게 구현하면, 명시적 ..
-
[Effective Java] 아이템3: private 생성자나 열거 타입으로 싱글턴임을 보증하라Language/Java 2022. 5. 14. 00:58
싱글턴(Singleton) 이란? 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 싱글턴의 전형적인 예로는 함수와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있다. 싱글턴을 만드는 방식은 3가지가 있다. public static final 필드 방식 (private 생성자 사용) 정적 팩터리 방식 (private 생성자 사용) 열거 타입 방식 이제 각각의 방식을 알아보자. 1. public static final 필드 방식 public calss Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leaveTheBuilding() { ....
-
[Effective Java] 아이템2: 생성자에 매개변수가 많다면 빌더를 고려하자Language/Java 2022. 5. 13. 23:39
정적 팩터리와 생성자에는 똑같은 제약 사항이 하나 있다. 바로 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 선택 매개변수가 많을 때 취할 수 있는 대안을 알아보자. 선택 매개변수가 많을 때 활용할 수 있는 대안 1. 점층적 생성자 패턴(Telescoping Constructor Pattern) 먼저 점층적 생성자 패턴이 있다. 이 패턴은 필수 매개변수만 생성자부터, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수 2개까지 받는 생성자, ... 형태로 선택 매개변수를 전부 받는 생성자까지 늘려가는 방식이다. 점층적 생성자 패턴은 매개변수 개수가 많아지면 클라이언트 코드를 작성하거나 읽기가 어렵다는 문제가 있다. 코드를 읽을 때, 각 값의 의미가 헷갈리고, 매개변수가 몇 개..
-
[Effective Java] 아이템1: 생성자 대신 정적 팩터리 메서드를 고려하라Language/Java 2022. 5. 13. 15:17
✔️ 정적 팩터리 메서드(Static Factory Method) 란? 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 참고) 정적 팩터리 메서드는 디자인 패턴에서의 팩터리 메서드 (Factory Method)와 다르다. 디자인 패턴 중 이와 일치하는 패턴은 없다. ✔️ 장점 1. 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면, 정적 팩터리 메서드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. BigInteger(int, int, Random) vs BigInteger.probablePrime '값이 소수인 BigInteger를 반환한다'는 의미를 어느 쪽이 더 잘 설명하고 있는지는 누구나 알 것이다. 2. ..