Singleton 패턴이란 static 명령어를 이용하여 전 시스템에 단 하나의 인스턴스만이 존재하도록 구현하는 방식이다.
구현 방식은 아래와 같이 크게 세 가지로 나눌 수 있다.
- 자바에는 글로벌 변수가 없기 때문에 static 변수(class 변수라고도 함)를 사용하여 class 내부에 인스턴스를 private으로 생성(변경할 수 없도록)한다.
- 생성자가 없으면 public default 생성자가 생성되기 때문에, 생성자를 private으로 만든다.
- 외부에서 생성된 객체에서 static 변수를 사용할 수 있어야 하기 때문에, public으로 선언된 static 변수에 접근 가능한 static 메서드를 구현한다.
아래는 singleton 패턴 구현 예시이다.
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 CompanyTest {
public static void main(String[] args) {
Company c1 = Company.getInstance();
Company c2 = Company.getInstance();
System.out.println(c1 == c2); // true
// Company c3 = new Company(); // error
}
}