์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- DP
- ์๊ณ ๋ฆฌ์ฆ
- BFS
- ์ฝ๋ํธ๋ฆฌ
- programmers
- JavaScript
- ๋ฌธ์์ด ํ์ฑ
- Flutter
- c#
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- ์คํฐ๋
- JS
- ๊ตฌํ
- ๊ทธ๋ํ ํ์
- DART
- ํ๋ก๊ทธ๋๋จธ์ค
- ์ฐ์ จ์์
- ์ผ์ฑsw์ญํ
- ์นด์นด์ค
- ๋ชป๊ทธ๋ฆฌ์ง๋ง
- Algorithm
- ๋ฐฑ์ค
- ํ์ด์ฌ
- ์ด์งํ์
- BAEKJOON
- sort
- Java
- ์๋ฃ๊ตฌ์กฐ
- ์ฝ๋ฉํ ์คํธ
- ์๋ฐ์คํฌ๋ฆฝํธ
Archives
- Today
- Total
Algo ์ฐ์
34. ์ ๋ค๋ฆญ ๋ธ๋ฆฌ๊ฒ์ดํธ(Generic Delegate) & ์ฝ๋ฐฑํจ์ ๋ณธ๋ฌธ
๐ป Programming Language/C#
34. ์ ๋ค๋ฆญ ๋ธ๋ฆฌ๊ฒ์ดํธ(Generic Delegate) & ์ฝ๋ฐฑํจ์
S.Honey 2022. 4. 8. 09:12์๋ฉด ์ข์ ์ง์ - Callback Function(์ฝ๋ฐฑํจ์)
Delegate
๋ฅผ ํ์ฉํ ํจ์์ ๋ฌ์callback
๊ณผ ๊ฐ์ ๊ฐ๋ callback
: A, B, C ๋ฉ์๋๊ฐ ์์๋, A๊ฐ B(์ค๊ฐ์=Delegate)๋ฅผ ํตํด์ C์๊ฒ ์ ๋ฌ์ ํด๋ฌ๋ผ๊ณ ํ๋๋ฐ, B๊ฐ C์๊ฒ A์๊ฒ ์ฐ๋ฝํ ๊ฒ์ ์์ฒญํ๊ณ ,
C๊ฐ ๋ค์ A์๊ฒ ์ฐ๋ฝ์ ์ทจํ๋ค.- ์ฝ๊ฒ ๋งํด A๋ฅผ C์๊ฒ ์ ๋ฌํ๊ณ ์ถ์๋ฐ ์ค๊ฐ์ delegate๊ฐ ๊ทธ ์ญํ ์ ํ๊ณ , C๋ ๊ฒฐ๊ณผ๋ฅผ A์๊ฒ ๋ฐํํ๋ค.
using System.Collections;
namespace DelegateEx
{
delegate int CalculationDelegate(int x, int y);
class Program
{
static int Add(int x, int y)
{
return x + y;
}
static int Sub(int x, int y)
{
return x - y;
}
public static void calc(int x, int y, CalculationDelegate cd)
{
/*
calc()๋ฉ์๋๊ฐ `calc = A`๋ ์ง์ Add๋ Sub ๋ฉ์๋๋ฅผ ํธ์ถํ๋๊ฒ ์๋๋ผ cd ๋๋ฆฌ์(์ค๊ฐ์ or Delegate = B)๋ฅผ ์ด์ฉํด `Add ํน์ Sub = C`๋ฅผ ํธ์ถํจ.
*/
Console.WriteLine(cd(x, y));
}
static void Main(string[] args)
{
CalculationDelegate plus = new CalculationDelegate(Add);//์ค๊ฐ์(B)
// ์์ ์ฝ๋์ CalculationDelegate plus = Add; ๋ ๊ฐ์ ์ฝ๋์ด๋ค.
CalculationDelegate minus = new CalculationDelegate(Sub);
// ์์ ์ฝ๋์ CalculationDelegate plus = Sub; ๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ์ฝ๋์ด๋ค.
calc(11, 22, plus); // plus๊ฐ ์ฝ๋ฐฑ์, plus = Add๋ผ๋ ํจ์๋ฅผ ํธ์ถํจ.
/*
calc()๋ฉ์๋๊ฐ `calc = A`๋ ์ง์ Add๋ฅผ ํธ์ถํ๋๊ฒ ์๋๋ผ plus ๋๋ฆฌ์๋ฅผ ์ด์ฉํด `Add = C`๋ฅผ ํธ์ถํจ.
*/
calc(11, 22, minus); // minus๊ฐ ์ฝ๋ฐฑ์
}
}
}
Output
33
-11
โญ๏ธโญ๏ธโญ๏ธ ์ฝ๋ฐฑ ์ดํด์ ์์ด ์ค์ํ ์ฝ๋
static int Add(int x, int y)
{
return x + y;
}
static int Sub(int x, int y)
{
return x - y;
}
public static void calc(int x, int y, CalculationDelegate cd)
{
/*
calc()๋ฉ์๋๊ฐ `calc = A`๋ ์ง์ Add๋ Sub ๋ฉ์๋๋ฅผ ํธ์ถํ๋๊ฒ ์๋๋ผ cd ๋๋ฆฌ์(์ค๊ฐ์ or Delegate = B)๋ฅผ ์ด์ฉํด `Add ํน์ Sub = C`๋ฅผ ํธ์ถํจ.
*/
Console.WriteLine(cd(x, y));
}
- ์ ์ฝ๋์์ ํ์ธํ ์ ์๋ฏ์ด
calc(= A)
๋ฉ์๋๊ฐ ์ง์ Add
๋Sub
๋ฉ์๋๋ฅผ ํธ์ถํ๋๊ฒ ์๋๋ผcd ๋๋ฆฌ์(์ค๊ฐ์ or Delegate = B)
๋ฅผ ์ด์ฉํดAdd ํน์ Sub (= C)
๋ฅผ ํธ์ถํจ. - ๊ทธ ํ
Add ํน์ Sub (= C)
๋ ๋ฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์calc(= A)
๋ก ๋ฐํํ์ฌ ๋์๊ฐ๋์ฝ๋ฐฑ(CallBack)
๋์์ ํจ.
์ ๋ค๋ฆญ ๋ธ๋ฆฌ๊ฒ์ดํธ(Generic Delegate)
using System.Collections;
namespace DelegateEx
{
delegate T CalDelegate<T>(T x, T y);
class Program
{
static int Add(int x, int y)
{
return x + y;
}
static double Sub(double x, double y)
{
return x - y;
}
public static void calc<T>(T x, T y, CalDelegate<T> cd)
{
Console.WriteLine(cd(x, y));
}
static void Main(string[] args)
{
CalDelegate<int> plus = Add;
CalDelegate<double> minus = Sub;
calc(11, 11, plus);
calc(5.1, 2.2, minus);
}
}
}
Output
22
2.8999999999999995
- ๊ธฐ์กด ๊ณต๋ถํ๋ ์ ๋ค๋ฆญ์ ํ์ฉํ๋ฉด ๋๋ ๊ฒ์ด๊ธฐ์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
'๐ป Programming Language > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
36. ์ต๋ช ๋ฉ์๋ (0) | 2022.04.08 |
---|---|
35. ๋ธ๋ฆฌ๊ฒ์ดํธ ์ฒด์ธ(delegate chain) (0) | 2022.04.08 |
33. ๋ธ๋ฆฌ๊ฒ์ดํธ(delegate) ์ฌ์ฉ (0) | 2022.04.08 |
32. ๋ธ๋ฆฌ๊ฒ์ดํธ(delegate)์ ๊ธฐ๋ณธ ๊ฐ๋ (0) | 2022.04.08 |
31. ์์ธํํฐ(Exception Filter) (0) | 2022.04.08 |