2장 객체 생성과 파괴 - 인스턴스화 방지

정지수 JisooJung·2021년 11월 21일
0

Effective Java 스터디

목록 보기
5/6

아이템 4. 인스턴스화를 막으려거든 private 생성자를 사용하라

정적 메서드와 정적 필드만을 담은 클래스가 필요한 경우는 아래와 같다.

  • 기본 타입 값이나 특정 목적의 메서드들을 모아놓을 때 ex) java.lang.Math, java.util.Arrays
  • 특정 인터페이스를 구현하는 객체를 생성하는 정적 메서드(혹은 팩터리)를 모아놓을 때 ex) java.util.Collections
  • final클래스와 관련한 메서드들을 모아놓을 때

private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다.

public class UtilityClass {
    // 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용).
    private UtilityClass() {
    	throw new AssertionError();
    }
    ...
}

생성자가 존재하는데 호출할 수 없으므로 직관적이지 못한 코드이다. 따라서 주석을 달아주어야 한다.
하위클래스가 상위클래스에 접근할 수 없으므로 상속을 불가능하게 하는 효과도 있다.


Reference

조슈아 블로크Joshua Bloch, 『이펙티브 자바 Effective Java 3/E』, 개앞맵시(이복연) 옮김, 인사이트(2018), p26-27.

profile
Study&Work&Log

0개의 댓글