이펙티브 자바 3/E - 2장 아이템 4

aaron.park·2020년 3월 24일
0
post-thumbnail

자바 언어로 개발을 하다보면, 유틸리티 클래스와 같은 도구용 클래스, 즉 정적 메서드와 멤버만을 가지고 있는 클래스를 만들어 사용할 일이 있다. 즉, 이러한 정적 클래스들은 인스턴스화를 위해 설계된 클래스가 아니다.
그러나 생성자를 따로 정의하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다. 즉, 매개변수를 받지 않는 public 생성자가 만들어지며, 클라이언트 입장에서는 이 생성자가 자동 생성된 것인지 구분할 수 없다. 그렇기에 의도와는 다르게 인스턴스화 되는 상황이 발생한다고 한다.

인스턴스화를 막기 위해서는 private 생성자를 사용하면 된다.

public class UtilityClass {
   // 기본 생성자가 만들어 지는 것을 막는다.
   private UtilityClass {
      throw new AssertionError();
   }
   
   // ...생략...
}

AssertionError 예외를 던질 필요까진 없을지 모르지만, 클래스 안에서라도 실수로 생성자를 호출하지 않도록 한다. 보통 주석을 달아서 호출할 수 없는 생성자라는 것을 보여준다.
인스턴스화를 막을 때 뿐만 아니라, 상속을 불가능하게 하는 효과도 있으므로 잘 활용하면 좋을 것 같다.

profile
애런 퐉의 블로그

0개의 댓글