이펙티브 자바 2장 Item4를 요약한 내용입니다.
java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓은 클래스,
java.util.Collections처럼 정적메서드를 모아놓은 클래스,
final 클래스와 관련 메서드를 모아놓은 클래스는 인스턴스로 만들어 사용하도록 설계된게 아니다.
따라서 인스턴스화를 막아야 한다.
추상클래스로 만드는 것은 인스턴스화를 막을 수 없다.
하위 클래스를 만들어 인스턴스화할 수 있기 때문이다.
인스턴스화를 막기 위해서 private 생성자를 사용한다.
생성자를 private로 설정하면 외부에서 호출할 수 없기 때문에 인스턴스를 생성할 수 없다.
하지만 클래스 내부에서는 생성자를 호출할 수 있는데 이를 막기 위해서 생성자에서는 Assertion Error를 호출한다.
public class UtilityClass{
// 인스턴스화 방지용
private UtilityClass(){
throw new AssertionError();
}
}
주석으로 인스턴스화를 방지하기 위한 생성자임을 명시해주는 것이 좋다.
이 방식은 상위클래스의 생성자를 호출할 수 없기 때문에 상속을 불가능하게 만든다.
[이펙티브 자바] Item 6. 불필요한 객체 생성을 피하라 | 2장 (0) | 2023.04.05 |
---|---|
[이펙티브 자바] Item 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 | 2장 (0) | 2023.04.05 |
[이펙티브 자바] Item 3. private 생성자나 열거타입으로 싱글턴임을 보증하라 | 2장 (0) | 2023.03.29 |
[이펙티브 자바] Item 2. 생성자에 매개변수가 많다면 빌더를 고려하라 | 2장 (0) | 2023.03.22 |
[이펙티브 자바] Item 1. 생성자 대신 정적 팩토리 메서드를 고려하라 | 2장 (1) | 2023.03.15 |