๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“œ ์ž๋ฐ” Java

Singleton(์‹ฑ๊ธ€ํ†ค ํŒจํ„ด)

by Meteora_ 2021. 2. 4.
728x90

I.์‹ฑ๊ธ€ํ†ค

 

์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์—์„œ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด(Singleton pattern)์„ ๋”ฐ๋ฅด๋Š” ํด๋ž˜์Šค๋Š”, ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ•˜๋‚˜์ด๊ณ  ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์— ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž๋Š” ์ตœ์ดˆ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋””์ž์ธ ์œ ํ˜•์„ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฃผ๋กœ ๊ณตํ†ต๋œ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” DBCP(DataBase Connection Pool)์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์‰ฝ๊ฒŒ๋งํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚จ์šฉ์‹œํ‚ค์ง€์•Š๋Š”๋‹ค. ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์€ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ์„ ์ƒ์„ฑํ›„ ํ˜ธ์ถœ๋œ ๊ณณ์—์„œ๋Š” ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์ „๋ฐ˜์ ์œผ๋กœ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

์‹ฑ๊ธ€ํ†ค ๋„์‹ํ™”

 

2. ์‹ฑ๊ธ€ํ†ค์„ ํ™œ์šฉํ•œ ์˜ˆ์ œ

 

 

๊นƒํ—ˆ๋ธŒ ๋งํฌ

 

<Main Class>
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
package main;
 
import cls.HeClass;
import cls.MyClass;
import cls.YouClass;
 
public class MainClass {
    public static void main(String[] args) {
        /*
            Singleton : instance๋ฅผ 1๊ฐœ๋งŒ ์ƒ์„ฑํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด
        */
        MyClass mycls = new MyClass();
        
        YouClass youcls = new YouClass();
    
        
        // ์ˆซ์ž ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ
        
        youcls.print();
        
        
        //๋ฌธ์ž์—ด ์ ์šฉ 
        
        HeClass hecls = new HeClass("ํ™๊ธธ๋™");
        
        //๋ฌธ์ž์—ด ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ 
        
        mycls.method();
        
    }
}
 
 
 
 
 
cs

 

2. <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
26
27
28
29
30
31
32
33
34
package singleton;
 
public class SingletonClass {
    
    
    //์‹ฑ๊ธ€ํ†ค ์ƒ์„ฑ
    
    private static SingletonClass sc = null;
    
    
    /////////////////////
    
    public int sNumber;
    
    public String name;    
    
    
    //////////////////////
    
    private SingletonClass() {
    }
    
    public static SingletonClass getInstance() {
        if(sc == null) {    // ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋จ
            sc = new SingletonClass();
        }
        return sc;
    }
}
 
 
 
 
 
cs

 

3.<HeClass>

 

 

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
package cls;
 
import singleton.SingletonClass;
 
public class HeClass {
 
    
    //๋ฌธ์ž์—ด์„ MyClass๋กœ
    
    private String name;
    
    
    
    public HeClass(String name) {
        
        this.name = name;
        
        SingletonClass sc = SingletonClass.getInstance();
        
        sc.name = this.name;
        
    }
    
    
}
 
cs

 

4.<YouClass>

 

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
package cls;
 
import singleton.SingletonClass;
 
public class YouClass {
 
    private int num;
    
    
    //๋ฌธ์ž ๋ฐ”๊ฟˆ ์ถœ๋ ฅ ๋ฉ”์†Œ๋“œ
    
    public void print() {
        
        SingletonClass sc = SingletonClass.getInstance();
        
        num = sc.sNumber;
        
        System.out.println(num);
    }
}
 
 
 
 
 
cs

5.<MyClass>

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
package cls;
 
import singleton.SingletonClass;
 
public class MyClass {
    
    
 
    private int number;
    
    private String name;
    
    //////////////////////////// ๋ฉค๋ฒ„ ๋ณ€์ˆ˜
 
    
    //์ˆซ์ž
        
    public MyClass() {
        number = 123;
        SingletonClass s = SingletonClass.getInstance();
        s.sNumber = number;
    }
    
    
    
    
    //๋ฌธ์ž์—ด
    
    public void method() {
        SingletonClass sc = SingletonClass.getInstance();
        this.name = sc.name;
        System.out.println(name);
    }
    
    
    
}
 
 
cs

๋Œ“๊ธ€