๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจํ„ด
์ฟ ์žฌ์•„์ด
๊น€์žฌ๊ฒฝ
์ฃผ์ œ ์„ ์ • ์ด์œ 
โ€ข ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์ข‹๊ฒŒ ํ• ๊นŒ?
โ€ข ๋งŒ์•ฝ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„๋ฅผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
โ€ข ์ฝ”๋”ฉ ํ•  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ํ•˜๋˜ ์ƒ๊ฐ์ด์ง€๋งŒ ๊ณต๋ถ€ํ•œ ์ ์€ ์—†์Œ
โ€ข ๊ทธ๋ž˜์„œ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค
โ€ข ์„œ์ ์—์„œ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ์ฑ…
โ€ข ์ธํ„ฐ๋„ท์—์„œ ์š”์•ฝ ๊ธ€์„ ๋ดค์—ˆ๋Š”๋ฐ
๋‚ด์šฉ์ด ๊ดœ์ฐฎ์•˜๋˜ ๊ฑธ๋กœ ๊ธฐ์–ต
โ€ข ๊ด€์‹ฌ์žˆ๋Š” ์ฃผ์ œ์ด๊ธฐ๋„ ํ•ด์„œ ๊ตฌ์ž…
โ€ข ์ด๋Ÿฐ ์‚ฌ๋žŒ์—๊ฒŒ ์ถ”์ฒœ
1. ๋””์ž์ธ ํŒจํ„ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๋ถ„
2. ์•„์ง ๋””์ž์ธ ํŒจํ„ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ถ„
โ€ข ์ฑ… ๋‚ด์šฉ์ด ๋งŽ์ง€ ์•Š๊ณ (400p)
๋ฌธ์ฒด๊ฐ€ ๋”ฑ๋”ฑํ•˜์ง€ ์•Š์•„์„œ ์ฝ๊ธฐ ํŽธํ•จ
โ€ข ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ์„œ๋กœ ์ ์ ˆํ•  ๋“ฏ
๋‹จ, ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด ์ฑ…๊ณผ ๊ฐ™์ด ๋ณผ ๊ฒƒ
๋ชฉ์ฐจ
1. ์‹ฑ๊ธ€ํ„ด (Singleton)
2. ์ƒํƒœ (State)
3. ์ปดํฌ๋„ŒํŠธ (Component)
์‹ฑ๊ธ€ํ„ด
Singletom
์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋А๋‚€์ 
โ€ข ์‹ฑ๊ธ€ํ„ด์„ ๋„ˆ๋ฌด ๋‚จ๋ฐœํ•˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€?
โ€ข ์‹ฑ๊ธ€ํ„ด์˜ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ธ๊ฐ€?
โ€ข ์‹ฑ๊ธ€ํ„ด์˜ ๋Œ€์•ˆ์€ ์–ด๋–ค๊ฒŒ ์žˆ๋Š”๊ฐ€?
์‹ฑ๊ธ€ํ„ด์ด๋ž€?
1. ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋งŒ์„ ๊ฐ–๋„๋ก ๋ณด์žฅ
โ€ข ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์ข…์ข… ์žˆ๋‹ค
(์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค)
โ€ข ex) ํŒŒ์ผ ์‹œ์Šคํ…œ API
์‹ฑ๊ธ€ํ„ด์ด๋ž€?
2. ์ „์—ญ์ ์ธ ์ ‘๊ทผ์ ์„ ์ œ๊ณต
โ€ข ๋ณดํ†ต ์ƒ์„ฑ์ž๋ฅผ private๋กœ ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ
์ธ์Šคํ„ด์Šค๋ฅผ ์ „์—ญ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
์‹ฑ๊ธ€ํ„ด์ด๋ž€?
โ€ข ์ƒ์„ฑ์ž๊ฐ€ private๋ผ ๋ฐ–์—์„œ ์ƒ์„ฑ X
(ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์žฅ)
โ€ข instance static ํ•จ์ˆ˜๋กœ ์–ด๋””์„œ๋‚˜
์ ‘๊ทผ ๊ฐ€๋Šฅ
โ€ข ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Œ
(Lazy Initialization)
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
1. ํ•„์š”ํ•  ๋•Œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
โ€ข ํ•ด๋‹น ์‹ฑ๊ธ€ํ„ด์„ ํ•œ ๋ฒˆ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ๋Ÿ‰์„
์ค„์ผ ์ˆ˜ ์žˆ๋‹ค
2. ๋Ÿฐํƒ€์ž„์— ์ดˆ๊ธฐํ™”๋œ๋‹ค
โ€ข ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ ํ›„์— ์•Œ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
3. ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค
โ€ข ๋งŒ์•ฝ ํŒŒ์ผ ์‹œ์Šคํ…œ ์‹ฑ๊ธ€ํ„ด์ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๋ฉด
์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“  ๋’ค ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
3-1. ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
3-2. ํ”Œ๋žซํผ๋ณ„๋กœ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
3-3. FileSystem ํด๋ž˜์Šค๋ฅผ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ๋งŒ๋“ ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์ 
3-4. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ํ•ต์‹ฌ
์™€! ์งฑ ์ข‹๋„ค! ์ž์ฃผ ์“ฐ๋ฉด ์ข‹์„ ๋“ฏ ใ…Žใ…Ž ์™„๋ฒฝํ•˜๋„ค
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์ 
โ€ข ์ „์—ญ ๋ณ€์ˆ˜์ด๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1
1. ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค
โ€ข SomeClass::getSomeGlobalData() ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด
์ „์ฒด ์ฝ”๋“œ์—์„œ SomeGlobalData์— ์ ‘๊ทผํ•˜๋Š” ๊ณณ์„ ๋‹ค ์‚ดํŽด๋ด์•ผ
์ƒํ™ฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค
โ€ข ๋งŒ์•ฝ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค๋ฉด?
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1
2. ์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ปคํ”Œ๋ง์„ ์กฐ์žฅํ•œ๋‹ค
โ€ข ์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด #include ํ•œ ์ค„๋งŒ ์ถ”๊ฐ€ํ•ด๋„
์‹ ์ค‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋†“์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”๋Ÿฝํž ์ˆ˜ ์žˆ๋‹ค
โ€ข ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ†ต์ œํ•จ์œผ๋กœ์จ ์ปคํ”Œ๋ง์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1
3. ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ฐ™์€ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์•Œ๋งž์ง€ ์•Š๋‹ค
โ€ข ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์ƒ๊ธด ๊ฒƒ์ด๋‹ค
โ€ข ๊ต์ฐฉ ์ƒํƒœ(Dead Lock), ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition) ๋“ฑ
์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‰ฝ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  2
โ€ข ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ผ ๋•Œ๋„ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค ๋“ ๋‹ค
(์ „์—ญ ์ ‘๊ทผ + ์ธ์Šคํ„ด์Šค ์ œํ•œ)
โ€ข Log ํด๋ž˜์Šค๊ฐ€ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ „์—ญ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํŽธํ•˜๊ฒŒ
๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŒ์•ฝ ๋กœ๊ทธ๋ฅผ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋‚˜๋ˆ ์“ธ ์ƒํ™ฉ์ด ์˜จ๋‹ค๋ฉด?
์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ฐœ๋งŒ ๋งŒ๋“ค์–ด์•ผ๋Š” ์ œ์•ฝ์ด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  3
โ€ข ๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”๋Š” ์ œ์–ดํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค
โ€ข ์ฒ˜์Œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ๋•Œ ํ”„๋ ˆ์ž„์ด ๋–จ์–ด์ง€๊ณ  ๋ ‰์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด?
์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  3
โ€ข ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค
โ€ข ๋‹จ์ 
1. ๋‹คํ˜•์„ฑ ์‚ฌ์šฉ ๋ชป ํ•จ
2. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๋ถˆ๊ฐ€๋Šฅ
๋Œ€์•ˆ
โ€ข ํด๋ž˜์Šค๊ฐ€ ๊ผญ ํ•„์š”ํ•œ๊ฐ€?
๋Œ€์•ˆ
๋Œ€์•ˆ
โ€ข ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๊ฐ–๋„๋ก
๋ณด์žฅํ•˜๊ธฐ
โ€ข ์ „์—ญ ์ ‘๊ทผ X
๋Œ€์•ˆ
โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ (์ „์—ญ ์ ‘๊ทผ ๋Œ€์ฒด)
1. ๋„˜๊ฒจ์ฃผ๊ธฐ
โ€ข ํ•จ์ˆ˜์— ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๊ฒŒ ๊ฐ€์žฅ ์‰ฌ์šฐ๋ฉด์„œ๋„
์ตœ์„ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
โ€ข ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒŒ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์ด๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„
์ฐพ์•„๋ณด์ž
๋Œ€์•ˆ
โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ
2. ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ
๋Œ€์•ˆ
โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ
3. ์ด๋ฏธ ์ „์—ญ์ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ
๋Œ€์•ˆ
โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ
3. ์ด๋ฏธ ์ „์—ญ์ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ
โ€ข ๋‚˜์ค‘์— Game ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”๋„
Log, FileSystem, AudioPlayer๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค
โ€ข Game ํด๋ž˜์Šค์— ์ปคํ”Œ๋ง๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
์‚ฌ์šด๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์–ด๋„ Game ํด๋ž˜์Šค๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค
๊ฒฐ๋ก 
โ€ข ์‹ฑํดํ„ด์„ ์“ฐ์ง€ ๋ง์ž๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค
โ€ข ์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉด ๋‹จ์ ๊ณผ ๋Œ€์•ˆ์„ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด์ž
์ƒํƒœ
State
์ƒํƒœ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋А๋‚€์ 
โ€ข ๊ฐ์ฒด ์ƒํƒœ๋ณ„๋กœ ํด๋ž˜์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค
โ€ข State๊ฐ€ ๋งค์šฐ ๋งŽ์•„์ง„๋‹ค๋ฉด?
โ€ข ์—ฌ๋Ÿฌ ๊ฐœ์˜ State๊ฐ€ ๊ณต์กดํ•ด์•ผ ํ•œ๋‹ค๋ฉด?
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข ๊ฐ„๋‹จํ•œ ํšก์Šคํฌ๋กค ํ”Œ๋žซํฌ๋จธ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜์ž.
๋จผ์ € B๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ ํ”„ํ•ด์•ผ ํ•œ๋‹ค
โ€ข ๋ฒ„๊ทธ๋ฅผ ๋ˆˆ์น˜ ์ฑ˜๋Š”๊ฐ€?
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข ๊ณต์ค‘์— ์žˆ๋Š” ๋™์•ˆ B๋ฅผ ์—ฐํƒ€ํ•˜๋ฉด
๊ณ„์† ๋–  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค
โ€ข isJumping_ bool ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด
๊ฐ„๋‹จํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข ๋ฌดํ•œ ์ ํ”„ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค
โ€ข ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋•…์— ์žˆ์„ ๋•Œ
์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์—Ž๋“œ๋ฆฌ๊ณ 
๋ฒ„ํŠผ์„ ๋–ผ๋ฉด ์ผ์–ด์„œ๋Š” ๊ธฐ๋Šฅ์„
์ถ”๊ฐ€ํ•ด๋ณด์ž
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข ๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„ ๋ƒˆ๋Š”๊ฐ€?
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
1. ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๋’ค
2. B ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์—Ž๋“œ๋ฆฐ ์ƒํƒœ์—์„œ
์ ํ”„ํ•˜๊ณ  ๋‚˜์„œ
3. ๊ณต์ค‘์—์„œ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋–ผ๋ฉด
4. ์ ํ”„ ์ค‘์ธ๋ฐ๋„ ๋•…์— ์„œ ์žˆ๋Š”
๋ชจ์Šต์œผ๋กœ ๋ณด์ธ๋‹ค
โ€ข ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข ๋ญ”๊ฐ€ ๋ฐฉํ–ฅ์„ ์ž˜๋ชป ์žก์€ ๊ฒŒ ๋ถ„๋ช…ํ•˜๋‹ค
โ€ข ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ ์—†๋Š”๋ฐ๋„ ์กฐ๊ธˆ๋งŒ ๊ฑด๋“œ๋ฆฌ๋ฉด
๋ง๊ฐ€์ง„๋‹ค
โ€ข ๋” ๋งŽ์€ ์ƒํƒœ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด?
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข Flowchart๋ฅผ ๊ทธ๋ ค๋ณด์ž
โ€ข ์œ ํ•œ ์ƒํƒœ ๊ธฐ๊ณ„(FSM)๊ฐ€
๋งŒ๋“ค์–ด์กŒ๋‹ค
์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ
โ€ข FSM ์š”์ 
1. ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” โ€˜์ƒํƒœโ€™๊ฐ€
ํ•œ์ •๋œ๋‹ค
2. ํ•œ ๋ฒˆ์— โ€˜ํ•œ ๊ฐ€์ง€โ€™ ์ƒํƒœ๋งŒ
๋  ์ˆ˜ ์žˆ๋‹ค
3. โ€˜์ž…๋ ฅโ€™์ด๋‚˜ โ€˜์ด๋ฒคํŠธโ€™๊ฐ€
๊ธฐ๊ณ„์— ์ „๋‹ฌ๋œ๋‹ค
4. ๊ฐ ์ƒํƒœ์—์„œ๋Š” ์ž…๋ ฅ์— ๋”ฐ๋ผ
๋‹ค๋ฅธ ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๋Š” โ€˜์ „์ดโ€™๊ฐ€ ์žˆ๋‹ค
์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ
โ€ข bool ๊ฐ’ ์กฐํ•ฉ์ด ์œ ํšจํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค
ex) isJumping๊ณผ isDucking์€ ๋™์‹œ์— ์ฐธ์ด ๋  ์ˆ˜ ์—†๋‹ค
โ€ข ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜ ์ค‘์—์„œ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ผ ๋•Œ๊ฐ€ ๋งŽ๋‹ค๋ฉด ์—ด๊ฑฐํ˜•(Enum)์ด
ํ•„์š”ํ•˜๋‹ค๋Š” ์‹ ํ˜ธ๋‹ค
โ€ข ์˜ˆ์ œ์—์„œ๋Š” FSM ์ƒํƒœ๋ฅผ ์—ด๊ฑฐํ˜•์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค
์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ
์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ
โ€ข ๋ถ„๊ธฐ๋ฌธ์„ ๋‹ค ์—†์• ์ง„ ๋ชปํ–ˆ์ง€๋งŒ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ
์ค„์˜€๋‹ค(state_ ๋ณ€์ˆ˜)
โ€ข ์—ด๊ฑฐํ˜• ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋™์„ ๊ตฌํ˜„ํ•˜๋˜, ์—Ž๋“œ๋ ค ์žˆ์œผ๋ฉด
๊ธฐ๊ฐ€ ๋ชจ์—ฌ์„œ ๋†“๋Š” ์ˆœ๊ฐ„ ํŠน์ˆ˜ ๊ณต๊ฒฉ์„ ์  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž
์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ
์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ
1. ๊ธฐ ๋ชจ์œผ๊ธฐ ๊ณต๊ฒฉ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ 2๊ฐœ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค
2. ์—Ž๋“œ๋ฆฌ๊ธฐ ์ƒํƒœ์—์„œ๋งŒ ์˜๋ฏธ ์žˆ๋Š” chargeTime ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋‹ค
โ€ข ์ด๊ฒƒ๋ณด๋‹ค๋Š” ๋ชจ๋“  ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘˜ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ๋‚ซ๋‹ค
์ƒํƒœ ํŒจํ„ด
โ€ข ์ƒํƒœ์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ ๋‹ค
์ƒํƒœ ํŒจํ„ด
โ€ข ์ƒํƒœ๋ณ„๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค
โ€ข chargeTIme_์€ ์—Ž๋“œ๋ฆฌ๊ธฐ ์ƒํƒœ์—์„œ๋งŒ ์˜๋ฏธ ์žˆ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค
์ƒํƒœ ํŒจํ„ด
โ€ข Heroine ํด๋ž˜์Šค์— ํ˜„์žฌ ์ƒํƒœ ๊ฐ์ฒด
ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค
โ€ข ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด state_์—
HeroineState๋ฅผ ์ƒ์†๋ฐ›์€
๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค
์ƒํƒœ ๊ฐ์ฒด๋Š” ์–ด๋””์— ๋‘ฌ์•ผ ํ• ๊นŒ?
โ€ข ์ •์  ๊ฐ์ฒด
โ€ข ์ƒํƒœ ๊ฐ์ฒด์— ํ•„๋“œ๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค๋ฉด
์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค
์ƒํƒœ ๊ฐ์ฒด๋Š” ์–ด๋””์— ๋‘ฌ์•ผ ํ• ๊นŒ?
โ€ข ์ „์ด ํ•  ๋•Œ๋งˆ๋‹ค ์ƒํƒœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค
์ž…์žฅ๊ณผ ํ‡ด์žฅ
โ€ข ์ƒํƒœ ํŒจํ„ด์˜ ๋ชฉํ‘œ๋Š” ๊ฐ™์€ ์ƒํƒœ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋™์ž‘๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ
ํด๋ž˜์Šค ํ•˜๋‚˜์— ์บก์Аํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค
โ€ข ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ด์ „ ์ƒํƒœ์—์„œ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค
(DuckingState์—์„œ IMAGE_STAND๋กœ ๋ณ€๊ฒฝ, 51p ์ขŒ์ธก ์‚ฌ์ง„)
โ€ข ์ด๋ณด๋‹ค๋Š” ๊ฐ™์€ ์ƒํƒœ์—์„œ ๊ทธ๋ž˜ํ”ฝ๊นŒ์ง€ ์ œ์–ดํ•˜๋Š” ๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค
์ด๋ฅผ ์œ„ํ•ด ์ž…์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ž
์ž…์žฅ๊ณผ ํ‡ด์žฅ
์ž…์žฅ๊ณผ ํ‡ด์žฅ
โ€ข Stand ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด Stand ์ƒํƒœ๊ฐ€ ์•Œ์•„์„œ ๊ทธ๋ž˜ํ”ฝ๊นŒ์ง€ ์ฑ™๊ธด๋‹ค
โ€ข ์ด์ „ ์ƒํƒœ์™€๋Š” ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๊ฐ™์€ ์ž…์žฅ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์ 
โ€ข ์ƒˆ๋กœ์šด ์ƒํƒœ๋กœ ๊ต์ฒด๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ํ‡ด์žฅ๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋ฉด ๋œ๋‹ค
๋ณ‘ํ–‰ ์ƒํƒœ ๊ธฐ๊ณ„
โ€ข ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด์„ ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž
โ€ข ์ด์„ ์žฅ์ฐฉํ•œ ํ›„์—๋„ ๋‹ฌ๋ฆฌ๊ธฐ, ์ ํ”„, ์—Ž๋“œ๋ฆฌ๊ธฐ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
๊ทธ๋Ÿฌ๋ฉด์„œ ์ด๋„ ์  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค
โ€ข FSM ๋ฐฉ์‹์€ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์„œ๊ธฐ, ๋ฌด์žฅํ•œ ์ฑ„๋กœ ์„œ๊ธฐ, ์ ํ”„, ๋ฌด์žฅํ•œ ์ฑ„๋กœ ์ ํ”„
๊ฐ™์€ ์‹์œผ๋กœ ๋ฌด์žฅ, ๋น„๋ฌด์žฅ์— ๋งž์ถฐ 2๊ฐœ์”ฉ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค
โ€ข ์ด ๋ฌธ์ œ๋Š” ์ƒํƒœ ๊ธฐ๊ณ„๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค
๋ณ‘ํ–‰ ์ƒํƒœ ๊ธฐ๊ณ„
๋ณ‘ํ–‰ ์ƒํƒœ ๊ธฐ๊ณ„
โ€ข ๋‘ ์ƒํƒœ ๊ธฐ๊ณ„๊ฐ€ ์„œ๋กœ ์ „ํ˜€ ์—ฐ๊ด€์ด ์—†๋‹ค๋ฉด ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค
โ€ข ํ˜„์‹ค์ ์œผ๋กœ๋Š” ์ ํ”„ ๋„์ค‘์—๋Š” ์ด์„ ๋ชป ์œ๋‹ค๋Š” ์‹์œผ๋กœ ๋ณต์ˆ˜์˜ ์ƒํƒœ ๊ธฐ๊ณ„๊ฐ€
์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค
โ€ข ์ด๋ฅผ ์œ„ํ•ด ์–ด๋–ค ์ƒํƒœ ์ฝ”๋“œ(์ด)์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ ๊ธฐ๊ณ„์˜ ์ƒํƒœ(์ ํ”„)๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ
๊ฒ€์‚ฌํ•˜๋Š” ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ผ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค
๊ณ„์ธตํ˜• ์ƒํƒœ ๊ธฐ๊ณ„
โ€ข ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„œ๊ธฐ, ๊ฑท๊ธฐ, ๋‹ฌ๋ฆฌ๊ธฐ, ๋ฏธ๋„๋Ÿฌ์ง€๊ธฐ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž
โ€ข ์œ„ ์ƒํƒœ์—์„œ๋Š” ๋ชจ๋‘ B ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ ํ”„ํ•˜๊ณ , ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด
์—Ž๋“œ๋ ค์•ผ ํ•œ๋‹ค
โ€ข FSM ๋ฐฉ์‹์€ ๊ฐ ์ƒํƒœ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ์ค‘๋ณตํ•ด ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ณด๋‹ค๋Š” ํ•œ ๋ฒˆ๋งŒ
๊ตฌํ˜„ํ•˜๊ณ  ๋‹ค๋ฅธ ์ƒํƒœ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค
โ€ข ์ƒ์†์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค
๊ณ„์ธตํ˜• ์ƒํƒœ ๊ธฐ๊ณ„
Push-Down Automata
โ€ข FSM์—์„œ๋Š” ํ˜„์žฌ ์ƒํƒœ๋Š” ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค
โ€ข ์‚ฌ์ง„์˜ ์Šคํ…Œ์ด์ง€ ํ™”๋ฉด์„
๋กœ๋น„์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ 
ํ€˜์ŠคํŠธ ํ™”๋ฉด์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜
์žˆ๋‹ค๋ฉด?
โ€ข ์ด์ „ ํ™”๋ฉด์œผ๋กœ ์–ด๋–ป๊ฒŒ
๋Œ์•„๊ฐˆ ๊ฒƒ์ธ๊ฐ€?
Push-Down Automata
โ€ข ์ƒํƒœ๋ฅผ ์Šคํƒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋œ๋‹ค
์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
โ€ข ๋‚ด๋ถ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ์ฒด ๋™์ž‘์ด ๋ฐ”๋€” ๋•Œ
โ€ข ์ด๋Ÿฐ ์ƒํƒœ๊ฐ€ ๋งŽ์ง€ ์•Š์€ ์„ ํƒ์ง€๋กœ ๋ถ„๋ช…ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ์„ ๋•Œ
โ€ข ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ์ด๋‚˜ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ•  ๋•Œ
๊ฒŒ์ž„ AI์—์„œ๋Š”?
โ€ข ์‚ฌ์‹ค FSM์„ ์ฒ˜์Œ ์ ‘ํ•œ ๊ฑด ๊ฒŒ์ž„ AI๋ฅผ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ
โ€ข ๊ทผ๋ฐ ์š”์ฆ˜์€ ์•ˆ ์“ด๋‹ค๊ณ  ํ•˜๋”๋ผโ€ฆ
โ€ข Behavior Tree ๋‚˜ Planning System์„ ๋” ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•œ๋‹ค
๊ฒŒ์ž„ AI์—์„œ๋Š”?
โ€ข https://www.slideshare.net/yonghakim900/2009-ndc
์ปดํฌ๋„ŒํŠธ
Component
์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์„ ํƒํ•œ ์ด์œ 
โ€ข ์ƒ์†์„ ์‚ฌ์šฉํ•ด๋ณด๋‹ˆ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด ์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ์Œ
โ€ข ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?
์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์„ ํƒํ•œ ์ด์œ 
EDCBA
โ€ข ์ด๋Ÿฐ ์ƒ์† ๊ตฌ์กฐ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ํž˜๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค
๋™๊ธฐ
โ€ข ํ”Œ๋ ˆ์ด์–ด ํด๋ž˜์Šค์—์„œ๋Š” AI, ๋ฌผ๋ฆฌ, ๋ Œ๋”๋ง, ์‚ฌ์šด๋“œ ๋“ฑ์˜ ํด๋ž˜์Šค๋“ค์ด
์‹คํƒ€๋ž˜์ฒ˜๋Ÿผ ์–ฝํ˜€ ์žˆ๋‹ค
โ€ข ์ด ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜๋ ค๋ฉด ๋ฌผ๋ฆฌ(collidingWithFloor), ๊ทธ๋ž˜ํ”ฝ(getRenderState),
์‚ฌ์šด๋“œ(playSound)๋ฅผ ์ „๋ถ€ ์•Œ์•„์•ผ ํ•œ๋‹ค (์ปคํ”Œ๋ง)
ํŒจํ„ด
โ€ข ์—ฌ๋Ÿฌ ๋ถ„์•ผ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๊ฐ€ ์žˆ๋‹ค
โ€ข ๋ถ„์•ผ๋ณ„๋กœ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ๊ฐ์˜ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค์— ๋‘”๋‹ค
โ€ข ์ด์ œ ๊ฐœ์ฒด ํด๋ž˜์Šค๋Š” ๋‹จ์ˆœํžˆ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ๋งŒ ํ•œ๋‹ค
์–ธ์ œ ์“ธ ๊ฒƒ์ธ๊ฐ€?
โ€ข ๋‹ค์Œ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค
1. ํ•œ ํด๋ž˜์Šค์—์„œ ์—ฌ๋Ÿฌ ๋ถ„์•ผ๋ฅผ ๊ฑด๋“œ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ด๋“ค์„ ์„œ๋กœ ๋””์ปคํ”Œ๋ง
ํ•˜๊ณ  ์‹ถ๋‹ค
2. ํด๋ž˜์Šค๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ ธ์„œ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค
3. ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค
๋‹จ, ์ƒ์†์œผ๋กœ๋Š” ๋”ฑ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๊ณจ๋ผ์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค
์ฃผ์˜ ์‚ฌํ•ญ
โ€ข ํด๋ž˜์Šค ํ•˜๋‚˜์— ์ฝ”๋“œ๋ฅผ ๋ชจ์•„๋†จ์„ ๋•Œ๋ณด๋‹ค ๋” ๋ณต์žกํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค
โ€ข ํ•œ ๋ฌด๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์•Œ๋งž๊ฒŒ ๋ฌถ์–ด์ค˜์•ผ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ ์ธ
โ€˜๊ฐ์ฒดโ€™๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
โ€ข ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๊ธฐ๋„ ๋” ์–ด๋ ต๊ณ  ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ๋‘˜์ง€
์ œ์–ดํ•˜๋Š” ๊ฒƒ๋„ ๋” ๋ณต์žกํ•˜๋‹ค
์ฃผ์˜ ์‚ฌํ•ญ
โ€ข ์ฝ”๋“œ๋ฒ ์ด์Šค ๊ทœ๋ชจ๊ฐ€ ํฌ๋ฉด ์ด๋Ÿฐ ๋ณต์žก์„ฑ์—์„œ ์˜ค๋Š” ์†ํ•ด๋ณด๋‹ค ๋””์ปคํ”Œ๋ง๊ณผ
์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์—์„œ ์–ป๋Š” ์ด๋“์ด ๋” ํด ์ˆ˜ ์žˆ๋‹ค
โ€ข ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์ ์šฉํ•˜๊ธฐ ์ „์— ์•„์ง ์žˆ์ง€๋„ ์•Š์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ
โ€˜ํ•ด๊ฒฐ์ฑ…โ€™์„ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ์•„๋‹Œ์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค
์ฃผ์˜ ์‚ฌํ•ญ
โ€ข ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด๋“ ์ง€ ํ•˜๋ ค๋ฉด ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค๋Š” ์ ์ด๋‹ค
โ€ข ๋ฌด์Šจ ์ผ์ด๋“  ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด์—์„œ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์–ป์–ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค
โ€ข ์„ฑ๋Šฅ์ด ๋ฏผ๊ฐํ•œ ๋‚ด๋ถ€ ๋ฃจํ”„ ์ฝ”๋“œ์—์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด
์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค
ํ†ต์งœ ํด๋ž˜์Šค
โ€ข ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์•„์ง ์ ์šฉํ•˜์ง€ ์•Š์•„ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํด๋ž˜์Šค์— ๋‹ค ๋“ค์–ด์žˆ๋‹ค
๋ถ„์•ผ๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ
๋ถ„์•ผ๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ
๋ถ„์•ผ๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ
๋ถ„์•ผ๋ณ„๋กœ ๋‚˜๋ˆ„๊ธฐ
์˜คํ† - ์บ๋ฆญํ„ฐ
โ€ข ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค๋ฅผ ์ถ”์ƒํ™”ํ•œ๋‹ค
์˜คํ† - ์บ๋ฆญํ„ฐ
์˜คํ† - ์บ๋ฆญํ„ฐ
์บ๋ฆญํ„ฐ์ผ ํ•„์š”๋Š” ์—†๋‹ค
โ€ข ์ด์ œ ์บ๋ฆญํ„ฐ ํด๋ž˜์Šค๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฌถ์Œ์ผ ๋ฟ ์บ๋ฆญํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค
โ€ข ๊ฒŒ์ž„์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” GameObject ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๋Š” ๊ฒŒ
๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค
์บ๋ฆญํ„ฐ์ผ ํ•„์š”๋Š” ์—†๋‹ค
์บ๋ฆญํ„ฐ์ผ ํ•„์š”๋Š” ์—†๋‹ค
์บ๋ฆญํ„ฐ์ผ ํ•„์š”๋Š” ์—†๋‹ค

