본문 바로가기

Dev Book Review/Effective Java

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

1. 정적 메서드와 정적 필드만을 담을 클래스의 쓰임새

  • 기본타입 값이나 배열 관련 메서드를 모아 둘 때 (java.lang.Math, java.util.Arrays)
  • 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(팩터리)를 모아둘 때 (java.util.Collections)
  • final 클래스와 관련한 메서드

 

2. 인스턴스화를 막는 방법.

정적 멤버만 담을 때는 인스턴스로 만들어 쓰려고 설계한게 아님.

문제 ) 생성자를 명시하지 않을 때 자동으로 기본 생성자가 만들어짐 (인스턴스화가 가능해진다)

해결 ) private 생성자를 추가해서 클래스의 인스턴스 화를 막을 수 있다

  • 상속을 불가능하게 하는 효과 (하위가 상위 생성자 접근을 할 수 없다.)
  • 직관적이지 않을 수 있으니 적절한 주석을 달자
public class UtilityClass {
    // 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용).
    private UtilityClass() {
        throw new AssertionError();
    }
    // 나머지 코드는 생략
}