싱글톤 패턴이란, 하나의 객체에 대해 인스턴스를 새로 만드는 것이 아닌 기존의 인스턴스를 가져와 활욜하는 생성 패턴이다.
우리가 전역변수나, 정적 변수를 만들어서 언제 어디서는 같은 값을 사용하기위해 정의하는 것처럼 하나의 인스턴스를 생성해서 재사용하는 것이다.
객체의 생성이 리소스를 많이 차지할때 효과적이다.
예를 들면 DB 연결 모듈이 있을때, 이 객체가 제공하는 기능만 사용하면되는 것이기때문에 이 객체를 굳이 새롭게 생성하는 것이아닌 하나의 객체를 생성해주고 재사용하는 것이 효율적이다.
싱글톤 객체 코드
class Singleton {
// 싱글톤 클래스 객체를 담을 인스턴스 변수
private static final Singleton INSTANCE = new Singleton();
// 생성자를 private로 선언 (외부에서 new 사용 X)
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
싱글톤 객체 사용 코드
public class Main {
public static void main(String[] args) {
// Singleton.getInstance() 를 통해 싱글톤 객체를 각기 변수마다 받아와도 똑같은 객체 주소를 가리킴
Singleton i1 = Singleton.getInstance();
Singleton i2 = Singleton.getInstance();
Singleton i3 = Singleton.getInstance();
System.out.println(i1.toString()); // Singleton@1b6d3586
System.out.println(i2.toString()); // Singleton@1b6d3586
System.out.println(i3.toString()); // Singleton@1b6d3586
System.out.println(i1 == i2); // true
}
}
사실 싱글톤패턴을 하나의 인스턴스 생성을 보증해서 효율적이지만, 그와 반대로 문제점이 많다.
때문에 직접적으로 싱글톤 패턴을 사용하는 것보다는 스프링과 같은 프레임워크의 도움을 받아서 싱글톤 패턴을 사용하는 것이 좋다.