본문 바로가기

도서/이펙티브 자바

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

 

생성할 필요가 없는 클래스가 잘못 생성(인스턴스화)되는 것을 막기 위해서 생성자를 private으로 두자

 

 

생성자가 필요없는 클래스

  • 정적 메서드, 필드만 담은 클래스
  • final 클래스와 관련 메서드를 모아놓은 클래스
  • 유틸리티 클래스 등

이 경우 생성자를 명시하지 않는데, 자바에서는 명시된 생성자가 없을 때 자동으로 생성한다.

이로 인해 의도치 않은 인스턴스화가 발생한다.

 

이러한 문제를 막기 위해, 추상 클래스로 만든다면 어떻게 될까? 

  • 하위 클래스를 만들어 인스턴스화를 할 수 있음 (인스턴스화 막기 불가)
  • 상속해서 사용하라는 뜻으로 오해할 수 있음

 

⭐️ 생성자를 만들되, private으로 설정한다. 

  • 상속 불가능
  • 외부에서 호출할 수 없어, 인스턴스화 불가

추가로 호출 시 에러를 던지게하면, 클래스 내부에서 실수로 생성자를 호출하지 않도록 막을 수 있다.

public class UtilityClass{
	// 인스턴스화 방지용
    private UtilityClass(){
    	throw new AssertionError();
    }
}
반응형