static 변수, 메서드를 활용하여 구현 할 수 있습니다.Company.java
package ch17; public class Company { // 클래스 내부에 유일한 private 인스턴스 생성 private static Company instance = new Company(); // 생성자는 private으로 선언 private Company() { } // 외부에서 유일한 인스턴스를 참조할 수 있는 public 메서드 제공 public static Company getInstance() { if(instance == null) instance = new Company(); return instance; } }
- 여기서
getInstance()메서드는 반드시 정적 메서드로 선언 해줘야 합니다.- 그 이유는
static멤버가 먼저 컴파일되기 때문에,static멤버의 컴파일 시점에서는static이 아닌 메서드나 필드는 정의되지 않기때문입니다.- 일반 메서드는 인스턴스를 먼저 생성한뒤 메서드를 호출 할 수 있지만 정적 메서드는 외부에서 클래스명.정적 메서드명로 사용할 수 있습니다.
ComapnyTest.Java
package ch17; import java.util.Calendar; public class CompanyTest { public static void main(String[] args) { // 이미 Compnay 생성자가 private으로 선언되어 있기 떄문에 생성자를 이용한 인스턴스 생성 불가 Company company3 = new Company(); // 인스턴스를 따로 생성하지 않고 클래스명.정적 메서드로 사용 가능 Company company1 = Company.getInstance(); // 외부에서 유일하게 인스턴스를 참조할 수 있는 public 메서드를 이용 Company company2 = Company.getInstance(); System.out.println(company1); System.out.println(company2); // Calendar calendar = Calendar.getInstance(); } }출력 결과
company1과company2가 모두 같은 인스턴스 주소값을 참조하고 있다는 것을 볼 수 있습니다.- 이처럼 싱글톤 패턴은 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴입니다.
UML