-
[Design Pattern] 싱글톤(Singleton) 패턴 - 디자인 패턴CSE/Design Pattern 2015. 6. 13. 10:25
Pattern #2 싱글톤 패턴
어떤 클래스, S의 인스턴스를 단 하나만 만들고 싶을 때.
어플리케이션 전체에 꼭 하나만 필요한 경우.
패턴의 핵심
- S의 생성자를 private으로 만들고, S 안에 private 정적 속성을 정의한다. 이를 접근하는 public 함수를 제공한다.
- 싱글톤은 오직 한 개의 객체만 존재하려는 목적이 있어 더 이상 만들려는 생성자의 호출을 안전하게 막아야 한다.
사례#1 - 보고서 문제
연구실의 실험 결과 평가 어플리케이션
- 정확히 하나의 experiment 객체만이 실시간에 존재함을 보장해야 한다.
12345678910111213141516package singleton;public class Client {public Client() {super();}public static void main(String[] args) {Experiment experiment = Experiment.getTheExperiment();experiment.analyze();experiment.reportResults();}}cs 12345678910111213141516171819202122232425262728293031package singleton;public class Experiment {private static final Experiment theExperiment = new Experiment();private String result = "Experiment result not yet assigned";private static int numTimesReferenced = 0;private Experiment() {super();}public synchronized void analyze() {theExperiment.result = "... The analysis shows that the experiment was a respounding success... ";}public static Experiment getTheExperiment() {++numTimesReferenced;System.out.println("Nothing that the Experiment singleton referenced "+ numTimesReferenced + " times so far");return theExperiment;}public void reportResults() {System.out.println(result);}}cs 다른 예제를 통해서 싱글톤 패턴을 살펴보자.
president.java
123456789101112131415161718192021package anot_singleton;public class President {private static President thePresident;private President() {}public static President getPresident() {if (thePresident == null) {thePresident = new President();}return thePresident;}public String toString() {return "I AM PRESIDENT";}}cs singletonMain.java
1234567891011package anot_singleton;public class singletonMain {public static void main(String[] args) {President president = President.getPresident();System.out.println(president.toString());}}cs 'CSE > Design Pattern' 카테고리의 다른 글
[Design Pattern] 데코레이터(Decorator) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 파써드(Facade) 패턴 (0) 2015.06.13 [Design Pattern] 빌더(Builder) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 추상 팩토리(Abstract factory) 패턴 (0) 2015.06.13 [Design Pattern] 프로토타입(Prototype) 패턴 - 디자인 패턴 (0) 2015.06.13 [Design Pattern] 팩토리(factory) 패턴 - 디자인 패턴 (0) 2015.06.13