์ ์ง๋ฌธ๊ธ :ย https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=112646&page=5
์ด๊ฑฐ์๋ํ ๋ต๋ณ์ผ๋ก ๋ค๋ค ์ ๋ํ์คํฌ ์ถ์ฒํด์ค์ ๋ณด๋ฉด์ ๊ณต๋ถํด๋ณด๊ณ ์๋จ ๋ง์ด์ผ
๊ทผ๋ฐ ๋ณด๋ค ์ข ๋ ๊ทผ๋ณธ์ ์ผ๋ก ์๊ธด ๊ถ๊ธ์ฆ์
๋ช ๋ น์ ์์ฐจ์ ์ผ๋ก ์ถ๋ ฅํ๊ธฐ ์ํ ๊ฑด๋ฐ ์ ๋น๋๊ธฐํ๋ก๊ทธ๋๋ฐ์ด ๋์ค๋๊ฑด์ง ์ ๋ชจ๋ฅด๊ฒ ๋๋ผ๊ณ
์ด๊ฒ ์ดํด๊ฐ ์ ๋๋๊น ์ ์ ๋ํ์คํฌ๋ฅผ ์จ์ผํ๋์ง, ์ฝ๋ฃจํด์ ์ด๋ป๊ฒ ์์ ํ ๋์ฒดํ๋ค๋๊ฑด์ง ์ด๊ฒ์ ๋ํด์๋ ๊ฐ์ด ์ ์ ์กํ.
์ผ๋ฐ์ ์ผ๋ก ์์ฐจ์ ์ผ๋ก ์ถ๋ ฅํ๋ ค๋ฉด ์คํ๋ ค ๋๊ธฐ๋ฅผ ํด์ผํ๋๊ฒ ์๋๊ฐ? ์ถ์ด์.
1. ๋จผ์ ๊ถ๊ธํ๊ฒ,
๋ด๊ฐ ์ดํดํ๋ฐ๋ก๋ย ๋ช ๋ น์ ์ถ๋ ฅ์ํค๊ณ ํด๋น ๋ช ๋ น์ ์์ ํ ๋๋ด๊ธฐ ์ ์ ๋ค์ ๋ช ๋ น์ผ๋ก ๋์ด๊ฐ๋ ํ์ ์์ฒด๊ฐ ๋น๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ์ด๊ณ
๋๋ฌธ์ ์ด๊ฑธ ๊ด๋ฆฌํ๊ธฐ์ํด์ async await๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ฉฐ
์ด๊ฒ ์ฝ๋ฃจํด์ ์๋ฆฌ์ด๋๊น(yeild return), ์ ๋ํ์คํฌ๊ฐ ์ธ๊ธ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ ๋ง์?
2. ๊ทธ๋ ๋ค๋ฉด ์ ๋ํ์คํฌ์ ์๋ ์๋ฆฌ๋
์ฐ์ ๋ชจ๋ ๋ช ๋ น๋ค์ ํธ์ถํ๋ ๋๊ธฐ์ํ๋ก ๋๊ณ ,
์์ ๋ช ๋ น์ด ์์๋๋ฉด ์ฝ๋ฐฑ์ผ๋ก ์๋ ค์ค -> ๋ค์ ๋ช ๋ น ์คํ -> ๋ค์ ๋ช ๋ น์ด ์๋ค๋ฉด ์ข ๋ฃ
์ด๋ฐ ์๋ฆฌ๋ก ๋์ํ๋๊ฒ ๋ง๋๊ฑด๊ฐ?
์ ์ ๊ฐ ์์ง์ด๋ ๋์์ ์ด์ ์๋ ๊ฒ์ ๊ตฌํํ๋ค๊ณ ์๊ฐํด๋ณด์ ํ๋ก๊ทธ๋๋ฐ ์ฒ์ ๋ฐฐ์ธ ๋์ฒ๋ผ ๋จ์ผ ์ค๋ ๋์์ ๋จ์ํ ํจ์๋ก ๊ตฌํํ๋ค? ์ด๊ฑฐ ์ ๋จ
ํฌ๊ฒ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ ์ ์๋๋ฐ, ์ฒซ์งธ๋ ์ค๋ ๋๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ ์ด์ ์๋ ๋ถ๋ถ๊ณผ ์ด๋ํ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํด์ ๊ณ์ฐํ๋ ๊ฑฐ์(aka ๋น๋๊ธฐ) ๋์งธ๋ ์ ๋ํฐ ์์ง์์ ํ๋ฏ์ด ๋งค ๋จ์ ์๊ฐ๋ง๋ค ์ ํด์ง ์ฐ์ฐ์ ์ํํ๋ฉด์ ๋ฉํฐ ์์ ์ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ฑฐ์(aka ์ฝ๋ฃจํด ๊ฐ๋ )
๊ทธ์น ๊ทธ๊ฑด ์๊ณ ์๋๋ฐ ๊ทธ๋์ ์ ๋ํ์คํฌ๊ฐ ์ ์๋ฆฌ๋ก ๋์ํ๋๊ฒ ๋ง๋๊ฑฐ์ง...??
์ผ๋จ ์ ๋ํ์คํฌ๋ c#์ task๋ฅผ ์ ๋ํฐ์ฉ์ผ๋ก ์ฝ๊ฐ ๋ณ๊ฒฝํ๊ฑฐ๋ผ๊ณ ๋ง ์๊ณ ์์ผ์ผ. ๋น๋๊ธฐ ๋๊ธฐ ์๋ฏธ๋ ๋จ์ abc์์ฐจ์ ์ผ๋ก ์ผํ๋๋ฐ b๊ฐ ์ผ์ด๋ง์์ ์ค๋ ๋๋ฅผ ๋ธ๋ฝํ๊ณ ์๋ค๊ฐ ๋๋ํ c๋ฅผ ์ฒ๋ฆฌํ๋ค๋ฉด ์ด๊ฑด ๋๊ธฐํ๋ ํ๋ก์ธ์ค์ธ๊ฑฐ์. ๋ฌธ์ ๋ b๋๋ฌธ์ ํ๋ฉด ๋ ๋๋ง์ค๋ ๋๋ ๋ฉ์ถฐ๋ฒ๋ฆฌ๋๊ฑฐ์. ๋ง๊ทธ๋๋ก ์ปด์ดํ๋ฆฌ์ง๋๊ฑฐ์ง ์๊ฐ๋์.
๊ทธ๋ผ ๋ฉ์ธ์ค๋ ๋๊ฐ ๋งํ๋ฉด ๋ ๋๋ง๋๋งํ๋ฒ๋ฆฌ๋๊น await B๋ฅผ ํด์ฃผ๋๊ฑฐ์. ์ด๋ฌ๋ฉด b๋๋ฌธ์ ๋ฉ์ธ์ค๋ ๋๊ฐ ๋งํ์ง ์์. ์๋๋ฉด b๋ ๋ค๋ฅธ์ค๋ ๋์์ ํ๊ณ ์๊ฑฐ๋ (์จ์ต์ awaitํ๋ฉด ๋ณ๋์ค๋ ๋์์ ๋์๊ฐ๋๋ฐ ์ ๋ํ์คํฌ๋ ๋ฉ์ธ์ค๋ ๋์์ ๋์๊ฐ. ๋์ ์ฝ๋ฃจํด์ฒ๋ผ ๋ฉ์ธ์ค๋ ๋๋ฅผ ์์๋ง๋๊ฑด์๋) ๊ทธ๋์ ๋น๋๊ธฐํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋๊ฒจ. await๋ฅผ ํ๋ฉด ๋ณ๋ ์ค๋ ๋๋๊น
์ด๊ฒ ์์ ๋ค๋ฅธ ์ธ์ด์์๋ ๋ณ๋์ค๋ ๋์์ ์ผ๋๋๋ฉด ํจ์ํธ์ถ๋๋๋ก ๋ธ๋ฆฌ๊ฒ์ดํธ(ํจ์ํฌ์ํฐ)๊ฐ์๊ฑธ ๋๊ฒจ์ฃผ๋์์ผ๋ก ์ผ์ฒ๋ฆฌ๋ฅผ ํ์๋๋ฐ, ์ธ์ ๋ถํด๊ฐ await๋ผ๋ ํค์๋๊ฐ์๊ฒ๋ค์ด ๊ฐ์ฒด์งํฅ์ธ์ด๋ค์์ ์ ํ์ฒ๋ผ ๋ฒ์ ธ๋๊ฐ.
ํ c# task์ ๋ํด์ ์์ธํ ์์๋ด์ผ๊ฒ ๋ค ใฑใ ใฑใ ๊ทผ๋ฐ ์ฌ์ค ์ด๊ฒ ๋ฉํฐ์ค๋ ๋๊ฐ ์ง์ง ๋ฉํฐ์ค๋ ๋๊ฐ ์๋๊ณ ๊ทธ๋ฅ ์๋ถํ ์ด์์ ๊ทธ์น...? ๋ญ๊ฐ ์์ฆ ํ๋๋ฅผ ๋ฐฐ์ฐ๋ฉด ์๋กญ๊ฒ ๋ฐฐ์์ผํ ๊ฒ ๋์ธ๊ฐ์ฉ ๋ ์๊ธฐ๋ ๊ธฐ๋ถ ใ ใ
์ ๋ํ์คํฌ๋ ์๋ถํ ์ด๊ณ c#์์ awaitํ๋ฉด ์ ๋ง๋ก ๋ณ๋์ค๋ ๋์์ ๋์๊ฐ. ๋ฉ์ธ์ค๋ ๋์์ ๋์๊ฐ๊ฒ ํ๊ณ ์ถ์ผ๋ฉด SynchronizationContext์ฐ๋ฉด ์ ๋ํ์คํฌ์ฒ๋ผ ๋ฉ์ธ์ค๋ ๋์์ ๋๋๋ก ํ ์ ์์. ๊ฒ์ํด๋ณด๋ฉด ๋์
์. ์ง์ง ์น์ ํ๋ต๋ณ ์ ๋ง์ ๋ง ๊ณ ๋ง์. ์ง์ง ๋ฉํฐ์ค๋ ๋๊ฐ ๋์๊ฐ๋ค๊ณ ๋ ์๊ฐ๋ ๋ชปํ๋๋ฐ ํ ๋ฒ ๋๋ ์ฐพ์๋ณผ๊ฒ ์ง์ง ๊ณ ๋ง์. ์ง์ง ๋ฉํฐ์ค๋ ๋๋ฉด ๋ฝ ๋ฌธ์ ๊ฐ ํ์ฐ์ ์ผ๋ก ๋ฐ์ํ ํ ๋ฐ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง๋ ๊ถ๊ธํ๋ค ์ฐพ์๋ด์ผ์ง
๋ด๊ฐ ๋งํ๋ C#์ ์ ๋ํฐ์ C#๋ง๊ณ , ๋ท๋ท์ด๋ ๋ท๋ท์ฝ์ด C#์ ๋งํ๋๊ฑฐ์. ์ ๋ํฐ๋ ์ง๋ค์ด ๋ง๋ SynchronizationContext๊ฐ ์์ด์ ๋ฉ์ธ์ค๋ ๋์์ ๋์๊ฐ๋๊ฑฐ์. ๋งํฌ๋ด์ฉ ๋งจ ๋ฐ์ ์ฐธ์กฐ
https://docs.unity3d.com/kr/2020.3/Manual/overview-of-dot-net-in-unity.html
๋ท๋ท์ด๋
๋ท๋ท์ฝ์ด์์๋ await Task๋ ๋ณ๋์ ํ์ ์๋ ์ฐ๋ ๋๋ก Task๋ฅผ ๋๋ฆผ. C#์ Task์ชฝ ๊ณต๋ถํ๋ฉด ๋์
์ฉ๋์ ์ฐ์์ด ๋ง์์ผ๋๋๋ฐ ํน ๋ผ๋ ค๋ค ํน ๋ถ์ด๋ค ใ ใ ๊ฐ๊ฒฐํ๊ณ ๋จ์ด ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ํ๋ฉด ๋์์ธ ํจํด์ ๊ณต๋ถํด์ผ์ง
๊ตญํ์ค?
๊ทธ๋ฅ UniTask๊ฐ ์ถ์ฒ๋ ์ด์ ์์ฒด๋ ์ ํจ์๊ฐ ์คํ๋๋๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด์ผ ์ผ๋ฐ์ ์ผ๋ก ํจ์๋ ๊ทธ๋ฅ ํ๋ฒ ํธ์ถํ๋ฉด ์์๋ถํฐ ๋๊น์ง ์๋ํ๊ณ ์ด๋๋ก ๊ฐ์ง๋ฅผ ์์์. UniTask๋ ์๋ํ๋ ๋์ ๋ค๋ฅธ ์์ ๋ ํ๋ฌ๊ฐ ์ ์๊ฒ ํด์ฃผ๋๊ฑฐ์. ์ ๋ํฐ ์์์๋ ๋ฉ์ธ์ฐ๋ ๋์์๋ง ์๋ํ๋ค๋ณด๋ ์ ๋ง๋ก ์ด๊ฑฐํ๋ค ์ ๊ฑฐํ๋ค ์๋ค๊ฐ๋ค ํ๋๊ฑฐ์
๋ด๊ฐ ๋ค ๋ถ๋๋ฝ๋ค;; ์๊ธ์ ๋น๋๊ธฐ ์์ ์ด ํ์ํ๊ฒ ์๋์ผ... ๊ธ ์ข ์ฝ์ด๋ณด๊ณ ์ ์ ๋ฐ..
๋จ์ํ ๋น๋๊ธฐ ์์ ์ด ํ์ํ๋ค๋๊ฒ ์๋๋ผ ์ฝ๋ฐฑ ์ด์ฉ๊ณ ํ๋ฉด์ ์์๋ฅผ ๋ดค์๋ ํ์ํด๋ณด์๋๊ฑธ ์ด์ผ๊ธฐํ๊ฑฐ์ ๋์์ธํจํด๊ฐ์ด ๋น์ฅ ์ ์ฉํ ์ ์๋๊ฑด ๋์ค์ ์๋ฉด๋์ง ์ง๊ธ ์ํฉ์์๋ ์ ๋๋ก ํ์์์ง ๋ถ๋๋ผ์์ด์ผ
์ผ์ผ.. ๊ฐ๋ฐ์ ๋ง์? ใ ใ ๋์์ธํจํด์ด ๋น์ฅ ์ ์ฉํ ์ ์๋ค๋๊ฑด ๋ญ์๋ฆฌ๊ณ ์ฝ๋ฐฑ ์ด์ฉ๊ณ ๋ผ๋๊ฑด ๋ ๊ฐ๋ฐ์๋ก์ ํ ์๊ธฐ์? ใ ใ ใ