싱글톤 패턴(Singleton Pattern)
" 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체(인스턴스)는 하나이고,
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체(인스턴스)를 리턴한다. "
객체(인스턴스)는 항상 하나만 생성된다.
정의
하나의 객체만 생성하고 사용해야 할 때, 적용할 수 있는 패턴이다.
만들어진 하나의 객체는 전역변수처럼 어디에서든지 참조할 수 있도록 하는 패턴이다.
역할
하나의 객체만을 생성하는 책임이 있으며 getInstance() 메소드를 통해 모든 클라이언트에게 동일한 객체를 반환하는 작업을 수행한다.
결과
오직 하나의 객체만을 보장한다.
전역 객체로써, 어디서든 접근이 가능하다.
public final class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
코드
- private 멤버 변수로 자기 자신의 클래스의 인스턴스를 가진다.
- 생성자는 private로 선언해서 외부에서 인스턴스를 생성할 수 없도록 한다.
- 생성된 딱 하나의 인스턴스를 반환하는 getInstance() method를 사용한다.
■ 싱글톤 패턴 사용하는 이유
- 고정된 메모리 영역에서 하나의 인스턴스 공간만 차지하기 때문에 메모리 낭비가 방지된다.
- 메모리 관리 측면에서 효율적인 패턴이다.
- 전역 인스턴스이므로 다른 클래스의 인스턴스들이 공유하여 사용하기 때문에, 요청이 많은 곳에서 사용하면 효율적이다.
- 공통된 객체를 여러개 생성해서 사용해야 하는 상황에 적합하다.
- 안드로이드 앱에서 각 액티비티별로 데이터를 일일히 전달하기가 번거로울 때 어디서나 접근 가능하도록 설계하면 편하다.
■ 싱글톤 패턴 단점
- 하나의 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유할 경우 다른 인스턴스끼리의 결합도가 높아진다.
- 따라서, 수정이 어려워지고 테스트하기가 어려워진다.
- 멀티 스레드 환경에서 인스턴스가 1개 이상 생성되는 경우가 발생할 수도 있다.
[출처] https://blog.naver.com/hhayoung96/