본문 바로가기
Java

[Java] 싱글톤 패턴

by bkuk 2023. 3. 1.

싱글톤 패턴(singleton pattern)

 

객체 지향 프로그래에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 싱글톤 패턴이라고 한다. 이 싱글톤 패턴은 static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식이다.

예를 들어, 회사의 직원들을 객체 지향 프로그램으로 구현한다고 가정해본다면, 직원은 여러 명이겠지만 회사는 하나이다. 이런 경우에 직원 인스턴스는 여러개 생성하는 것이 당연하지만, 회사 객체는 하나만 생성해야한다.


 

 

생성자를 private로

 

생성자가 하나도 없는 클래스는 컴파일러가 자동적으로 디폴트 생성자를 넣어준다. 이 디폴트 생성자는 항상 public이다. public 라는 의미는 외부 클래스에서 인스턴스를 여러개 생성할 수 있다는 의미이다. 설명하고자 하는 싱글톤 패턴에서는 마음대로 인스턴스를 생성하게 해서는 안된다. 즉, 선언한 클래스 내부에서만 생성을 제어해야 한다.

package singleton;

public class Company {
	private Company() {}
}

 

클래스 내부에 static으로 유일한 인스턴스 생성

 

위에서 외부 인스턴스를 생성할 수 없게 생성자를 private로 지정했다.하지만, 프로그래에서 사용할 인스턴스는 무조건 하나 필요하다. 따라서 클래스 내부에서 하나의 인스턴스를 생성한다. 이 인스턴스는 프로그램 전체에서 사용할 유일한 인스턴스이다.

package singleton;

public class Company {
	private static Company instance = new Company();
	private Company() {}
}

 

외부에서 참조할 수 있는 public 메서드 생성

 

위에서 생성한 유일한 인스턴스를 외부에서도 사용할 수 있도록 설정해야 한다. 이를 위해 public 메서드를 생성한다. 이 메서드는 유일하게 생성한 인스턴스를 반환해준다. 이때 메서드는 반드시 static으로 지정을 해서 외부에서 인스턴스 생성과 상관없이 호출할 수 있도록 한다.

package singleton;

public class Company {
	private static Company instance = new Company();
	private Company() {}
    
    	public static Company getInstance() {
            if( instance == null ) {
                instance = new Company();
            }
            return instance;
    	}
}

 

실제로 사용하려면..

외부 클래스에서 Company를 생성할 수 없으므로 static으로 제공되는 getInstance() 메서드를 호출한다.

Company myCompany = Company.getInstance();

댓글