public class UtilityClass {
private UtilityClass() {
throw new AssertionError();
}
...
}
- 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다.
===> 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
- 명시적 생성자가 private이니 클래스 바깥이서는 접근할 수 없다.
- 꼭 AssertionError를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다.
- 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아준다.
- 상속을 불가능하게 하는 효과도 있다.
- 그러나 그다지 직관적이지 않으므로 적절히 주석을 달아주도록 하자.
'공부 기록 > Java' 카테고리의 다른 글
[이펙티브 자바 3/E] 아이템6 - 불필요한 객체 생성을 피하라 (0) | 2023.07.06 |
---|---|
[이펙티브 자바 3/E] 아이템5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2023.07.06 |
[이펙티브 자바 3/E] 아이템3 - private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2023.07.02 |
[이펙티브 자바 3/E] 아이템2 - 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2023.06.30 |
[이펙티브 자바 3/E] 아이템1 - 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2023.06.30 |