본문 바로가기

Java

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

목적

정정 메서드와 정적 필드만을 담은 유틸성 클래스를 만들고 싶을 때.

ex: java.util.Collections, java.util.Arrays

 

정적 멤버만 담은 유틸리티 클래스는 인스턴스로 만들어서 쓰려고 설계한 것이 아니다.

하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만든다.

 

해결방법

private 생성자를 추가하여 클래스의 인스턴스화를 막는다.

pubilc Class UtilityClass{
	//기본 생성자가 만들어지는걸 막느다(인스턴스화 방지용)
    private UtilityClass(){
    	throw new AssertionError();
    }
    ...
}
  • 명시적 생성자가 private이기 때문에 클래스 바깥에서는 접근할 수 없다.
  • 클래스 안에서 실수로라도 생성자를 호출하지 않도록 예외를 던져주도록 한다.(MUST는 아님)
  • 생성자가 있는데 호출할 수 없는 경우로 직관적이지 못하니 적절한 주석을 추가해둔다!!