싱글톤 패턴이란 단 하나의 유일한 객체를 만들기 위한 코드 패턴이다.
즉, 메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법을 말한다.
우리가 전역 변수라는 걸 만들어 이용하는 이유는, 똑같은 데이터를 메서드마다 지역 변수로 선언해서 사용하면 무의미하기도 않고 낭비이기 때문에, 전역에서 한번만 데이터를 선언하고 가져와 사용하면 효율적이기 때문이다.
이러한 개념을 그대로 클래스에 대입한 것이 싱글톤 패턴이라고 이해하면 된다. 따라서 보통 싱글톤 패턴이 적용된 객체가 필요한 경우는 그 객체가 리소스를 많이 차지하는 역할을 하는 무거운 클래스일때 적합하다.
싱글톤 패턴의 기본 구현에는 다음 세 가지 조건이 반드시 충족되어야 한다.
1. 싱글톤으로 이용할 클래스를 외부에서 마구잡이로 new 생성자를 통해 인스턴스화 하는 것을 제한하기 위해 클래스 생성자 메서드에 private 접근 제어자를 지정해야 한다.
2.유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다.
3.유일한 단일 객체를 참조할 정적 참조 변수가 필요하다.
-클라이언트는 getInstance() 메서드를 통해 싱글톤 인스턴스를 얻을 수 있다.
-getInstance() 메서드 내부에는 instance가 null이면 생성하고, null이 아니면 instance를 반환한다.
-이로써 단 하나만의 객체를 생성하여 사용할 수 있도록 한다
다음은 싱글톤으로 구성된 클래스를 외부에서 불러오는 예제이다. 정적 메서드로 getInstance()를 통해 객체를 불러와 변수에 저장하고 이를 출력해보면 똑같은 객체 주소를 가지고 있는 걸 볼 수 있다. 즉, 객체 하나만 생성하고 여러 변수에 불러와도 돌려쓰기를 한 것이다.
다음은 싱글톤 패턴을 사용하지 않은 BeforeSingleton 클래스를 사용하는 예제를 보여주고 있다. 이 예제에서는 새로운 객체를 생성할 때마다 서로 다른 객체가 생성되며, 이를 통해 객체 주소를 출력하면 각기 다른 주소 값을 확인할 수 있다. 즉, 새로운 객체를 생성할 때마다 메모리 상에 별도의 객체가 할당되는 것이다.
참고자료
[1] 티스토리 Inpa - 싱글톤(Singleton) 패턴 - 꼼꼼하게 알아보자
[2] 티스토리 IT is True - [Java] 싱글톤 패턴(Singleton Pattern) - 개념 및 예제