Effect Java 제2판(Joshua Bloch / Addison Wesley) 을 공부하고 정리한 내용 입니다.

4. private 생성자를 사용해서 인스턴스 생성을 못하게 하자.

static 메소드와 static 필드만을 모아 놓은 클래스를 만들 필요가 종종 있을 것이다. 그런 유틸리티(Utility) 클래스들은 인스턴스를 생성하지 못하게 설계되었다. 인스턴스 생성이 무의미 하기 때문이다.(Math, Arrays 등) 그러나 그런 클래스일지라도 명시적으로 지정한 생성자가 없을 때는 컴파일러가 디폴트(default) 생성자를 만들어 준다.
클래스 사용자 입장에서는 이 생성자가 다른 것과 차이가 없으며, 인스턴스 생성이 가능한 클래스로 오인될 수 있다.

우리가 private 생성자를 정의하면 인스턴스 생성이 불가능한 클래스를 만들 수 있다.

 
// 인스턴스 생성이 불가능한 유틸리티 클래스
public class UtilityClass {
	// 디폴트 생성자가 자동으로 생기는 것을 방지한다.
	private UtilityClass() {
		throw new AssertionError();
	}
	... // 이하 생략
}

명시적으로 정의한 생성자가 private 이므로 이 클래스 외부에서는 생성자 호출이 불가능 하다.

Posted by outliers
,