ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Design Pattern] 싱글톤(Singleton) 패턴 - 디자인 패턴
    CSE/Design Pattern 2015. 6. 13. 10:25

    Pattern #2  싱글톤 패턴



     어떤 클래스, S의 인스턴스를 단 하나만 만들고 싶을 때.

     어플리케이션 전체에 꼭 하나만 필요한 경우.






     패턴의 핵심

      - S의 생성자를 private으로 만들고, S 안에 private 정적 속성을 정의한다. 이를 접근하는 public 함수를 제공한다.

      - 싱글톤은 오직 한 개의 객체만 존재하려는 목적이 있어 더 이상 만들려는 생성자의 호출을 안전하게 막아야 한다.


      


     사례#1 - 보고서 문제


     연구실의 실험 결과 평가 어플리케이션

      - 정확히 하나의 experiment 객체만이 실시간에 존재함을 보장해야 한다.

     




     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package singleton;
     
    public class Client {
        public Client() {
            super();
        }
        
        public static void main(String[] args) {
            Experiment experiment = Experiment.getTheExperiment();
            experiment.analyze();
            experiment.reportResults();
            
        }
    }
     
     
    cs








     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    package 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

     


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    package 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


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package anot_singleton;
     
    public class singletonMain {
        public static void main(String[] args) {
            President president = President.getPresident();
            
            System.out.println(president.toString());
        }
    }
     
    cs






     









     

    댓글

Designed by Tistory.