안드로이드
Singleton 패턴에 대하여
개굴이모자
2021. 2. 21. 22:41
반응형
Singleton 패턴이란
Singleton이란 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴으로,
생성자의 호출이 반복적으로 이루어져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해 주는 것
사용 장점
- 한번의 객체 생성으로 재사용이 가능하여, 메모리 낭비 방지
- 싱글톤으로 생성된 객체는 전역성을 띄기 때문에 다른 객체와 공유가 용이
- 예를들어, 그냥 생성자로 생성하는 방식이었다면 생성되는 객체가 여러개로, 동일한 객체를 공유하기 위해 번거로울 수 있으나,
싱글톤으로 생성된 객체는 getInstance 로 부르면 하나의 객체를 공유할 수 있다.
- 예를들어, 그냥 생성자로 생성하는 방식이었다면 생성되는 객체가 여러개로, 동일한 객체를 공유하기 위해 번거로울 수 있으나,
사용 단점
- 프로그램 전체에서 하나의 객체만을 공통으로 사용하기에, 다른 객체간의 결합도가 높아진다.
- 싱글톤 객체를 수정할 경우 다른 곳에서 싱글톤 객체를 사용할 때 사이드 이펙트가 발생할 확률이 존재.
- 멀티 스레드 환경에서 동기화 처리 문제 발생
Singleton의 적절한 사용
- 멀티 스레드 환경에서의 싱글톤
- Synchronized 를 통해 관리하여 공유 과정에서의 변화에 대응하기 위해 인터페이스의 형태로 관리
- 단일 스레드 환경에서의 싱글톤
- 정적 클래스의 형태로 사용하여, 클래스 로딩 단계에서 바로 초기화 되도록 한다.
간단한 사용 방법
- instance 라는 전역변수를 static 으로 두고, 생성자를 호출하며, 인스턴스화 하지 않고 사용할 수 있게 하였다.
- private 으로, 직접적인 접근을 불가하게 한다.
- 생성자 또한 private 으로, new 를 이용한 객체 생성도 불가하게 한다.
- getInstance 메서드를 이용해 해당 인스턴스를 얻어야 한다.
public class SingletonClass {
private static SingletonClass instance = new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
참고 링크
반응형