# ITEM4 인스턴스화를 막으려거든 private 생성자를 사용하라
정적 메서드와 정적 필드만을 담은 클래스
- 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식
- 나름의 쓰임새
# 정적 메서드와 정적 필드만을 담은 클래스, 나름의 쓰임새
java.lang.Math
java.util.Arrays
- 기본 타입 값이나 배열 관련 메서드들을 모아놓은 클래스
java.util.Collections
- 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(팩터리)
- final 클래스와 관련한 메서드들을 모아놓을 때
- final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능 하기 때문.
# 정적 멤버만 담은 유틸리티 클래스의 인스턴스화 방지
private 생성자를 추가하여 클래스의 인스턴화를 막아야 한다.
private UtilityClass() {
// 클래스 안에서 실수로라도 생성자를 호출하지 않도록 함.
throw new AssertionError();
}
1
2
3
4
2
3
4
- 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 생성함.
- 추상클래스로 만드는 것은 인스턴스화를 막을 수 없음
- 하위 클래스를 만들어 인스턴스화 할 수 있음
상속을 불가능하게 하는 효과
- 모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출한다.
- private 으로 선언되어, 하위 클래스가 상위 클래스의 생성자에 접근할 수 없다.