싱글턴 패턴(Singleton Pattern)

2016. 11. 12. 18:11Programming/Java

싱글턴 패턴(Singleton Pattern)

:하나의 인스턴스를 전역적으로 사용하는 것


<예제>

시나리오: 한 부자의 집에 도둑이 연달아 들어와 돈(money)를 털어감


<SingletonClass: 부자>


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
public class SingletonClass {
    private static SingletonClass SINGLETON_CLASS_INSTANCE = new SingletonClass();
    public int money = 10000;
    
    private SingletonClass(){
    //외부에서 객체 생성 못 하도록 생성자를 private으로 지정
    //getSingletonClass() 통해서만 객체 불러올 수 있음
    }
    
    public static SingletonClass getSingletonClass(){
        if(SINGLETON_CLASS_INSTANCE == null){
            SINGLETON_CLASS_INSTANCE = new SingletonClass();
        }
        return SINGLETON_CLASS_INSTANCE;
    }
    
    public int getMoney(){
        return money;
    }
    
    public void setMoney(int money){
        this.money=money;
    }
}
 
cs


<첫 번째 도둑이 5000 털어감>


1
2
3
4
5
6
public class FirstThief {
    public void steal(){
        SingletonClass single = SingletonClass.getSingletonClass();
        single.setMoney(single.getMoney()-5000);
    }
}
cs


<두 번째 도둑이 또 5000 털어감>


1
2
3
4
5
6
public class SecondThief {
    public void steal(){
        SingletonClass single = SingletonClass.getSingletonClass();
        single.setMoney(single.getMoney()-5000);
    }
}
cs


<실행 클래스>


1
2
3
4
5
6
7
8
9
10
11
12
public class Main {
    public static void main(String[] args) {
        SingletonClass single = SingletonClass.getSingletonClass();
        System.out.println("초기 자금 : "+single.getMoney());
        FirstThief ft = new FirstThief();
        ft.steal();
        System.out.println("첫번째 강탈 후 :"+single.getMoney());
        SecondThief st = new SecondThief();
        st.steal();
        System.out.println("두번째 강탈 후 :"+single.getMoney());
    }
}
cs


<결과 출력>


초기 자금 : 10000

첫번째 강탈 후 : 5000

두번째 강탈 후 : 0


'Programming > Java' 카테고리의 다른 글

유용한 API(Calendar, Timer, StringTokenizer)  (0) 2016.11.12
HashMap 출력법 3가지  (0) 2016.11.07
Day 27(9/8) TcpipServer  (0) 2016.09.09
Day 26(9/7) TcpipClient  (0) 2016.09.08
Day 25(9/6) 메모장 만들기  (0) 2016.09.06