본문 바로가기
역량 UP!/DesignPattern

[첫번째 스터디] singleton 패턴

by 태하팍 2013. 7. 21.
반응형


2013년 07월10 사내 스터디가 부활 하였다. 두둥~

2번째 용수철 스터디가 시작 되었다.

처음에는 굿택과 둘이서 하려고 하였다가 2명을 더 추가하여 소스정예로 하게 되었다.^-^good~


이번 사내 스터디의 내용은 디자인 패턴이다!!!

개발코드를 중심으로 하는 스터디 이며, 매우 성실하게!! 해야 할 것이다.


이제 주저리는 그만하고..본론으로 패턴에 대해 알아보도록 하겠다^-^



part 1. singleton pattern


싱글톤 패턴!!~


싱글+톤


마치..싱글 : 혼자, 하나 인 느낌

톤 : 스켈레톤 할 때 뼈대의 느낌 인 듯 하다.


그래서 싱글톤은 하나의 뼈대?? 라고 생각하면 될 것 같다.(저만의 생각입져..ㄷㄷ)

즉, java에서는 oop 즉 객제지향으로 봤을 때 싱글톤의 하나의 뼈대란 하나의 객체로 볼 수 있다.


매번 객체를 생성하는 것이 아니라 하나 만들어놓고 쭉~~~~쓴다는 것이다.

보통 데이터베이스를 접근 할 때 매번 접근 하는 것이 아니라 하나의 dao(data access object)를 만들어두고 

접근을 계속하게 되면 매번 connection을 하지 않아도 된다. 즉, 그만큼 비용이 절감 될 것이다.


이론은 이제 그만~~~몸소 체험을 해보자!! 코드로 말하자!!

디자인 패턴! 잡으로 가보자잉~~ 



소스의 패키지는 아래와 같다.



Junit으로 동작을 한다.



JUNIT 테스트 코드

package kr.pe.acet.singleton;

import static org.junit.Assert.*;
import kr.pe.acet.singleton.SingletonPattern;
import org.junit.Test;

public class SingletonPatternTest {

	@Test
	public void singleTonTest() {
		
		// set variable
		SingletonPattern mySingleton = null, yourSingleton=null;
		
		// get the object
		mySingleton = SingletonPattern.getInstance();
		yourSingleton = SingletonPattern.getInstance();
		
		// confirm the object
		assertEquals(mySingleton.print("Junit Test!!"), "Junit Test!!");
		assertEquals(yourSingleton.print("SingleTone Test!!"), "SingleTone Test!!");
		assertEquals("OK!!",yourSingleton, mySingleton);
	}

}


assertEquals("OK!!",yourSingleton, mySingleton); 마지막 라인처럼 객체가 서로 같은지 비교 한다.

package kr.pe.acet.singleton;

/**
 * @author acet
 *
 */
public class SingletonPattern {

	private static SingletonPattern singleton;
	
	private SingletonPattern(){
		
	}
	
	public static SingletonPattern getInstance(){
		if(singleton == null){
			synchronized(SingletonPattern.class){
				if(singleton == null)
				singleton = new SingletonPattern();
			}
			
		}
		return singleton;
	}
	
	public String print(String str){
		System.out.println("출력 : "+str);
		return str;
	}
	
	// private volatile static ~~
	// 쓰레드는 
	
	
}

결과

출력 : Junit Test!! 

출력 : SingleTone Test!!





스터디를 하면서 싱글톤의 종류? 사용 방법이 3개쯤 소개가 되었다. 
그중에 가장 많이 쓰이는 것이 위의 방법이다. 
synchronized를 언제 해주는가 하는 시점 차이와 singleton == null 을 체크를 언제 해주냐 하는 시점의 차이가 있다. 
 맨 밑의 라인에 뵈는 volatile 은 또한 중요한 개념이였다. 
간단히 말하면 쓰레드들은 메모리를 복사해서 쓰는데 있어서 위의 volatile 키워드를 사용하면 복사를 하지 않고 메모리에 올라와있는 원본을 가지고 사용하게 된다. 
즉, 혹시나 모르는 변경에 대한 리스크를 막을 수가 있다. 
자세한 내용은 구글링을 해보면 좋을 것이다^-^good~

 part 1. singleton pattern END 

 To be Continue..



2013/07/21 - [Architecture/DesignPattern] - [첫번째 스터디] abstractFactory 패턴


반응형