본문 바로가기

공부 기록/Java

[이펙티브 자바 3/E] 아이템4 - 인스턴스화를 막으려거든 private 생성자를 사용하라

public class UtilityClass {
    private UtilityClass() {
        throw new AssertionError();
    }
    
    ...
}

- 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다.

===> 컴파일러가 기본 생성자를 만드는 경우는 오직 명시된 생성자가 없을 때뿐이니 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.

 

- 명시적 생성자가 private이니 클래스 바깥이서는 접근할 수 없다.

- 꼭 AssertionError를 던질 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하지 않도록 해준다.

- 어떤 환경에서도 클래스가 인스턴스화되는 것을 막아준다.

- 상속을 불가능하게 하는 효과도 있다.

- 그러나 그다지 직관적이지 않으므로 적절히 주석을 달아주도록 하자.