본문 바로가기

이펙티브 자바

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

"인스턴스화를 막으려거든 private 생성자를 사용해라"는 조언은 유틸리타 클래스나 도우미 클래스와 같이 상태를 가지지 않고 단순 메서드만을 제공하는 클래스에서 주로 사용된다.

 

예시 : 

public class UtilityClass {
    // private 생성자를 추가하여 인스턴스화를 방지함
    private UtilityClass() {
        throw new AssertionError("UtilityClass should not be instantiated");
    }

    // 유틸리티 메서드 예시
    public static void utilityMethod() {
        // 메서드 구현
    }
}

 

예시에 나온 UtilityClass 같이 오직 메서드만을 제공할 경우 private 생성자를 추가해, 외부에서 인스턴스 생성을 막을 수 있다. 생성자 내부에서 AssertionError를 던지는 것은 내부에서 인스턴스를 생성하려는 시도를 방지하기 위함이다. 

이렇게 하면 클래스 설계 의도가 명확해지고, 불필요한 인스턴스 생성으로 인한 리소스 낭비를 방지할 수 있다.

모든 생성자를 private 으로 선언하지않았다면 Java에서 자동으로 기본생성자 public 을 추가해 어디서나 인스턴스를 생성할 수 있게된다.

 

결론 : private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.