Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 생성자를 private으로 선언할 수 있을까?

네, 가능합니다. 자바에서는 생성자를 private으로 선언할 수 있습니다. 생성자를 private으로 선언하면 클래스 외부에서 해당 클래스의 객체를 직접 생성할 수 없게 됩니다. 이러한 특성 때문에 private 생성자는 싱글턴(Singleton) 디자인 패턴 구현 시 유용하게 활용됩니다.

private 생성자의 주요 특징과 조건

  • private 생성자를 가진 클래스는 상속(서브클래싱)할 수 없습니다.
  • 클래스 외부에서 객체를 생성할 수 없으며, 객체 생성은 오직 클래스 내부에서만 가능합니다.
  • 클래스의 모든 메서드가 유틸리티 성격의 메서드라면 private 생성자를 사용하는 것이 적합합니다.
  • 모든 메서드가 static으로 선언되어 있다면 private 생성자를 사용할 수 있습니다.
  • private 생성자를 가진 클래스를 상속하려고 하면 컴파일 타임 오류가 발생합니다.

예제 코드

class SingletonObject {
    private SingletonObject() {
        System.out.println("In a private constructor");
    }
    public static SingletonObject getObject() {
        // 클래스 내부에서만 생성자 호출 가능
        if (ref == null)
            ref = new SingletonObject();
        return ref;
    }
    private static SingletonObject ref;
}
public class PrivateConstructorDemo {
    public static void main(String args[]) {
        SingletonObject sObj = SingletonObject.getObject();
    }
}

실행 결과

In a private constructor

코드 설명

위 예제에서 SingletonObject 클래스의 생성자는 private으로 선언되어 있으므로, 외부에서 new SingletonObject()를 호출해 객체를 만들 수 없습니다. 대신 public static 메서드인 getObject()를 통해서만 인스턴스에 접근할 수 있으며, 이 메서드는 기존 인스턴스가 없을 때 최초 한 번만 객체를 생성하고 이후에는 동일한 인스턴스를 반환합니다. 이것이 바로 싱글턴 패턴의 핵심 원리로, 프로그램 전체에서 단 하나의 인스턴스만 존재하도록 보장합니다.