μƒˆμ†Œμ‹

곡뢀/Design Pattern

싱글톀(Singleton) νŒ¨ν„΄μ΄λž€?

  • -
728x90

보톡 초보 κ²Œμž„ κ°œλ°œμžλ“€μ΄ μœ λ‹ˆν‹°μ—μ„œ C#을 μ‚¬μš©ν•˜λ‹€κ°€ ν•œλ²ˆ 섀정해놓은 섀정듀을 λŒμ–΄λ‹€ μ“°λ €κ³  μ ‘ν•˜κ²Œ λ˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λΌκ³  λ³Ό 수 μžˆλ‹€.(본인 κ²½ν—˜λ‹΄..)

졜근 λ©΄μ ‘μ—μ„œ 싱글톀과 μ „μ—­λ³€μˆ˜μ˜ 차이점에 λŒ€ν•΄ μ œλŒ€λ‘œ λŒ€λ‹΅ν•˜μ§€ λͺ»ν•˜μ˜€κΈ°λ•Œλ¬Έμ— λΈ”λ‘œκ·Έλ‘œ ν•œλ²ˆ μ œλŒ€λ‘œ 정리해보렀고 ν•œλ‹€.

 

μ‹±κΈ€ν†€μ΄λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ  λ•Œ μ–΄λ–€ ν΄λž˜μŠ€κ°€ 졜초둜 ν•œλ²ˆλ§Œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  κ·Έ λ©”λͺ¨λ¦¬μ— μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.

싱글톀과 μ „μ—­λ³€μˆ˜λŠ” 졜초둜 ν•œλ²ˆλ§Œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  κ·Έ μžμ›μ„ λŒμ–΄λ‹€ μ“΄λ‹€λŠ” μ μ—μ„œ λΉ„μŠ·ν•œλ° λ‘˜μ€ 차이점이 μžˆλ‹€.

 

싱글톀 νŒ¨ν„΄κ³Ό μ „μ—­λ³€μˆ˜μ˜ 차이점

 

1. μƒμ„±μ‹œμ 

μ „μ—­λ³€μˆ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 싀행될 λ•Œ 생성

싱글톀 νŒ¨ν„΄μ€ ν•΄λ‹Ή ν•¨μˆ˜κ°€ initializeλ˜λ©΄μ„œ 생성

 

2. μžμ›ν• λ‹Ή

μ „μ—­ λ³€μˆ˜λŠ” μžμ›μ˜ 양이 μ—„μ²­λ‚˜κ²Œ 크닀고 가정함(νŠΉμ • μ‹œμ μ—μ„œλ§Œ μ‚¬μš©λœλ‹€λ©΄ μ—„μ²­λ‚œ λ‚­λΉ„)

싱클톀 νŒ¨ν„΄μ€ μ‚¬μš©ν•  λ•Œ μžμ›μ„ ν• λ‹Ήν•˜κ³  μžμ‹ μ΄ 원할 λ•Œ μžμ›μ„ ν•΄μ œ κ°€λŠ₯

 

싱글톀 νŒ¨ν„΄μ˜ 단점

- 상속이 λΆˆκ°€λŠ₯(private μƒμ„±μžλ₯Ό 가지기 λ•Œλ¬Έ)

- μƒνƒœλ₯Ό 가진 객체λ₯Ό μ‹±κΈ€ν†€μœΌλ‘œ λ§Œλ“€λ©΄ μ•ˆλ¨(μƒνƒœκ°€ κ³΅μœ λœλ‹€λŠ” 것은 맀우 μœ„ν—˜ν•¨, μœ μΌν•΄μ•Όν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‹±κΈ€ν†€μœΌλ‘œ λ§Œλ“€μ–΄μ•Όν•¨)

- 싱글톀을 μ‚¬μš©ν•˜λŠ” κ³³κ³Ό 싱글톀 클래슀 사이에 μ˜μ‘΄μ„±μ΄ μƒκΈ°κ²Œ λ˜μ„œ 결합도가 λ†’μ•„μ Έμ„œ μˆ˜μ • 및 λ‹¨μœ„ν…ŒμŠ€νŠΈμ˜ 어렀움이 μƒκΈ°κ²Œ 됨

- μ „μ—­ μƒνƒœλ₯Ό κ°–λŠ” 것은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ§€μ–‘λ˜μ–΄μ•Ό ν•  λͺ¨λΈ(μœ„μ™€ 같이 결합도가 높아지기 λ–„λ¬Έ)

- λ©€ν‹°μ“°λ ˆλ“œ ν™˜κ²½μ—μ„œ μΈμŠ€ν„΄μŠ€κ°€ λ‘κ°œ μƒμ„±λ˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 있음

 

 

Unity C#μ—μ„œ μ“°λŠ” νŒ¨ν„΄μ€ λ‹€μŒκ³Ό κ°™λ‹€.

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
public class manager : MonoBehaviour
{
    //instanceλ₯Ό static으둜 μ„ μ–Έ
    private static manager instance = null;
 
    //μœ λ‹ˆν‹°μ—μ„œλŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹œμž‘λ λ•Œ initialization λΆ€λΆ„μ—μ„œ μ œμΌ λ¨Όμ € μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜
    void Awake(){
        //λ§Œμ•½ instanceκ°€ λΉ„μ–΄μžˆμ„ λ•Œ
        if(instance==null){
            instance=this;
        }
    }
 
    //λ‹€λ₯Έ ν΄λž˜μŠ€μ—μ„œ ν˜ΈμΆœν• μˆ˜ μžˆλ„둝 static ν”„λ‘œνΌν‹° μ„ μ–Έ
    //ν”„λ‘œνΌν‹° : ν•„λ“œ(데이터 λ©€λ²„)와 λ©”μ†Œλ“œ κ°„ κΈ°λŠ₯의 μ€‘간인 ν΄λž˜μŠ€ λ©€λ²„μ˜ νŠΉμˆ˜ν•œ μœ ν˜•
    public static manager Instance
    {
        get
        {
            if (null == instance)
            {
                return null;
            }
            return instance;
        }
    }
}
cs

 

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.