'getinstance()'에 해당되는 글 1건

  1. 2013.04.01 getInstance, 싱글턴 패턴(Singleton Pattern)
728x90

싱글턴 패턴

- 인스턴스가 하나뿐인 특별한 객체

 

 

 

위 코드에서 MySinlgleton() 은 같은 패키지 내에서는 사용이 가능하나, 다른 패키지에서는 인스턴스를 만들 수 없는 클래스이다.

그 이유는 생성자가 private로 선언되어 있기 때문이다.

 

 

 

다른 패키지에서 사용하기 위해서는 getinstance() 라는 정적 메소드를 만들어서 사용 하면 된다.

MySinlgleton.getinstance(); 를 호출하게 되면 인스턴스를 계속 만들 수 있는 것이다.

 

 

 

하지만 하나뿐인 인스턴스 객체를 만들고 다면, 이렇게 하면, 조건문을 통해 생성되어있는지 없는지를 구별하여 반환하기 때문에 싱글턴패턴이 된다. 하지만 여기서 끝나는 것이 아니다.

 

 

 

만약 두개의 스레드가 위 코드를 실행하게 된다면, 내 의도와는 상관없이 두개의 인스턴스(Object1, Object2)가 생성되게 되버린다.

 

문제 해결방안에는

 

1. getinstance()를 동기화 시키는 것이다.

 

 

-synchronized 키워드만 붙이면 한 스레드가 메소드 사용을 끝내기 전까지는 다른 스레드는 메소드를 사용할수가 없게된다. 따라서 동시에 실행될 수가 없다.

-단 속도 문제가 생길 수 있다.(오버헤드)

 

2. 인스턴스를 처음부터 만들어 버린다

 

 

-정적 초기화 부분에서 Singleton의 인스턴스를 생성한다

-JVM에서 유일한 인스턴스를 생성하기 전에는 그 어떤 스레드도 uniqueinstance 정적 변수에 접근할 수 없다.

 

3. Double-Checking Locking(DCL)을 써서 getinstance()에 동기화한다.

 

-인스턴스가 생성되어 있는지 확인한 다음 생성되어 있지 않았을때만 동기화한다.

-처음에만 동기화를 하고 나중에는 동기화를 할 필요가 없다

-이렇게 함으로써 속도문제가 개선되고, 오버헤드를 줄이게 된다.

728x90

'JAVA' 카테고리의 다른 글

Signed와 Unsigned의 차이.  (0) 2013.10.07
퍼스펙티브(perspective)  (0) 2013.10.01
jericho parsing(제리코 파싱)맛보기...  (0) 2012.07.19
JSON 형식 맛보기 ...  (0) 2012.07.19
JSON 형식(JavaScript Object Notation)  (0) 2012.07.19
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침