์ฌ์ค์ ๋ค ๋๊ฐ์ ์ญํ ํ๋๋ฐ๋ธ๋ฆฌ๊ฒ์ดํธ, ์ด๋ฒคํธ, ์ก์ ๊ทธ๋ฅ ํ๋ ์ ํด์ ์ญ ์ฐ๋๊ฑฐ์?
๋ธ๋ฆฌ๊ฒ์ดํธ ์ ์ด๋ฒคํธ์ ์ฐจ์ด๋ ํด๋น ๋ณ์ ์์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋๋ ์๋๋ฉด ์ด ๋ณ์๊ฐ ์๋๋๋๋์ ์ฐจ์ด์ง
Action์ void์ธํ void์์ํ์ธ delegate๋ฅผ ์ ์ธํ๊ฑฐ๋ค. Action์ด๋ UnityAction์ ๊ตฌํ๋ถ๋ฅผ๊ฐ๋ณด๋ฉด public delegate void Action(); ์ด๋ฐ์์ผ๋ก ๋์ด์์๊ฑฐ์ event๋ delegate chain์ด๋ค. +=์ฐ์ฐ, -=์ฐ์ฐ์ผ๋ก ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ์ฌ๋ฌ๊ฐ ๋ฌ๊ณ ํด์ ํ ์ ์์. ํ์ง๋ง public์ผ๋ก ๋์ด์์ด๋ ์ธ๋ถ์์ ํธ์ถ์ ๋ชปํจ. ๋ฑ๋ก/ํด์ ๋ง ๊ฐ๋ฅ. public event Action actionOnSomething; ์ด๋ฐ์์ผ๋ก ์ฌ์ฉํ๋ค.
์ง๊ธ๋ณด๋๊น Action์ ํ ํ๋ฆฟ์ผ๋ก ๋ณ์ N๊ฐ ๋ค์ด๊ฐ๋๊ฑฐ ๋ค ์ ์ธ๋์ด์์ด์ ์ธํ์ ์จ๊ฐ ํํ๋ก ๋ค ์ฌ์ฉํ ์ ์๋ค
(
https://docs.microsoft.com/ko-kr/dotnet/api/system.action-1?view=net-5.0)
๊ทผ๋ฐ
์ด๋ฆ์ด Action์ผ๋ก ๊ณ ์ ์ด๋ผ ๋๊ฐ ์ปค์คํ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ๋ง๋ค์ด์ ๊ณ ์ ์ด๋ฆ์ ๋ถ์ด๋๊ฒ ์ด๋์ด๊ฒ ์ง ๋ธ๋ฆฌ๊ฒ์ดํธ์ return๊ฐ๋ ๋ฐ๊ฟ์์๊ณ
Delegate.Combine์ ์ด์ฉํ๋ฉด eventํค์๋๋ฅผ ์ฐ์ง์๋๋ผ๋ ์ฌ๋ฌ๊ฐ์ delegate๋ฅผ ํฉ์น ์๋ ์๋ค. ๊ทผ๋ฐ ์ด๊ฑด, ๋ถ์์ ํ ์ฌ๋ฌ๊ฐ์ ํจ์๋ฅผ ํฉ์ณ์ ํ๋์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ๋ง๋ ๋ค๋ ๋๋์ด๊ณ event๋ ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์๋ฐ๋์ด์ผํ๋ ์ฌ๋ฌ๊ฐ์ ๋์๋ค์ ๋ฑ๋กํ๋ค๋ ๋๋์ด๋ค. ์ด ์ฐจ์ด๋๋ฌธ์, event๋ public์ด์ด๋ ์ธ๋ถ์์ ํธ์ถํ์ง๋ชปํ๋ค. event๋ฅผ ๋ฐ์์ํค๋๊ฑด event๋ฅผ ๊ฐ์ง ์ฃผ์ธ๋ง์ ๊ถ๋ฆฌ๋ผ๊ณ ๋ณด๋ ํํ์.
Event, Action ๋๋ค ๊ฒฐ๊ตญ ๋ธ๋ฆฌ๊ฒ์ดํธ๊ณ Action์ด๋ ๋น๊ตํ ๊ฑฐ๋ Event๊ฐ ์๋๋ผ Func ์ธ๋ฏ ๋ฆฌํด๊ฐ์ด ์๋ ์๋ ์ฐจ์ด๋๊น