πŸ“œ μžλ°” Java

Singleton(싱글톀 νŒ¨ν„΄)

Meteora_ 2021. 2. 4. 12:55
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