Item 4. 인스턴스화를 막는 private 생성자

심규환·2022년 1월 9일
0

Effective Java

목록 보기
4/29
post-thumbnail

때론 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 수가 있다. 오로지 필드만을 담은 클래스라던가 아니면 메소드만 담은 클래스라던가 말이다.
예를 들어, java.lang.Mathjava.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다.

그런데 이렇게 정적 맴버만을 담은 유틸리티 클래스는 인스턴스로 만들려고 설계한 것들이 아니다.
클래스 안에 있는 맴버들을 사용하기만 하고 싶을 뿐이기 때문에 따로 인스턴스를 생성하는 것을 막는 것이 중요하다.
하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어준다.

그렇기 때문에 생성자를 만들어주되 private 생성자로 만들어주면 클래스의 인스턴스화를 막을 수 있다.

public class UtilityClass {

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

명시적 생성자가 private이니 클래스 바깥에서는 접근할 수 없다. 생성자 안에
throw new AssertionError()를 굳이 넣을 필요는 없지만, 클래스 안에서 실수로라도 생성자를 호출하는 것을 막아준다. 이 방식은 상속도 불가능하게 하는 효과가 있다.
주석을 사용해서 사용자에게 친절히 알려주자.

profile
장생농씬가?

0개의 댓글