이번시간에는 많이 사용하는 디자인 패턴인 싱글톤 패턴에 대해 알아보도록 하겠습니다.
아래의 그림처럼 싱글톤 패턴을 사용하면, 싱글톤패턴을 사용한 특정 클래스에 오로지 1개의 인스턴스를 통해 접근할 수 있습니다.
1. 싱글톤 패턴이란
하나의 프로그램 내에서 하나의 인스턴스만 생성해야하는 상황에서 사용.
다양한 클래스에서 하나의 인스턴스를 공유해야할 때 사용
안드로이드(자바)에서 싱글톤 패턴을 사용할 때 아래와 같이 사용한다...
2. 기본적인 싱글톤 구현하기 (안드로이드, 자바 에서)
public class Singleton(){
private static Singleton singletonInstance;
public static Singleton getInstance(){
if(singletonInstance==null){
singletonInstance = new Singleton();
}
return singletonInstance;
}}
3. 싱글톤 멀티스레딩 문제 해결법
Singleton is not thread safe
그러나, 여기서는 이 싱글톤이 thread safe하지 않을 수 있다. 즉 다중쓰레드에서 2개이상의 인스턴스가 생성 될 수 있다는 말이다. 불필요한 오버헤드가 생길 수 있다.
해결 방법1 : 제한적인 해결방법 |
-> 단순히 이문제를 풀기 위해서 syncronized를 붙이면 위의 문제를 해결할 수 있음.
-> Bum 성능상의 이슈가 생길 수 있음
public class Singleton(){
private static Singleton singletonInstance;
public static synchronized Singleton getInstance(){if(singletonInstance==null){singletonInstance = new Singleton();
}
return singletonInstance;
}}
해당 싱글톤 이슈가 어플에 그리 중요하지 않으면 나둬도 되지만,
이 싱글톤으로 인해 100배 이상의 속도가 느려질 수도 있습니다.
해결 방법2 : 최적 해결방법 |
-> 단순히 이문제를 풀기 위해 DCL(Double-Checking Locking을 써서 동기화되는 부분을 줄임
-> 처음에만 동기화가 되고 나중에는 동기화가 되지 않는 가장 적합한 방법임
# queueManagerInstance 변수 앞에 volatile 키워드를 붙여, DCL을 사용함
public class Singleton(){
private static volatile Singleton singletonInstance = null;
public static Singleton getInstance(){
if(singletonInstance==null){
synchronized (Singleton.class){
if(singletonInstance==null){
singletonInstance = new Singleton();
}
}
}
return singletonInstance;
}}
출처 :
Head First Design Pattern
http://www.jpstory.net/2013/05/singleton-pattern/
'IT이야기 > JAVA' 카테고리의 다른 글
Access Specifiers vs Access Modifiers (0) | 2016.03.20 |
---|---|
[DURGA코딩인터뷰대비] String과 StringBuffer 차이 (0) | 2016.03.20 |
[생활코딩!] JAVA LinkedList, Doubly Linked List 간단한 소개 및 정리 (0) | 2016.03.02 |
[JAVA Arraylist,Linkedlist 객체 중복제거] Custom List객체를 hashset으로 중복제거 하는 방법 (0) | 2016.03.01 |
[생활코딩]JAVA Arraylist 특징과 주요 메소드 소개 (0) | 2016.01.19 |