[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
(ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค...) => {...๋ชธํ†ต...}

ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•˜๋‚˜์ผ๊ฒฝ์šฐ ์†Œ๊ด„ํ˜ธ๋„ ์ƒ๋žต๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿผ ์ด๋Ÿฐ์‹์œผ๋กœ ๋ฐ”๋กœ ๋„˜๊ฒจ๋ฒ„๋ฆด ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
ํ•จ์ˆ˜( () => {...} );
ํ•œ๋ˆˆ์— ์ดฅ ๋“ค์–ด์˜ค๋Š” ๊ตฌ์กฐ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.


๋