생성할 필요가 없는 클래스가 잘못 생성(인스턴스화)되는 것을 막기 위해서 생성자를 private으로 두자
생성자가 필요없는 클래스
- 정적 메서드, 필드만 담은 클래스
- final 클래스와 관련 메서드를 모아놓은 클래스
- 유틸리티 클래스 등
이 경우 생성자를 명시하지 않는데, 자바에서는 명시된 생성자가 없을 때 자동으로 생성한다.
이로 인해 의도치 않은 인스턴스화가 발생한다.
이러한 문제를 막기 위해, 추상 클래스로 만든다면 어떻게 될까?
- 하위 클래스를 만들어 인스턴스화를 할 수 있음 (인스턴스화 막기 불가)
- 상속해서 사용하라는 뜻으로 오해할 수 있음
⭐️ 생성자를 만들되, private으로 설정한다.
- 상속 불가능
- 외부에서 호출할 수 없어, 인스턴스화 불가
추가로 호출 시 에러를 던지게하면, 클래스 내부에서 실수로 생성자를 호출하지 않도록 막을 수 있다.
public class UtilityClass{
// 인스턴스화 방지용
private UtilityClass(){
throw new AssertionError();
}
}반응형
'도서 > 이펙티브 자바' 카테고리의 다른 글
| [이펙티브 자바] 6. 불필요한 객체 생성을 피하라 (0) | 2025.03.20 |
|---|---|
| [이펙티브 자바] 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 (0) | 2025.03.04 |
| [이펙티브 자바] 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라 (0) | 2025.02.22 |
| [이펙티브 자바] 2. 생성자에 매개변수가 많다면 빌더를 고려하라 (0) | 2025.02.21 |
| [이펙티브 자바] 1. 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2025.02.20 |