[C#] ๋ธ๋ฆฌ๊ฒ์ดํธ : delegate, Func, Action
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;
'๐ฃ์ธ์ด > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] ๋ค์ด๋ฐ ๋ฃฐ (0) | 2021.11.08 |
---|---|
[C#] ํธ์ถ์ ์ ๋ณด ์ ํธ๋ฆฌ๋ทฐํธ (0) | 2021.11.04 |
[C#] System.Array ์ฃผ์ ๋ฉ์๋์ ํ๋กํผํฐ (0) | 2021.11.03 |
[C#] ํ๋กํผํฐ : get, set (0) | 2021.11.03 |
[C#] ์ ๊ทผ ํ์ ์ : public, protected, private, internal, protected internal (0) | 2021.11.03 |