๊ฐœ๊ด„


Design Pattern ์ด๋ž€? : ๋ฌธ๋งฅ(Context - ํŠน์ • ์ƒํ™ฉ)ย ๋‚ด์—์„œ, ๋ฌธ์ œ(Problem) ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์‹œ๋œ ๋””์ž์ธ์ ์ธ ํ•ด๊ฒฐ์ฑ… (Solution) ์ž„.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•จ์ˆ˜ ๋“ฑ์˜ ๋ถ€๋ถ„์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, Design Pattern ์€ ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ๊ตฌ์กฐ ๋ฐ ์„ค๊ณ„์— ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Œ. ๊ฐœ์ธ์ ์œผ๋กœ Modulization ๋“ฑ์„ ์ œํ•˜๋ฉด, ๋””์ž์ธ ํŒจํ„ด๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐœ๊ด„์ ์ธ ์ฝ”๋“œ ๊ตฌ์„ฑ์— ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์ ์ ์ด๋ผ ์ƒ๊ฐํ•จ.


Design Pattern ์˜ ์ •์˜์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ํ’€์–ด ๋ด„.

Context : Situation (๋ฌธ์ œ๋ฅผ ๋‹น๋ฉดํ•œ ์ƒํ™ฉ, ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋กœ, ์ฃผ๋ณ€ ์ฝ”๋“œ๋“ค๊ณผ ๊ธฐํš)

Problem : ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ, ์„ฑ์ทจํ•  ์š”์†Œ.

Solution : General "Design" => Design Pattern : ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•.


์–ด๋–ป๊ฒŒ ์จ๋จน์„์ง€๊ฐ€ ์ค‘์š”ํ•œ๋ฐ. ๊ฐ Pattern ์„ ํ•™์Šตํ•  ๋•Œย Context, Problem, ์ œ์‹œํ•˜๊ณ  ์žˆ๋Š” Solution ์„ ํŒŒ์•…ํ•œ๋‹ค ํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ฅด๋ฉด ์šฉ์ดํ•จ.

1. ํ˜„์žฌ ๋ฌธ์ œ ์ƒํ™ฉ ๋ฐ ๋ฌธ์ œ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๋ฌธ๋งฅ์„ ์ธ์ง€.

2. Actual Pattern : ํ•ด๋‹น ๋ฌธ์ œ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์–ด๋–ค ํŒจํ„ด์„ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ • ๋ฐ ๊ตฌํ˜„.


๋˜ํ•œ, Pattern ์ž์ฒด๋Š” ์ถ”์ƒ์ ์ธ ๊ตฌ์กฐ, ๊ฐœ๋…, ๊ฒฝํ—˜์ด๊ธฐ ๋•Œ๋ฌธ์—,ย ์ด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๊ต‰์žฅํžˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ.ย 

Observer Pattern ์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด๋ฉด,ย C ๋‚˜ Java ์—์„œ๋Š” ์ง์ ‘ Observer ์™€ Subject Interface ๋ฅผ ๊ตฌํ˜„ํ•œ ํ›„, ์ด๋ฅผ ์ƒ์† ๋ฐ›๋Š” Concrete Class ๋ฅผ ๋งŒ๋“ค์–ด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด. Unity ์—์„œ๋Š” UnityEvent ํ˜น์€ Delegate ๋กœ์„œ ์ด๋ฏธ Observer Pattern ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž„. (์ฆ‰, Unity ์—์„œ๋Š” ๊ทธ๋ƒฅ UnityEvent ์“ฐ๋ฉด ์ถฉ๋ถ„ํ•จ.)


์ž์„ธํ•œ Pattern


์ž์„ธํ•œ Pattern ์€ ๋‹ค ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋งํฌ๋กœ ๋Œ€์ฒดํ•จ.

- ์—ฌ๋Ÿฌ Design Pattern ์ •์˜ ๋ฐ ๊ฐœ๋…ย :ย Adapter Pattern - Pavdup's Second Brain - Obsidian Publishย : Pattern ์˜ ๊ฐœ๋… ์ž์ฒด์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์œผ๋ฉด ํ•ด๋‹น ๋งํฌ ๋‚ด ์™ผ์ชฝ ๋ถ€๋ถ„ ๋ณด๋ฉด ์—ฌ๋Ÿฌ Pattern ์ด ๋‚˜์™€ ์žˆ์–ด ์‚ดํŽด๋ณด๋ฉด ์šฉ์ดํ•  ๊ฒƒ.

- Unity ํŠนํ™” Design Pattenr :ย ๊ฒŒ์ž„ ๋””์ž์ธ ํŒจํ„ด with Unity 2021 ์ฑ… ์ถ”์ฒœ. ๊ทธ๋Ÿฐ๋ฐ ๋ฒˆ์—ญ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์ข‹์ง€ ์•Š์•„์„œ, ์˜คํžˆ๋ ค ์•„๋ž˜ ๋งํฌ๋งŒ ์‚ดํŽด๋„ ๋„์›€ ๋  ์ˆ˜ ์žˆ์Œ.

-ย NULL : ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ (naver.com)ย : ํ•ด๋‹น ์ฑ… ๋‚ด์šฉ์— ๋Œ€ํ•ด ํ•œ๊ตญ์–ด๋กœ ์ž˜ ์ •๋ฆฌํ•ด๋‘ . / ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ๋ณธ ์ฑ…์ด ์žˆ์–ด์„œ ์ด ๋‚ด์šฉ์„ ์š”์•ฝํ•ด๋‘” ๊ฒƒ์œผ๋กœ ๋ณด์ž„.

-ย PacktPublishing/Game-Development-Patterns-with-Unity-2021-Second-Edition: Game Development Patterns with Unity 2021 - Second Edition, published by Packt (github.com)ย : ์ฑ… ์•ˆ์˜ ๋‚ด์šฉ ๋‹ด๊ธด Github Library

-ย Game Development Patterns with Unity 2021 | 4. Implementing a Game Manager with the Singleton (youtube.com)ย : ์ฑ… ์•ˆ ๋‚ด์šฉ ๋‹ค๋ฃจ๋Š” ์˜์ƒ


๊ฐœ์ธ์ ์œผ๋กœ Observer, Strategy, Flyweight, Object Pool, Template Method, Command, Singleton, State Pattern ์„ ์ž์ฃผ ๋ณธ ๊ฒƒ ๊ฐ™์•„์„œ, ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ค‘์ ์ ์œผ๋กœ ์ฐธ๊ณ ํ•ด๋„ ์ข‹์ง€ ์•Š์„๊นŒ ์‹ถ์Œ.


๊ฐœ์„ ํ•  ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ํŽธํžˆ ์–˜๊ธฐํ•ด์ฃผ์„ธ์šฉ!