목적
정정 메서드와 정적 필드만을 담은 유틸성 클래스를 만들고 싶을 때.
ex: java.util.Collections, java.util.Arrays
정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어서 쓰려고 설계한 것이 아니다.
하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만든다.
해결방법
private 생성자를 추가하여 클래스의 인스턴스화를 막는다.
pubilc Class UtilityClass{
//기본 생성자가 만들어지는걸 막느다(인스턴스화 방지용)
private UtilityClass(){
throw new AssertionError();
}
...
}
- 명시적 생성자가 private이기 때문에 클래스 바깥에서는 접근할 수 없다.
- 클래스 안에서 실수로라도 생성자를 호출하지 않도록 예외를 던져주도록 한다.(MUST는 아님)
- 생성자가 있는데 호출할 수 없는 경우로 직관적이지 못하니 적절한 주석을 추가해둔다!!
'Java' 카테고리의 다른 글
[Effective Java] 아이템6. 불필요한 객체 생성을 피하라 (0) | 2022.03.20 |
---|---|
[Effective Java] 아이템5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2022.03.14 |
[Effective Java] 아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2022.03.14 |
[Effective Java] 아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2022.03.14 |
[Effective Java] 아이템1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2022.03.14 |