이펙티브 자바 완벽 공략 1부

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

아이템 4. 핵심 정리

  • 정적 메서드만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 클래스가 아니다
  • 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다.
  • private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.
  • 생성자에 주석으로 인스턴스화 불가한 이유를 설명하는 것이 좋다
  • 상속을 방지할 때도 같은 방법을 사용할 수 있다

public class UtilityClass {

    /**
     * 이 클래스는 인스턴스를 만들 수 없습니다.
     */
    private UtilityClass() {
        throw new AssertionError();
    }

    public static String hello() {
        return "hello";
    }

    public static void main(String[] args) {
        String hello = UtilityClass.hello();

        UtilityClass utilityClass = new UtilityClass();
        utilityClass.hello();


    }
}


  • throwable 밑에 error랑 exception, exception 밑에 runtime 밑에 있는 예외들이 Unchecked Exception, 그게 아닌 것들이 Checked Exception이라고 부르는데 Assertion Error는 예외를 처리하기 위한 그런게 아니다
  • AssertionError 얘는 잡지 않아도 되고 잡으라고 만드는 예외가 아니다 즉 try-catch를 하라고 만든 에러들이 아니고 에러들은 정말 이게 만나면 안 되는 상황이다. 이 상황을 나는 만나지 않길 바라는데 혹시라도 이 상황이 발생하면 무조건 잘못된 거다 라는 것이다

© 2020. All rights reserved.

SIKSIK