본문 바로가기

Programming/과거포스팅

Singleton패턴

위키를 보면 아래와 같이 정의되어 있다.


소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다.


자바에서 생성자를 통해서 객체를 생성하면 생성한 객체들이 모두 다른 객체들이다.

하지만 싱글턴패턴을 이용하면 하나의 객체만 생성이 된다.


객체를 하나만 생성하게 된다면 어떠한 장점이 있기에 이 패턴을 사용하는 것일까?

스레드 풀, 캐시, 대화상자, 사용자 설정, 디바이스 드라이버 등등 객체가 전체 프로그램에서 오직 하나만 생성되어야 하는 경우

이 패턴을 사용하면 된다. 

짐작대로 메모리의 효율 , 가비지 컬렉터의 부하를 줄여줄 수 있을 것이다.


기초편이기 때문에 간단한 코드로만 알아보자

public class Singleton { private static Singleton singleton; // 생성자를 private로 선언하였기 때문에 new를 통한 생성이 불가능하다. private Singleton() { } // 인스턴스가 null일경우 한번만 객체를 생성한다. public static Singleton getInstance() { if (singleton== null) { singleton= new Singleton(); } return singleton; } }

아래와 같이 객체를 생성해서 비교를 하게 되면 true가 나오는 것을 확인 할 수 있다.
위의 코드는 기본적인 싱글턴 패턴이고 일반적인 경우 문제가 없지만 멀티스레드 환경에서 문제가 있다고 한다.
자세한 부분은 디자인패턴 입문편에서 작성하도록 하겠다.

public static void main(String[] args) {
Singleton singleton = Singleton.getInstance(); Singleton singleton1 = Singleton.getInstance(); System.out.println(singleton == singleton1); }

싱글턴 패턴은 이것으로 끝!

'Programming > 과거포스팅' 카테고리의 다른 글

Bridge pattern (브릿지 패턴)  (0) 2015.08.09
디자인패턴(Design Pattern)이란?  (1) 2015.08.09
FACADE패턴  (0) 2015.08.04
MVC패턴  (0) 2015.08.04
java filedownload(jsp filedownload, jsp 파일 다운로드)  (0) 2015.02.26