[C#] ์ฝ๋ฐฑ
์ฝ๋ฐฑ์ด๋ ํจ์์ ์ธ์๋ก ํจ์๋ฅผ ๋๊ฒจ์ ๋์ ๋ก์ง์ ์ํํ๊ฒ ํด์ฃผ๋ ๊ฑธ ๋งํ๋ค.
๋ณ์๋ง ๊ฐ์ฒด์ธ๊ฒ ์๋๋ผ ํจ์๋ ๊ฐ์ฒด๋ผ์ ๋ญ ๋ค ๋๋ค.
๊ทผ๋ฐ ํจ์๋ฅผ ๋ณ์๋ก ์ทจ๊ธํด์ ๋๊ธด๋ค๋ฉด ๊ทธ ํจ์์๋ ํ์
์ด ์์ด์ผ๊ฒ ์ง?
์ฌ๊ธฐ์๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
1.์ธํฐํ์ด์ค
2.๋๋ฆฌ๊ฒ์ดํธ(๋๋ฆฌ์)
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ ์ฝ๋ฐฑ์ ์๋ฐ์์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ ๋ณด์, ์๋ฅผ ๋ค์ด ์ด๋ฐ ์ธํฐํ์ด์ค๊ฐ ์๋ค๊ณ ํด๋ณด์
interface Callback
{
void run();
}
Calllback์ ๊ตฌํํ ํ์
์ ๋ฐ๋์ run์ด๋ผ๋ ํจ์๋ฅผ ๊ฐ๊ณ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋๊น ํ๋ผ๋ฏธํฐ์ ํ์
์ Callback์ผ๋ก ํ๊ณ ,
Callback์ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ ๋ฌํ๊ณ ์ ํ๋ ๋ก์ง์ run์๋ค๊ฐ ๋ฃ์ด๋๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฝ๋ฐฑ์ ๋ฐ์๋จน๋ ํจ์ ๋ด์์ run์ ํธ์ถํ๋ฉด ๋๋ค.
๋ญ ๋ฌธ์ ๋ ์๋๋ฐ ๋ญ๋ผ๊ณ ํด์ผํ ๊น
์ธ๋ จ๋์ง ๋ชปํ๋ค๋ ๋๋์ด ๋ค์ง ์๋?
๋ฉ์ฒญํ ์๋ฐ์์๋ ๋ฐฉ๋ฒ์ด ์ด๊ฑฐ๋ฐ์ ์๋ค.
ํ์ง๋ง C#์์๋ ๋ ๋ฉ์ง ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ค.
๋๋ฆฌ๊ฒ์ดํธ๋ ๋ง์ ์ข ์ด์ํ๋ฐ ๋ญ ๊ทธ๋ฅ C์์์ ํจ์ํฌ์ธํฐ์ ๋ณ๋ก ๋ค๋ฅด์ง ์๋ค.
delegate ๋ฐํํ์
๋๋ฆฌ์์ด๋ฆ(ํ๋ผ๋ฏธํฐ);... ์ด๋ ๊ฒ ์ ์ธ์ด ๋๋๋ฐ, ์ด๊ฑฐ๋ ํ์
์ ์ธ์ด๋ผ ์ ์ญ์ ๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฑด C์
*typedef ๋ฐํํ์
(ํจ์ํ์
๋ช
)(ํ๋ผ๋ฏธํฐ) ์ด๋ฌํ ๊ตฌ๋ฌธ๊ณผ ๋ฌธ๋งฅ์์ผ๋ก ์ ์ฌํ๋ค.
์ด๊ฑด ์ธํฐํ์ด์ค๋ณด๋ค ๋ ํธ๋ฆฌํ๋ค. ๊ทธ๋ฅ ํจ์๋ฅผ ๊ฐ๋ค๋ฐ์ผ๋ฉด ๋๋ค.
๋๋ฆฌ์์ด๋ฆ ๋ณ์๋ช = ํจ์;
์ด๋ฌ๋ฉด ํจ์๋ฅผ ์์ ํ ๋๋ฆฌ์๊ฐ ๋๋ค. ๊ทธ๋ผ ๊ทธ ์ด๋ฆ ์์ฒด๋ฅผ ํจ์๋ก ์ฌ์ฉํ ์ ์๋ค.
๋๋ฆฌ์์ ๋ณ์์๋ =, +=, -=์ด ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ๋๋ฆฌ์์ ๋ณ์๋ ํ๋ ์ด์์ ํจ์๋ฅผ ๋ด์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ฆฌ์๋ก ํจ์๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ ์ฅ๋์ด์๋ ํจ์๊ฐ ์ ๋ถ ์ฐ๋ฅด๋ฅด ์์์ ธ๋์จ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ฆฌ์์ ๋ณ์์ event ํค์๋๋ก ์์ํด์ ์ด๋ฒคํธ๊ฐ์ฒด๋ก ์ฐ๊ธฐ๋ ํ๋๋ฐ ๋ญ ์ด๊ฒ๋ ์ฌ์ค ๊ทธ๋ฅ ๋๋ฆฌ์ ๋ณ์๋ ๋ค๋ฅผ๊ฒ ์์
๋๋ฆฌ์๋ ์ ๋ค๋ฆญ ์ ์ฉ์ด ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ System ์ด๋ฆ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ์ ์๋ ๋๋ฆฌ์๊ฐ ์ฌ๋ฟ ์๋ค. ์ ์ฐพ์์ ๊ฐ๋ค ์ฐ์.
๋๋ค
์ฌํผ ์ด์ ๋๋ค์ ๋ํด์ ์ ์ด๋ณด๊ฒ ๋ค.
์ด๋ค ๋ฉ์๋๊ฐ ์๊ตฌํ๋ ํ๋ผ๋ฏธํฐ๊ฐ ์ฝ๋ฐฑ์ด๋ผ์ ํจ์๋ฅผ ๋๊ฒจ์ผ ํ๋ค ์น์.
๊ทธ๋ผ ํจ์(์ ๋ฌํ๋ ค๋ํจ์); ์ด๋ฐ์์ผ๋ก ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฆ์ ํ์
ํ๋ ค๋ฉด ์ ๋ฌํ๋ ค๋ ํจ์๊ฐ ์ด๋ค ๋ด์ฉ์ธ์ง ์์์ผ ํ๋ค. ํ์ง๋ง ํจ์๋ค์ ๊ฐ์์ ์์ญ์๋ง ์กด์ฌํ๊ณ , ๋์ด๋ ์คํฌ๋กค์ ์ผ๋ง๊ฐ ์ฌ๋ฆฌ๊ฑฐ๋ ํผํน์ ํ๋์๋ฐ์ ์๋ค.
์ด๋ด๋ ์ฐ๋ฉด ์ข์ ๊ฒ์ด ๋ฐ๋ก ๋๋ค์์ด๋ค. ์ต๋ช
๋ฉ์๋๋ผ๋ ์์์ ์ธ ํํ๊ฐ ์๊ธด ํ๋ฐ ๊ทธ๊ฑด ๊ท์ฐฎ์์ ๊ทธ๋ฅ ์ง๋๊ฐ๊ฒ ๋ค.
(๋๋ค๋ ver 3.0~, ์ต๋ช
๋ฉ์๋๋ 2.0~)
์ฌํผ ๋๋ค๋ ๋ค๋ฅธ ํจ์๋ค์ฒ๋ผ ๊ทธ๋ฅ ํด๋์ค ๋ด๋ถ์ ๋๋ ๊ฒ ์๋๋ผ ๋ก์ปฌ ๋ฒ์์ ๋ ์ ์๋ค.
๋๋ค์ ํ์์ ์ด๋ ๋ค.
(ํ๋ผ๋ฏธํฐ๋ค...) => ๋ฐํ์;
or
(ํ๋ผ๋ฏธํฐ๋ค...) => {...๋ชธํต...}
ํ๋ผ๋ฏธํฐ์ ํ์
์ ์๋ต ๊ฐ๋ฅํ๊ณ ํ๋ผ๋ฏธํฐ๊ฐ ํ๋์ผ๊ฒฝ์ฐ ์๊ดํธ๋ ์๋ต๊ฐ๋ฅํ๋ค. ๊ทธ๋ผ ์ด๋ฐ์์ผ๋ก ๋ฐ๋ก ๋๊ฒจ๋ฒ๋ฆด ์๊ฐ ์๋ค.
ํจ์( () => {...} );
ํ๋์ ์ดฅ ๋ค์ด์ค๋ ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ์ด๋ค.
๋