지난 스터디에서 다룬 Singleton 은 Instance 를 한 개로 제한함을 알 수 있었습니다.


이를 이용해서 우리는 Instance 를 두개로 제한하는 아래와 같은 Doubleton 을 구현할 수 있었습니다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
enum Doubleton {
    SINGLE("1번 인스턴스"), DOUBLE("2번 인스턴스");
 
    public static Main.Doubleton GetInstance() {
          // 토글
        a = (a + 1) % 2;
 
        Doubleton result = null;
            
        switch (a) {
        case 0:
            result = DOUBLE;
            break;
        
        case 1:
            result = SINGLE;
            break;
        
        default:
            new RuntimeException(String.format("[에러] 예상못한 TOGGLE 변수 : %d", a));
        }
        
        return result;
    }
 
    private static int a = 0;
    private String toStringMessage;
 
    Doubleton(String toStringMessage) {
        this.toStringMessage = toStringMessage;
    }
 
    @Override
    public String toString(){
        return toStringMessage;
    }
}
 
// TEST CODE
for (int i = 0; i < 100000++i) {
    new Thread(() -> {
        String message = Doubleton.GetInstance().toString();
        System.out.println(message);
    }).
    start();
}
 
// CONSOLE LOG
// 1번 인스턴스
// 2번 인스턴스
// 1번 인스턴스
// 2번 인스턴스
// 1번 인스턴스
// .........
cs


하지만 아쉽게도 enum 이용한 Doubleton 은 Instance 의 갯수를 동적을 조절할 수 없어보이네요. 

우리는 Instance 의 개수를 동적으로 조절할 수 있는 Multiton 을 만들어보는 것이 목적입니다.


아래와 같이 동적으로 미리 Instance 개수를 입력받도록 세팅을 먼저 했으면 좋겠습니다.

물론 Thread-safe 도 보장하면 좋겠죠? 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Multiton.SetInstanceCount(5);
 
for (int i = 0; i < 100000++i) {
    new Thread(() -> {
        String message = Multiton.GetInstance().toString();
        
        System.out.println(message);
    }).start();
}
 
// CONSOLE LOG
// 1번 인스턴스
// 2번 인스턴스
// 3번 인스턴스
// 4번 인스턴스
// .....
cs


그럼 우리 스터디 멤버들 파이팅!!!! :-)

반응형
Posted by N'