2020-11-05
싱글톤(Singleton)이란 전체 프로그램 내에서 하나의 객체만을 만드는 것을 이야기한다.
이는 싱글톤을 선언한 class 이외에 다른 곳에서 new를 이용한 새로운 생성자를 만드는 것을 제한하는 의미라고도 볼 수 있다.
싱글톤을 코드화 하기 위해서는 객체 앞에 private를 붙여 주어 선언된 class에서만 생성 가능하게 만들어 주면 된다.
구체적으로 코드로는 어떻게 선언되는지 알아보자.
public class singleton {
private static singleton st = new singleton();
private singleton() {}
static singleton getSt() {
return st;
}
}
위에는 싱글톤 객체를 생성하는 클래스이며, 아래는 메인 클래스이다. 첨부된 이미지와 같이 new 연산자를 이용한 새로운 객체를 생성하고자 하면 오류가 발생하는 것을 알 수 있다. 이는 앞서 말한 것과 같이 private 사용하여, 자신의 class 이외에 다른 class에서는 새로운 객체를 만들 수 없도록 제한시켰기 때문이다.
그러면 변수를 선언하기 위해서는 어떻게 할 것인가? 방법은 아래와 같다.
public class TemplateA {
public static void main(String[] args) {
// singleton test1 = new singleton();
// //새로운 객체가 생성되지 않음
// singleton test2 = new singleton();
// //새로운 객체가 생성되지 않음
singleton test1 = singleton.getSt();
singleton test2 = singleton.getSt();
if(test1 == test2) {
System.out.println("같음");
}else{
System.out.println("다름");
}
}
}
위의 코드식처럼 처음에 선언한 singleton 클래스 자체의 getSt() 메서드를 이용해서 변수를 선언해 주면 정상적으로 컴파일이 된다.
추가적으로 if 문을 통해 test1과 test2가 같은 객체를 참고하고 있는지 확인해보면 아래처럼 정상적으로 "같음"이 출력되는 것을 알 수 있다.