[C#] ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ : delegate, Func, Action

2021. 11. 4. 09:55

C#์—์„œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ์ฝœ๋ฐฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ด๋‹ค.

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์— ๋ฉ”์†Œ๋“œ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•œ ํ›„ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๊ฐ€ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ ํ˜•์‹๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œํ•ด์ค˜์•ผํ•œ๋‹ค.

delegate int MyDelegate(int a, int b);

 

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์„ ์–ธํ•œ ํ›„์— ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๊ฐ€ ์ฐธ์กฐํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

์ด๋•Œ ์ด ๋ฉ”์†Œ๋“œ๋“ค์˜ ๋ฐ˜ํ™˜ ํ˜•์‹๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์˜ ๋ฐ˜ํ™˜ ํ˜•์‹๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

public int Plus(int a, int b)
{
    return a + b;
}

 

์ด์ œ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ MyDelegate๊ฐ€ ์ฐธ์กฐํ•˜๋ฉด ๋œ๋‹ค.

Calcul c = new Calcul();
MyDelegate Callback;

Callback = new MyDelegate(c.Plus);
Console.WriteLine(Callback(3, 5));

 

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์— ์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ• ๋‹นํ•˜๋ฉด ๋œ๋‹ค.

 

Func์™€ Action

.NET ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” Func ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์™€ Action ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ delegate๋ฅผ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค.

 

Func

Func์—์„œ <>์•ˆ์— ๋“ค์–ด์žˆ๋Š” n๊ฐœ์˜ ํ˜•์‹ ์ค‘ ๋งˆ์ง€๋ง‰์€ ์ถœ๋ ฅ ํ˜•์‹์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ž…๋ ฅ ํ˜•์‹์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋žŒ๋‹ค์‹์˜ ์™ผ์ชฝ์—๋Š” n-1๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ  ์˜ค๋ฅธ์ชฝ์—๋Š” 1๊ฐœ์˜ ๋ฐ˜ํ™˜๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.

Func<int> func1 = () => 10;
Func<int, int> func2 = (x) => x*2;

 

Action

Func์™€ Action์˜ ์ฐจ์ด์ ์€ Action ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ๋ฐ˜ํ™˜ ํ˜•์‹์ด ์—†๋‹ค๋Š” ์ ์ด๋‹ค.

์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ €๊ธ๋กœ ํ•˜์ง€ ์•Š๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.

์ถœ๋ ฅ์„ ํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ๋•Œ ์“ฐ์ธ๋‹ค.

Action act1 = () => Console.WriteLine("Action()");
int result = 0;
Action<int> act2 = (x) => result = x;
728x90

BELATED ARTICLES

more