싱글톤패턴은 인스턴스가 프로그램 내에서 오직 하나만 생성되는 것을 보장하고, 프로그램 어디에서든 인스턴스에 접글할 수 있도록 하는 패턴이다.
즉, 똑같은 인스턴스를 여러개 만드는 것이 아닌, 기존에 생성했던 동일한 인스턴스를 사용하는것을 의미한다.
위의 개념을 토대로 싱글톤패턴을 구현해보자!
// SingleObj.java
public class SingleObj {
// 단 하나의 객체 생성을 위한 변수
private static SingleObj singleObj = null;
// 외부에서 객체를 생성하지 못하도록 private로 생성자 선언
private SingleObj() {
}
// 오직 하나의 객체만 생성
public static SingleObj getInstance() {
if(singleObj == null) {
singleObj = new SingleObj();
}
return singleObj;
}
}
외부에서 객체를 생성할 수 없도록 생성자를 private로 선언한다. 이렇게 할 경우 객체 생성에 대한 관리를 내부적으로 하게 된다.
외부에서 SingleObj객체를 생성할 수 없기 때문에, 미리 생성된 자신을 반환할 수 있도록 getInstance메서드를 정의한다. 이때, getInstance메서드는 static으로 정의한다.
getInstance메서드를 호출했을 때, 객체가 null이라면 새로운 객체를 생성하고 객체가 이미 존재하면 그것을 그대로 반환한다.
// Client.javva
public class Client {
public static void main(String args[]) {
for(int i = 0; i < 3; i++) {
SingleObj obj = SingleObj.getInstance();
System.out.println(obj.toString());
}
}
}
[결과화면]
위 결과에서 확인했듯이 기존에 객체가 있는 경우는 그것을 그대로 반환함으로써 처음 한번만 객체가 생성되고 그 뒤부터는 동일한 객체를 사용한다는걸 확인할 수 있다.