# ITEM4 인스턴스화를 막으려거든 private 생성자를 사용하라

정적 메서드와 정적 필드만을 담은 클래스

  1. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식
  2. 나름의 쓰임새

# 정적 메서드와 정적 필드만을 담은 클래스, 나름의 쓰임새

  • java.lang.Math java.util.Arrays
    • 기본 타입 값이나 배열 관련 메서드들을 모아놓은 클래스
  • java.util.Collections
    • 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(팩터리)
  • final 클래스와 관련한 메서드들을 모아놓을 때
    • final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능 하기 때문.

# 정적 멤버만 담은 유틸리티 클래스의 인스턴스화 방지

private 생성자를 추가하여 클래스의 인스턴화를 막아야 한다.

private UtilityClass() {
    // 클래스 안에서 실수로라도 생성자를 호출하지 않도록 함.
    throw new AssertionError();
}
1
2
3
4
  1. 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 생성함.
  2. 추상클래스로 만드는 것은 인스턴스화를 막을 수 없음
    • 하위 클래스를 만들어 인스턴스화 할 수 있음

상속을 불가능하게 하는 효과

  • 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출한다.
  • private 으로 선언되어, 하위 클래스가 상위 클래스의 생성자에 접근할 수 없다.