Singleton Pattern
은 디자인 패턴 중 하나입니다. 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴입니다. 즉, 클래스를 통해 생성할 수 있는 객체는 오직 하나여야 하고, 더 생성할 수 없어야 합니다.
📝사진 설명
Singleton Pattern
을 간단하게 나타내는 사진입니다.
-
표시는 접근 제어 지시자 private
를, +
표시는 public
을 의미합니다.
🔔 코드
public class Company {
private static Company instance = new Company();
private Company() { }
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
}
📝 설명
여기서 Company
는 앞서 말했던 하나의 객체만 생성할 수 있어야하는 클래스입니다. 그 말은 Company
객체를 생성할 수 없도록 생성자를 막아주어야 한다는 말입니다.
private Company( ) { }
이렇게 위와 같이 생성자의 접근제어 지시자를 private
로 지정하여 함부로 생성할 수 없도록 만들어 줍니다.
우리가 생성할 수 있는 단 하나의 객체를 어떻게 생성할 수 있지?
라는 의문을 가지실 것입니다.
그 단 하나의 객체는 미리 private static
변수로 미리 선언해 놓습니다.
(static
변수에 관해서는 다른 글에서 다루도록 하겠습니다. )
static
변수는 특이한 점이 객체를 따로 생성하지 않고도 참조할 수 있습니다. Company.instance
이런 식으로 클래스의 이름으로 참조할 수 있지만, 여기서는 private
변수로 선언해 놨으니 따로 getter
함수가 필요합니다.
public static Company getInstance() {
if(instance == null) {
instance = new Company();
}
return instance;
}
이렇게 위와 같이 instance를 리턴하는 함수를 따로 작성해 주어야 우리가 그 객체를 사용할 수 있습니다.
🔔 코드
public static void main(String[] args) {
Company company1 = Company.getInstance();
Company company2 = Company.getInstance();
System.out.println(company1);
System.out.println(company2);
}
📤 결과
위 코드를 실행한 결과는
Company@28a418fc
Company@28a418fc
이렇게 하나의 객체만을 사용하는 것을 알 수 있습니다.