짧은 코멘트
- 유틸성 클래스에 private 생성자가 없으면 '엇 이 개발자분 Effective Java 안읽으셨나?' 라는 생각이 가장 먼저 든다 ㅋㅋㅋ
- 클래스 본문의 길이를 줄이고 싶어, lombok의
NoArgsConstructor(accessLevel = AccessLevel.PRIVATE)
을 사용하는 것을 개인적으로 선호한다 ㅎㅎ
인스턴스화를 막고 싶을 때는 private 생성자를 사용하면 된다
단순히 정적 메소드와 정적 필드만을 담은 클래스를 만들고 싶다면, 그리 곱게 보이지는 않지만 아래의 경우에 쓸모가 있다
- 기본값이나 관련 메소드들을 모아 놓을 때 (ex. java.util.Arrays, java.lang.Math)
- 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메소드를 모아 놓을 때
- final 클래스와 관련한 메소드를 모아 놓을 때
하지만 이런 클래스들은 인스턴스화 되면 안된다 추상 클래스를 만드는 것으로는 인스턴스화를 막을 수 없으므로 (하위 클래스를 만들어 인스턴스화 할 수 있다) private 생성자를 추가하면 된다
private 생성자 내에서 error까지 던진다면 클래스 안에서도 인스턴스 생성을 막을 수 있으며, 상속을 불가능하게 만드는 효과도 있다
public class UtilityClass {
private UtilityClass() {
throw new AssertionError();
}
}
'개발 공부 기록하기 > 01. JAVA & Kotlin' 카테고리의 다른 글
짧은 코멘트와 함께하는 이펙티브 자바) #6 불필요한 객체 생성을 피하라 (0) | 2020.09.22 |
---|---|
짧은 코멘트와 함께하는 이펙티브 자바) #5 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2020.09.21 |
짧은 코멘트와 함께하는 이펙티브 자바) #3 private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2020.09.18 |
짧은 코멘트와 함께하는 이펙티브 자바) #2 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2020.09.17 |
짧은 코멘트와 함께하는 이펙티브 자바) #1 생성자 대신 정적 팩토리 메소드를 고려하라 (0) | 2020.09.16 |