본문 바로가기
책/이펙티브 자바 3판

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

by eunyoung 2023. 4. 18.

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

1. 기본 타입 값이나 배열 관련 메서드들을 모아놓을때 사용(java.lang.Math / java.util.Arrays)

 

2. 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아놓을때 사용(java.util.Collections)

 

3. final 클래스와 관련한 메서드들을 모아놓을때 사용.

 


인스턴스화를 막는 방법

(문제)

정적 멤버만 가지는 클래스는 인스턴스로 만들려고 설계한 것이 아님.

하지만, 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어줌으로, 인스턴스화 할 수 있는 클래스가 됨.

 

(해결방법)

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

하지만 직관적이지는 않으므로 적적한 주석을 달아주는 것이 좋음.

 

+) 이 방식은 상속을 불가능하게 하는 효과도 있음.

모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출함. 이를 private으로 선언했으니 하위 클래스가 상위 클래스의 생성자에 접근할 길이 없음.