728x90

 

이벀트 큐 νŒ¨ν„΄

 

λ©”μ‹œμ§€λ‚˜ 이벀트λ₯Ό λ³΄λ‚΄λŠ” μ‹œμ κ³Ό μ²˜λ¦¬ν•˜λŠ” μ‹œμ μ„ λ””μ»€ν”Œλ§ν•¨

λ³΄ν†΅μ˜ μ΄λ²€νŠΈλŠ” λ™κΈ°μ μœΌλ‘œ μ—°μ‚°

동기적(Synchronouse) 비동기적(Asynchronous)
μ–΄λ–€ μž‘μ—…μ„ μš”μ²­ν–ˆμ„ λ•Œ κ·Έ μž‘μ—…μ΄ μ’…λ£Œλ λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦° ν›„ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방식
μ–΄λ–€ μž‘μ—…μ„ μš”μ²­ν–ˆμ„ λ•Œ κ·Έ μž‘μ—…μ΄ μ’…λ£Œλ λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  λ‹€λ₯Έ μž‘μ—…μ„ ν•˜κ³  μžˆλ‹€κ°€, μš”μ²­ν–ˆλ˜ μž‘μ—…μ΄ μ’…λ£Œλ˜λ©΄ 그에 λŒ€ν•œ μΆ”κ°€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방식
μ„œλΈŒλ£¨ν‹΄ 간에 λͺ…ν™•ν•œ μ‹€ν–‰ μˆœμ„œ 쑴재 μ„œλΈŒλ£¨ν‹΄ 간에 λͺ…ν™•ν•œ μ‹€ν–‰ μˆœμ„œ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ

 

이벀트λ₯Ό 보내고, μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ μŠ€λ ˆλ“œκ°€ λ©ˆμΆ°λ²„λ¦¬λŠ” 상황이 λ°œμƒ

이λ₯Ό ν•΄κ²°ν•˜κ³ μž λ‚˜μ˜¨ 것이 이벀트 큐 νŒ¨ν„΄μ΄λ‹€

 

이벀트 λ°œμƒ μ‹œ, λͺ…령을 λ‹΄μ•„ λ‘˜ 곡간이 ν•„μš”ν•œλ° Queue에 이벀트λ₯Ό λ‹΄μ•„λ‘”λ‹€

 

νŠœν† λ¦¬μ–Ό μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 있음

 

그리고 μ΄λ²€νŠΈκ°€ 순차적으둜 진행이 되길 원할 λ•Œ μ‚¬μš©ν•  수 있음

예λ₯Ό λ“€μ–΄ 업적을 λ‹¬μ„±ν–ˆμ„ λ•Œ,

업적 달성에 λŒ€ν•œ λ°˜μ‘λ“€μ΄ λ‚˜νƒ€λ‚˜μ•Όν•¨

λ§Œμ•½ 업적 달성이 Popupκ³Ό Soundλ₯Ό 좜λ ₯ν•˜λŠ”λ°,

μ—¬λŸ¬κ°€μ§€ 업적을 ν•œλ²ˆμ— λ‹¬μ„±ν–ˆμ„ 경우 ν•΄λ‹Ή 업적 달성에 λŒ€ν•œ ν”Όλ“œλ°±μ„ λ™μ‹œμ μœΌλ‘œ 좜λ ₯ν•˜λ©΄ μ•ˆλ˜λŠ” 경우 FIFO λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 이벀트 큐 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€

큐에 λ„£λŠ” μ΄μœ λŠ” κ²°κ³Όλ₯Ό 기닀리지 μ•ŠκΈ° μœ„ν•΄μ„œμ΄λ‹€

이벀트λ₯Ό 보내고, μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ μŠ€λ ˆλ“œκ°€ λ©ˆμΆ°λ²„λ¦¬λŠ” 상황을 λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€

이벀트 νλŠ” κ΄€μ°°μ°¨ νŒ¨ν„΄μ˜ λΉ„λ™κΈ°ν˜•

 

κ΄€μ°°μž, λͺ…λ Ή νŒ¨ν„΄ 이벀트 큐 νŒ¨ν„΄
λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” κ³³κ³Ό λ°›λŠ” 곳으둜 λΆ„λ¦¬ν•˜κ³  싢을 λ•Œ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” μ‹œμ κ³Ό λ°›λŠ” μ‹œμ μ„ λΆ„λ¦¬ν•˜κ³  싢을 λ•Œ μ‚¬μš©

 

 

μ£Όμ˜μ‚¬ν•­

  1. λͺ¨λ“  이벀트, λ©”μ‹œμ§€ μ‹œμŠ€ν…œμ€ ν”Όλ“œλ°± 루프가 생기면 μ•ˆλ¨
  2. 유기적으둜 계속 μ—°κ²°λ˜λŠ” μ΄λ²€νŠΈλ“€μ„ λ„£μœΌλ©΄ 이벀트 큐 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” μ˜λ―Έκ°€ 없어짐
  3. 이벀트λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œ λ‚΄μ—μ„œλŠ” 이벀트λ₯Ό 보내지 μ•Šμ•„μ•Όν•¨

 

 

 

λ°˜μ‘ν˜•

'곡뢀 > Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

싱글톀(Singleton) νŒ¨ν„΄μ΄λž€?  (0) 2021.12.15
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

 

λ°˜μ‘ν˜•

'곡뢀 > Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

이벀트 큐 νŒ¨ν„΄ (Event Queue Pattern)  (0) 2024.12.29

+ Recent posts