[디자인패턴] 싱글톤패턴(Singleton pattern)

2016. 11. 15. 00:17프로그래밍/디자인패턴

    목차

싱글톤패턴(Singleton pattern)


 하나의 인스턴스 만을 생성하도록 구현하는 패턴


  작성형식

코드1

코드2


  설명

코드1은 간단한 구조로 구현한 싱글톤(singleton) 패턴의 클래스이다. 코드를 살펴보면 프로젝트 전역에서 사용할 static 변수를 선언해 주고 기본 생성자를 private 접근제어자를 이용해 객체 생성을 막았다. getInstance() 메서드는 전역 변수에 인스턴스가 생성되어 있는지 확인 후 객체가 null 이면 새로운 인스턴스를 생성 후 전역 변수에 할당하고 그 전역변수를 return 해주고 null이 아닐 경우는 가지고 있는 전역변수를 return 해주도록 되어 있다.


코드2는 싱글톤패턴으로 구현한 클래스를 사용하는 예이다. 일반적으로 우리가 인스턴스를 생성할 때 사용하던 new 클래스명(); 형태로는 오류가 발생하여 호출할 수 없고 Singleton.getInstance() 메서드를 호출해 인스턴스를 반환 받아 사용 하도록 구현했다.


위 코드가 자바 싱글톤 패턴의 고전적인 코드 구현방식이나 실제 이 코드를 형태로 구현 해서는 안된다. 멀티 스레드 환경에서 여러 스레드가 인스턴스를 획득하기 위하여 경합을 벌이다 서로 다른 인스턴스가 생성이 되는 문제가 발생할 수 있다.


싱글톤 패턴을 활용하는 상황

    • 클래스의 인스턴스가 오직 하나여야 함을 보장하고, 잘 정의된 접근 방식에 의해 모든 클라이언트가 접근할 수 있도록 해야 할 때.
    • 유일하게 존재하는 인스턴스가 상속에 의해 확장되어야 할 때
    • 클라인트는 코드의 수정 없이 확장된 서브클래스의 인스턴스를 사용할 수 있어야 할 때.


  참조


http://daddygoms.tistory.com/484