객체 지향 프로그램에서 인스턴스를 단 하나만 생성하는 디자인 패턴을 말한다. 자바에서는 static을 응용하여 프로그램 전반에서 사용하는 인스턴스를 하나만 구현하는 방식을 사용한다.
단계 1 : 생성자를 private로 만들기
기본적으로 생성자가 없는 클래스는 컴파일러가 자동으로 디폴트 생성자 코드를 삽입하는데 이때, public으로 생성을 한다. 그러면 외부 클래스에서 해당 클래스의 인스턴스를 여러 개 생성할 수 있다. 따라서 싱글톤 패턴에서는 명시적으로 접근 제어자를 private로 지정해야 한다.
단계 2 : 클래스 내부에 static으로 유일한 인스턴스 생성하기
단계1에서 private를 사용하여 외부 인스턴스를 생성할 수 없도록 했다. 그래서 프로그램에서 사용할 인스턴스 하나가 필요한데, 그걸 해당 클래스 내부에 인스턴스를 생성하여 사용하는 방식을 취한다. 또한 static을 사용하여 프로그램 전체에서 사용할 유일한 인스턴스로 생성해야 한다.
단계 3 : 외부에서 참조할 수 있는 public 메서드를 만든다.
클래스 내부에 생성한 유일한 인스턴스를 외부에서도 사용할 수 있도록 하기 위해 public 메서드로 해당 인스턴스를 반환해 준다. 이때, 해당 메서드는 static으로 선언해야 하는데 이유는 해당 클래스 인스턴스를 생성할 수 없기 때문에 인스턴스 생성과 상관없이 호출가능한 static을 사용해야 하는 것이다.
아래에는 싱글톤 패턴을 적용한 예제 코드이다.
public class Company {
private static Company instance = new Company();
private Company() {
}
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
}
public class ex {
public static void main(String[] args) {
Company c1 = Company.getInstance();
Company c2 = Company.getInstance();
System.out.println(c1 == c2); // 결과 : true
}
}