Game programming patterns

  • 1.
  • 2.
    ์ฃผ์ œ ์„ ์ • ์ด์œ  โ€ข์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์ข‹๊ฒŒ ํ• ๊นŒ? โ€ข ๋งŒ์•ฝ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„๋ฅผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? โ€ข ์ฝ”๋”ฉ ํ•  ๋•Œ๋งˆ๋‹ค ํ•ญ์ƒ ํ•˜๋˜ ์ƒ๊ฐ์ด์ง€๋งŒ ๊ณต๋ถ€ํ•œ ์ ์€ ์—†์Œ โ€ข ๊ทธ๋ž˜์„œ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค
  • 3.
    โ€ข ์„œ์ ์—์„œ ์šฐ์—ฐํžˆ๋ฐœ๊ฒฌํ•œ ์ฑ… โ€ข ์ธํ„ฐ๋„ท์—์„œ ์š”์•ฝ ๊ธ€์„ ๋ดค์—ˆ๋Š”๋ฐ ๋‚ด์šฉ์ด ๊ดœ์ฐฎ์•˜๋˜ ๊ฑธ๋กœ ๊ธฐ์–ต โ€ข ๊ด€์‹ฌ์žˆ๋Š” ์ฃผ์ œ์ด๊ธฐ๋„ ํ•ด์„œ ๊ตฌ์ž…
  • 4.
    โ€ข ์ด๋Ÿฐ ์‚ฌ๋žŒ์—๊ฒŒ์ถ”์ฒœ 1. ๋””์ž์ธ ํŒจํ„ด ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์€ ๋ถ„ 2. ์•„์ง ๋””์ž์ธ ํŒจํ„ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ถ„ โ€ข ์ฑ… ๋‚ด์šฉ์ด ๋งŽ์ง€ ์•Š๊ณ (400p) ๋ฌธ์ฒด๊ฐ€ ๋”ฑ๋”ฑํ•˜์ง€ ์•Š์•„์„œ ์ฝ๊ธฐ ํŽธํ•จ โ€ข ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ์„œ๋กœ ์ ์ ˆํ•  ๋“ฏ ๋‹จ, ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด ์ฑ…๊ณผ ๊ฐ™์ด ๋ณผ ๊ฒƒ
  • 5.
    ๋ชฉ์ฐจ 1. ์‹ฑ๊ธ€ํ„ด (Singleton) 2.์ƒํƒœ (State) 3. ์ปดํฌ๋„ŒํŠธ (Component)
  • 6.
  • 7.
    ์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋А๋‚€์  โ€ข์‹ฑ๊ธ€ํ„ด์„ ๋„ˆ๋ฌด ๋‚จ๋ฐœํ•˜๋Š”๊ฑฐ ์•„๋‹Œ๊ฐ€? โ€ข ์‹ฑ๊ธ€ํ„ด์˜ ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ธ๊ฐ€? โ€ข ์‹ฑ๊ธ€ํ„ด์˜ ๋Œ€์•ˆ์€ ์–ด๋–ค๊ฒŒ ์žˆ๋Š”๊ฐ€?
  • 8.
    ์‹ฑ๊ธ€ํ„ด์ด๋ž€? 1. ํ•œ ๊ฐœ์˜์ธ์Šคํ„ด์Šค๋งŒ์„ ๊ฐ–๋„๋ก ๋ณด์žฅ โ€ข ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ์ข…์ข… ์žˆ๋‹ค (์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค) โ€ข ex) ํŒŒ์ผ ์‹œ์Šคํ…œ API
  • 9.
    ์‹ฑ๊ธ€ํ„ด์ด๋ž€? 2. ์ „์—ญ์ ์ธ ์ ‘๊ทผ์ ์„์ œ๊ณต โ€ข ๋ณดํ†ต ์ƒ์„ฑ์ž๋ฅผ private๋กœ ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋”ฐ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ „์—ญ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
  • 10.
    ์‹ฑ๊ธ€ํ„ด์ด๋ž€? โ€ข ์ƒ์„ฑ์ž๊ฐ€ private๋ผ๋ฐ–์—์„œ ์ƒ์„ฑ X (ํ•œ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณด์žฅ) โ€ข instance static ํ•จ์ˆ˜๋กœ ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ โ€ข ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ดˆ๊ธฐํ™”๋ฅผ ๋Šฆ์ถœ ์ˆ˜ ์žˆ์Œ (Lazy Initialization)
  • 11.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  1. ํ•„์š”ํ• ๋•Œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค โ€ข ํ•ด๋‹น ์‹ฑ๊ธ€ํ„ด์„ ํ•œ ๋ฒˆ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค 2. ๋Ÿฐํƒ€์ž„์— ์ดˆ๊ธฐํ™”๋œ๋‹ค โ€ข ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ ํ›„์— ์•Œ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • 12.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  3. ์ƒ์†ํ• ์ˆ˜ ์žˆ๋‹ค โ€ข ๋งŒ์•ฝ ํŒŒ์ผ ์‹œ์Šคํ…œ ์‹ฑ๊ธ€ํ„ด์ด ํฌ๋กœ์Šค ํ”Œ๋žซํผ์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“  ๋’ค ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค
  • 13.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  3-1. ์ƒ์œ„ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค
  • 14.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  3-2. ํ”Œ๋žซํผ๋ณ„๋กœํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค
  • 15.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  3-3. FileSystemํด๋ž˜์Šค๋ฅผ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ๋งŒ๋“ ๋‹ค
  • 16.
    ์‹ฑ๊ธ€ํ„ด์˜ ์žฅ์  3-4. ์ธ์Šคํ„ด์Šค์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์ด ํ•ต์‹ฌ
  • 17.
    ์™€! ์งฑ ์ข‹๋„ค!์ž์ฃผ ์“ฐ๋ฉด ์ข‹์„ ๋“ฏ ใ…Žใ…Ž ์™„๋ฒฝํ•˜๋„ค
  • 18.
  • 19.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1 1.์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค โ€ข SomeClass::getSomeGlobalData() ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ „์ฒด ์ฝ”๋“œ์—์„œ SomeGlobalData์— ์ ‘๊ทผํ•˜๋Š” ๊ณณ์„ ๋‹ค ์‚ดํŽด๋ด์•ผ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค โ€ข ๋งŒ์•ฝ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค๋ฉด?
  • 21.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1 2.์ „์—ญ ๋ณ€์ˆ˜๋Š” ์ปคํ”Œ๋ง์„ ์กฐ์žฅํ•œ๋‹ค โ€ข ์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด #include ํ•œ ์ค„๋งŒ ์ถ”๊ฐ€ํ•ด๋„ ์‹ ์ค‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด๋†“์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”๋Ÿฝํž ์ˆ˜ ์žˆ๋‹ค โ€ข ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ†ต์ œํ•จ์œผ๋กœ์จ ์ปคํ”Œ๋ง์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค
  • 22.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  1 3.์ „์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ฐ™์€ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์•Œ๋งž์ง€ ์•Š๋‹ค โ€ข ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์ƒ๊ธด ๊ฒƒ์ด๋‹ค โ€ข ๊ต์ฐฉ ์ƒํƒœ(Dead Lock), ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition) ๋“ฑ ์Šค๋ ˆ๋“œ ๋™๊ธฐํ™” ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‰ฝ๋‹ค
  • 23.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  2 โ€ข๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ผ ๋•Œ๋„ ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค ๋“ ๋‹ค (์ „์—ญ ์ ‘๊ทผ + ์ธ์Šคํ„ด์Šค ์ œํ•œ) โ€ข Log ํด๋ž˜์Šค๊ฐ€ ์‹ฑ๊ธ€ํ„ด์œผ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ „์—ญ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํŽธํ•˜๊ฒŒ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŒ์•ฝ ๋กœ๊ทธ๋ฅผ ์—ฌ๋Ÿฌ ํŒŒ์ผ์— ๋‚˜๋ˆ ์“ธ ์ƒํ™ฉ์ด ์˜จ๋‹ค๋ฉด? ์ธ์Šคํ„ด์Šค๋ฅผ ํ•œ ๊ฐœ๋งŒ ๋งŒ๋“ค์–ด์•ผ๋Š” ์ œ์•ฝ์ด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค
  • 24.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  3 โ€ข๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™”๋Š” ์ œ์–ดํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค โ€ข ์ฒ˜์Œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ๋•Œ ํ”„๋ ˆ์ž„์ด ๋–จ์–ด์ง€๊ณ  ๋ ‰์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด?
  • 25.
    ์‹ฑ๊ธ€ํ„ด์˜ ๋‹จ์  3 โ€ข์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒŒ์œผ๋ฅธ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค โ€ข ๋‹จ์  1. ๋‹คํ˜•์„ฑ ์‚ฌ์šฉ ๋ชป ํ•จ 2. ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๋ถˆ๊ฐ€๋Šฅ
  • 26.
  • 27.
  • 28.
    ๋Œ€์•ˆ โ€ข ํ•œ ๊ฐœ์˜์ธ์Šคํ„ด์Šค๋งŒ ๊ฐ–๋„๋ก ๋ณด์žฅํ•˜๊ธฐ โ€ข ์ „์—ญ ์ ‘๊ทผ X
  • 29.
    ๋Œ€์•ˆ โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ์ ‘๊ทผํ•˜๊ธฐ (์ „์—ญ ์ ‘๊ทผ ๋Œ€์ฒด) 1. ๋„˜๊ฒจ์ฃผ๊ธฐ โ€ข ํ•จ์ˆ˜์— ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๊ฒŒ ๊ฐ€์žฅ ์‰ฌ์šฐ๋ฉด์„œ๋„ ์ตœ์„ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. โ€ข ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒŒ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์ด๋Ÿฌ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์ž
  • 30.
    ๋Œ€์•ˆ โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ์ ‘๊ทผํ•˜๊ธฐ 2. ์ƒ์œ„ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ
  • 31.
    ๋Œ€์•ˆ โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ์ ‘๊ทผํ•˜๊ธฐ 3. ์ด๋ฏธ ์ „์—ญ์ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ
  • 32.
    ๋Œ€์•ˆ โ€ข ์ธ์Šคํ„ด์Šค์— ์‰ฝ๊ฒŒ์ ‘๊ทผํ•˜๊ธฐ 3. ์ด๋ฏธ ์ „์—ญ์ธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์–ป๊ธฐ โ€ข ๋‚˜์ค‘์— Game ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ง€์›ํ•˜๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”๋„ Log, FileSystem, AudioPlayer๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค โ€ข Game ํด๋ž˜์Šค์— ์ปคํ”Œ๋ง๋˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์‚ฌ์šด๋“œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์–ด๋„ Game ํด๋ž˜์Šค๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค
  • 33.
    ๊ฒฐ๋ก  โ€ข ์‹ฑํดํ„ด์„ ์“ฐ์ง€๋ง์ž๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค โ€ข ์‹ฑ๊ธ€ํ„ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉด ๋‹จ์ ๊ณผ ๋Œ€์•ˆ์„ ํ•œ ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด์ž
  • 34.
  • 35.
    ์ƒํƒœ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ๋А๋‚€์  โ€ข ๊ฐ์ฒด ์ƒํƒœ๋ณ„๋กœ ํด๋ž˜์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค โ€ข State๊ฐ€ ๋งค์šฐ ๋งŽ์•„์ง„๋‹ค๋ฉด? โ€ข ์—ฌ๋Ÿฌ ๊ฐœ์˜ State๊ฐ€ ๊ณต์กดํ•ด์•ผ ํ•œ๋‹ค๋ฉด?
  • 36.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ข๊ฐ„๋‹จํ•œ ํšก์Šคํฌ๋กค ํ”Œ๋žซํฌ๋จธ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•˜์ž. ๋จผ์ € B๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ ํ”„ํ•ด์•ผ ํ•œ๋‹ค โ€ข ๋ฒ„๊ทธ๋ฅผ ๋ˆˆ์น˜ ์ฑ˜๋Š”๊ฐ€?
  • 37.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ข๊ณต์ค‘์— ์žˆ๋Š” ๋™์•ˆ B๋ฅผ ์—ฐํƒ€ํ•˜๋ฉด ๊ณ„์† ๋–  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค โ€ข isJumping_ bool ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค
  • 38.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ข๋ฌดํ•œ ์ ํ”„ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค โ€ข ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋•…์— ์žˆ์„ ๋•Œ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์—Ž๋“œ๋ฆฌ๊ณ  ๋ฒ„ํŠผ์„ ๋–ผ๋ฉด ์ผ์–ด์„œ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณด์ž
  • 39.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ข๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„ ๋ƒˆ๋Š”๊ฐ€?
  • 40.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ 1.์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๋’ค 2. B ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์—Ž๋“œ๋ฆฐ ์ƒํƒœ์—์„œ ์ ํ”„ํ•˜๊ณ  ๋‚˜์„œ 3. ๊ณต์ค‘์—์„œ ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋–ผ๋ฉด 4. ์ ํ”„ ์ค‘์ธ๋ฐ๋„ ๋•…์— ์„œ ์žˆ๋Š” ๋ชจ์Šต์œผ๋กœ ๋ณด์ธ๋‹ค โ€ข ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค
  • 41.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ข๋ญ”๊ฐ€ ๋ฐฉํ–ฅ์„ ์ž˜๋ชป ์žก์€ ๊ฒŒ ๋ถ„๋ช…ํ•˜๋‹ค โ€ข ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ ์—†๋Š”๋ฐ๋„ ์กฐ๊ธˆ๋งŒ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋ง๊ฐ€์ง„๋‹ค โ€ข ๋” ๋งŽ์€ ์ƒํƒœ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด?
  • 43.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ขFlowchart๋ฅผ ๊ทธ๋ ค๋ณด์ž โ€ข ์œ ํ•œ ์ƒํƒœ ๊ธฐ๊ณ„(FSM)๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค
  • 44.
    ์ถ”์–ต์˜ ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ โ€ขFSM ์š”์  1. ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” โ€˜์ƒํƒœโ€™๊ฐ€ ํ•œ์ •๋œ๋‹ค 2. ํ•œ ๋ฒˆ์— โ€˜ํ•œ ๊ฐ€์ง€โ€™ ์ƒํƒœ๋งŒ ๋  ์ˆ˜ ์žˆ๋‹ค 3. โ€˜์ž…๋ ฅโ€™์ด๋‚˜ โ€˜์ด๋ฒคํŠธโ€™๊ฐ€ ๊ธฐ๊ณ„์— ์ „๋‹ฌ๋œ๋‹ค 4. ๊ฐ ์ƒํƒœ์—์„œ๋Š” ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ƒํƒœ๋กœ ๋ฐ”๋€Œ๋Š” โ€˜์ „์ดโ€™๊ฐ€ ์žˆ๋‹ค
  • 45.
    ์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ โ€ขbool ๊ฐ’ ์กฐํ•ฉ์ด ์œ ํšจํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค ex) isJumping๊ณผ isDucking์€ ๋™์‹œ์— ์ฐธ์ด ๋  ์ˆ˜ ์—†๋‹ค โ€ข ์—ฌ๋Ÿฌ ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜ ์ค‘์—์„œ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ผ ๋•Œ๊ฐ€ ๋งŽ๋‹ค๋ฉด ์—ด๊ฑฐํ˜•(Enum)์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‹ ํ˜ธ๋‹ค โ€ข ์˜ˆ์ œ์—์„œ๋Š” FSM ์ƒํƒœ๋ฅผ ์—ด๊ฑฐํ˜•์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค
  • 46.
  • 47.
    ์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ โ€ข๋ถ„๊ธฐ๋ฌธ์„ ๋‹ค ์—†์• ์ง„ ๋ชปํ–ˆ์ง€๋งŒ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ์ค„์˜€๋‹ค(state_ ๋ณ€์ˆ˜) โ€ข ์—ด๊ฑฐํ˜• ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋™์„ ๊ตฌํ˜„ํ•˜๋˜, ์—Ž๋“œ๋ ค ์žˆ์œผ๋ฉด ๊ธฐ๊ฐ€ ๋ชจ์—ฌ์„œ ๋†“๋Š” ์ˆœ๊ฐ„ ํŠน์ˆ˜ ๊ณต๊ฒฉ์„ ์  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž
  • 48.
  • 49.
    ์—ด๊ฑฐํ˜•๊ณผ ๋‹ค์ค‘ ์„ ํƒ๋ฌธ 1.๊ธฐ ๋ชจ์œผ๊ธฐ ๊ณต๊ฒฉ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ 2๊ฐœ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค 2. ์—Ž๋“œ๋ฆฌ๊ธฐ ์ƒํƒœ์—์„œ๋งŒ ์˜๋ฏธ ์žˆ๋Š” chargeTime ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ๋‹ค โ€ข ์ด๊ฒƒ๋ณด๋‹ค๋Š” ๋ชจ๋“  ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘˜ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ๋‚ซ๋‹ค
  • 50.
    ์ƒํƒœ ํŒจํ„ด โ€ข ์ƒํƒœ์—์˜์กดํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐ€์ƒ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ ๋‹ค
  • 51.
    ์ƒํƒœ ํŒจํ„ด โ€ข ์ƒํƒœ๋ณ„๋กœ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค โ€ข chargeTIme_์€ ์—Ž๋“œ๋ฆฌ๊ธฐ ์ƒํƒœ์—์„œ๋งŒ ์˜๋ฏธ ์žˆ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค
  • 52.
    ์ƒํƒœ ํŒจํ„ด โ€ข Heroineํด๋ž˜์Šค์— ํ˜„์žฌ ์ƒํƒœ ๊ฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค โ€ข ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋ ค๋ฉด state_์— HeroineState๋ฅผ ์ƒ์†๋ฐ›์€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค
  • 53.
    ์ƒํƒœ ๊ฐ์ฒด๋Š” ์–ด๋””์—๋‘ฌ์•ผ ํ• ๊นŒ? โ€ข ์ •์  ๊ฐ์ฒด โ€ข ์ƒํƒœ ๊ฐ์ฒด์— ํ•„๋“œ๊ฐ€ ๋”ฐ๋กœ ์—†๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค
  • 54.
    ์ƒํƒœ ๊ฐ์ฒด๋Š” ์–ด๋””์—๋‘ฌ์•ผ ํ• ๊นŒ? โ€ข ์ „์ด ํ•  ๋•Œ๋งˆ๋‹ค ์ƒํƒœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค
  • 55.
    ์ž…์žฅ๊ณผ ํ‡ด์žฅ โ€ข ์ƒํƒœํŒจํ„ด์˜ ๋ชฉํ‘œ๋Š” ๊ฐ™์€ ์ƒํƒœ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋™์ž‘๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ž˜์Šค ํ•˜๋‚˜์— ์บก์Аํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค โ€ข ์ง€๊ธˆ๊นŒ์ง€๋Š” ์ด์ „ ์ƒํƒœ์—์„œ ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ๋‹ค (DuckingState์—์„œ IMAGE_STAND๋กœ ๋ณ€๊ฒฝ, 51p ์ขŒ์ธก ์‚ฌ์ง„) โ€ข ์ด๋ณด๋‹ค๋Š” ๊ฐ™์€ ์ƒํƒœ์—์„œ ๊ทธ๋ž˜ํ”ฝ๊นŒ์ง€ ์ œ์–ดํ•˜๋Š” ๊ฒŒ ๋ฐ”๋žŒ์งํ•˜๋‹ค ์ด๋ฅผ ์œ„ํ•ด ์ž…์žฅ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์ž
  • 56.
  • 57.
    ์ž…์žฅ๊ณผ ํ‡ด์žฅ โ€ข Stand์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด Stand ์ƒํƒœ๊ฐ€ ์•Œ์•„์„œ ๊ทธ๋ž˜ํ”ฝ๊นŒ์ง€ ์ฑ™๊ธด๋‹ค โ€ข ์ด์ „ ์ƒํƒœ์™€๋Š” ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๊ฐ™์€ ์ž…์žฅ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ๋„ ์žฅ์  โ€ข ์ƒˆ๋กœ์šด ์ƒํƒœ๋กœ ๊ต์ฒด๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ํ‡ด์žฅ๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•˜๋ฉด ๋œ๋‹ค
  • 58.
    ๋ณ‘ํ–‰ ์ƒํƒœ ๊ธฐ๊ณ„ โ€ขํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด์„ ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋ณด์ž โ€ข ์ด์„ ์žฅ์ฐฉํ•œ ํ›„์—๋„ ๋‹ฌ๋ฆฌ๊ธฐ, ์ ํ”„, ์—Ž๋“œ๋ฆฌ๊ธฐ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค ๊ทธ๋Ÿฌ๋ฉด์„œ ์ด๋„ ์  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค โ€ข FSM ๋ฐฉ์‹์€ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์„œ๊ธฐ, ๋ฌด์žฅํ•œ ์ฑ„๋กœ ์„œ๊ธฐ, ์ ํ”„, ๋ฌด์žฅํ•œ ์ฑ„๋กœ ์ ํ”„ ๊ฐ™์€ ์‹์œผ๋กœ ๋ฌด์žฅ, ๋น„๋ฌด์žฅ์— ๋งž์ถฐ 2๊ฐœ์”ฉ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค โ€ข ์ด ๋ฌธ์ œ๋Š” ์ƒํƒœ ๊ธฐ๊ณ„๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค
  • 59.
  • 60.
    ๋ณ‘ํ–‰ ์ƒํƒœ ๊ธฐ๊ณ„ โ€ข๋‘ ์ƒํƒœ ๊ธฐ๊ณ„๊ฐ€ ์„œ๋กœ ์ „ํ˜€ ์—ฐ๊ด€์ด ์—†๋‹ค๋ฉด ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค โ€ข ํ˜„์‹ค์ ์œผ๋กœ๋Š” ์ ํ”„ ๋„์ค‘์—๋Š” ์ด์„ ๋ชป ์œ๋‹ค๋Š” ์‹์œผ๋กœ ๋ณต์ˆ˜์˜ ์ƒํƒœ ๊ธฐ๊ณ„๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค โ€ข ์ด๋ฅผ ์œ„ํ•ด ์–ด๋–ค ์ƒํƒœ ์ฝ”๋“œ(์ด)์—์„œ ๋‹ค๋ฅธ ์ƒํƒœ ๊ธฐ๊ณ„์˜ ์ƒํƒœ(์ ํ”„)๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ผ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค
  • 61.
    ๊ณ„์ธตํ˜• ์ƒํƒœ ๊ธฐ๊ณ„ โ€ขํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์„œ๊ธฐ, ๊ฑท๊ธฐ, ๋‹ฌ๋ฆฌ๊ธฐ, ๋ฏธ๋„๋Ÿฌ์ง€๊ธฐ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž โ€ข ์œ„ ์ƒํƒœ์—์„œ๋Š” ๋ชจ๋‘ B ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ ํ”„ํ•˜๊ณ , ์•„๋ž˜ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์—Ž๋“œ๋ ค์•ผ ํ•œ๋‹ค โ€ข FSM ๋ฐฉ์‹์€ ๊ฐ ์ƒํƒœ๋งˆ๋‹ค ์ฝ”๋“œ๋ฅผ ์ค‘๋ณตํ•ด ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ณด๋‹ค๋Š” ํ•œ ๋ฒˆ๋งŒ ๊ตฌํ˜„ํ•˜๊ณ  ๋‹ค๋ฅธ ์ƒํƒœ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋‚ซ๋‹ค โ€ข ์ƒ์†์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค
  • 62.
  • 63.
    Push-Down Automata โ€ข FSM์—์„œ๋Š”ํ˜„์žฌ ์ƒํƒœ๋Š” ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค โ€ข ์‚ฌ์ง„์˜ ์Šคํ…Œ์ด์ง€ ํ™”๋ฉด์„ ๋กœ๋น„์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  ํ€˜์ŠคํŠธ ํ™”๋ฉด์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด? โ€ข ์ด์ „ ํ™”๋ฉด์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐˆ ๊ฒƒ์ธ๊ฐ€?
  • 64.
    Push-Down Automata โ€ข ์ƒํƒœ๋ฅผ์Šคํƒ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋œ๋‹ค
  • 65.
    ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€? โ€ข๋‚ด๋ถ€ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฐ์ฒด ๋™์ž‘์ด ๋ฐ”๋€” ๋•Œ โ€ข ์ด๋Ÿฐ ์ƒํƒœ๊ฐ€ ๋งŽ์ง€ ์•Š์€ ์„ ํƒ์ง€๋กœ ๋ถ„๋ช…ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋  ์ˆ˜ ์žˆ์„ ๋•Œ โ€ข ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ์ด๋‚˜ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ๋ฐ˜์‘ํ•  ๋•Œ
  • 66.
    ๊ฒŒ์ž„ AI์—์„œ๋Š”? โ€ข ์‚ฌ์‹คFSM์„ ์ฒ˜์Œ ์ ‘ํ•œ ๊ฑด ๊ฒŒ์ž„ AI๋ฅผ ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ โ€ข ๊ทผ๋ฐ ์š”์ฆ˜์€ ์•ˆ ์“ด๋‹ค๊ณ  ํ•˜๋”๋ผโ€ฆ โ€ข Behavior Tree ๋‚˜ Planning System์„ ๋” ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•œ๋‹ค
  • 67.
  • 68.
  • 69.
    ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์„ ํƒํ•œ์ด์œ  โ€ข ์ƒ์†์„ ์‚ฌ์šฉํ•ด๋ณด๋‹ˆ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด ์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜ ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ์Œ โ€ข ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?
  • 70.
    ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์„ ํƒํ•œ์ด์œ  EDCBA โ€ข ์ด๋Ÿฐ ์ƒ์† ๊ตฌ์กฐ์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ํž˜๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค
  • 71.
    ๋™๊ธฐ โ€ข ํ”Œ๋ ˆ์ด์–ด ํด๋ž˜์Šค์—์„œ๋Š”AI, ๋ฌผ๋ฆฌ, ๋ Œ๋”๋ง, ์‚ฌ์šด๋“œ ๋“ฑ์˜ ํด๋ž˜์Šค๋“ค์ด ์‹คํƒ€๋ž˜์ฒ˜๋Ÿผ ์–ฝํ˜€ ์žˆ๋‹ค โ€ข ์ด ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜๋ ค๋ฉด ๋ฌผ๋ฆฌ(collidingWithFloor), ๊ทธ๋ž˜ํ”ฝ(getRenderState), ์‚ฌ์šด๋“œ(playSound)๋ฅผ ์ „๋ถ€ ์•Œ์•„์•ผ ํ•œ๋‹ค (์ปคํ”Œ๋ง)
  • 72.
    ํŒจํ„ด โ€ข ์—ฌ๋Ÿฌ ๋ถ„์•ผ๋ฅผ๋‹ค๋ฃจ๋Š” ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๊ฐ€ ์žˆ๋‹ค โ€ข ๋ถ„์•ผ๋ณ„๋กœ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๊ฐ๊ฐ์˜ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ ํด๋ž˜์Šค์— ๋‘”๋‹ค โ€ข ์ด์ œ ๊ฐœ์ฒด ํด๋ž˜์Šค๋Š” ๋‹จ์ˆœํžˆ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ๋งŒ ํ•œ๋‹ค
  • 73.
    ์–ธ์ œ ์“ธ ๊ฒƒ์ธ๊ฐ€? โ€ข๋‹ค์Œ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋งŒ์กฑํ•œ๋‹ค๋ฉด ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค 1. ํ•œ ํด๋ž˜์Šค์—์„œ ์—ฌ๋Ÿฌ ๋ถ„์•ผ๋ฅผ ๊ฑด๋“œ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ด๋“ค์„ ์„œ๋กœ ๋””์ปคํ”Œ๋ง ํ•˜๊ณ  ์‹ถ๋‹ค 2. ํด๋ž˜์Šค๊ฐ€ ๊ฑฐ๋Œ€ํ•ด์ ธ์„œ ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค 3. ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹ถ๋‹ค ๋‹จ, ์ƒ์†์œผ๋กœ๋Š” ๋”ฑ ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๊ณจ๋ผ์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค
  • 74.
    ์ฃผ์˜ ์‚ฌํ•ญ โ€ข ํด๋ž˜์Šคํ•˜๋‚˜์— ์ฝ”๋“œ๋ฅผ ๋ชจ์•„๋†จ์„ ๋•Œ๋ณด๋‹ค ๋” ๋ณต์žกํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค โ€ข ํ•œ ๋ฌด๋ฆฌ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์•Œ๋งž๊ฒŒ ๋ฌถ์–ด์ค˜์•ผ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ ์ธ โ€˜๊ฐ์ฒดโ€™๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. โ€ข ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๊ธฐ๋„ ๋” ์–ด๋ ต๊ณ  ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ ์–ด๋””์— ๋‘˜์ง€ ์ œ์–ดํ•˜๋Š” ๊ฒƒ๋„ ๋” ๋ณต์žกํ•˜๋‹ค
  • 75.
    ์ฃผ์˜ ์‚ฌํ•ญ โ€ข ์ฝ”๋“œ๋ฒ ์ด์Šค๊ทœ๋ชจ๊ฐ€ ํฌ๋ฉด ์ด๋Ÿฐ ๋ณต์žก์„ฑ์—์„œ ์˜ค๋Š” ์†ํ•ด๋ณด๋‹ค ๋””์ปคํ”Œ๋ง๊ณผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์—์„œ ์–ป๋Š” ์ด๋“์ด ๋” ํด ์ˆ˜ ์žˆ๋‹ค โ€ข ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด์„ ์ ์šฉํ•˜๊ธฐ ์ „์— ์•„์ง ์žˆ์ง€๋„ ์•Š์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ โ€˜ํ•ด๊ฒฐ์ฑ…โ€™์„ ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ์•„๋‹Œ์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค
  • 76.
    ์ฃผ์˜ ์‚ฌํ•ญ โ€ข ๋˜๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด๋“ ์ง€ ํ•˜๋ ค๋ฉด ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค๋Š” ์ ์ด๋‹ค โ€ข ๋ฌด์Šจ ์ผ์ด๋“  ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด์—์„œ ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ถ€ํ„ฐ ์–ป์–ด์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค โ€ข ์„ฑ๋Šฅ์ด ๋ฏผ๊ฐํ•œ ๋‚ด๋ถ€ ๋ฃจํ”„ ์ฝ”๋“œ์—์„œ ์ด๋Ÿฐ ์‹์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค
  • 77.
    ํ†ต์งœ ํด๋ž˜์Šค โ€ข ์ปดํฌ๋„ŒํŠธํŒจํ„ด์„ ์•„์ง ์ ์šฉํ•˜์ง€ ์•Š์•„ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํด๋ž˜์Šค์— ๋‹ค ๋“ค์–ด์žˆ๋‹ค
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
    ์˜คํ† - ์บ๋ฆญํ„ฐ โ€ข ์ปดํฌ๋„ŒํŠธํด๋ž˜์Šค๋ฅผ ์ถ”์ƒํ™”ํ•œ๋‹ค
  • 83.
  • 84.
  • 85.
    ์บ๋ฆญํ„ฐ์ผ ํ•„์š”๋Š” ์—†๋‹ค โ€ข์ด์ œ ์บ๋ฆญํ„ฐ ํด๋ž˜์Šค๋Š” ์ปดํฌ๋„ŒํŠธ ๋ฌถ์Œ์ผ ๋ฟ ์บ๋ฆญํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค โ€ข ๊ฒŒ์ž„์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” GameObject ํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๋Š” ๊ฒŒ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค
  • 86.
  • 87.
  • 88.