본문 바로가기
Java

Effective Java #04 객체 생성을 막을 때는 private 생성자를 사용하라

by NaHyungMin 2016. 4. 13.

생성자를 생략하면 컴파일러는 자동으로 인자없는 public 기본 생성자를 만들어 버린다.

사용자는 자동 생성자와 일반 생성자를 구별할 수 있는 방법이 없다.

객체를 만들 수 없도록 하려고 클래스를 abstract로 선언해봤자 하위 클래스를 정의하는 순간 객체 생성이 가능해지며

상속 받아 사용하는 것이 맞다고 생각 할 수도 있다.


이 경우 기본 생성자는 클래스에 생성자가 없을 때 생성되니, private 생성자를 클래스에 넣어 객체 생성을 방지해야 된다.



1
2
3
4
5
6
7
8
9
//객체를 만들 수 없는 유틸리티 클래스
public class UtilityClass{
    //기본 생성자가 자동 생성되지 못하도록 하여 객체 생성 방지
    private UtilityClass(){
        throw new AssertionError();
    }
 
    ... //나머지 생략
}
cs