상세 컨텐츠

본문 제목

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

Development Study/이펙티브 자바

by yooputer 2023. 3. 29. 09:56

본문

이펙티브 자바 2장 Item4를 요약한 내용입니다.


java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓은 클래스,

java.util.Collections처럼 정적메서드를 모아놓은 클래스,

final 클래스와 관련 메서드를 모아놓은 클래스는 인스턴스로 만들어 사용하도록 설계된게 아니다.

따라서 인스턴스화를 막아야 한다.

 

추상클래스로 만드는 것은 인스턴스화를 막을 수 없다. 

하위 클래스를 만들어 인스턴스화할 수 있기 때문이다.

 

인스턴스화를 막기 위해서 private 생성자를 사용한다.

생성자를 private로 설정하면 외부에서 호출할 수 없기 때문에 인스턴스를 생성할 수 없다.

하지만 클래스 내부에서는 생성자를 호출할 수 있는데 이를 막기 위해서 생성자에서는 Assertion Error를 호출한다.

public class UtilityClass{

	// 인스턴스화 방지용
	private UtilityClass(){
    		throw new AssertionError();
    	}
}

주석으로 인스턴스화를 방지하기 위한 생성자임을 명시해주는 것이 좋다.

 

이 방식은 상위클래스의 생성자를 호출할 수 없기 때문에 상속을 불가능하게 만든다.

 

관련글 더보기