๊ด€๋ฆฌ ๋ฉ”๋‰ด

Algo ์“ฐ์ž

32. ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ(delegate)์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๋ณธ๋ฌธ

๐Ÿ’ป Programming Language/C#

32. ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ(delegate)์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

S.Honey 2022. 4. 8. 09:11
  • ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ(Delegate) : ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ. => ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ด์šฉํ•ด ํฌ์žฅํ•˜๊ณ  ์ „๋‹ฌ.(๋‚ด๊ฐ€ ์ดํ•ดํ•œ๋ฐ”๋กœ๋Š” .. ใ…‡ใ…‡)

void AAA(int arg1){ ... }

int a = 123;

AAA(a);
class DemoClass 
{
    int id;
    string name;
    public int DisplayInfo() {..}
}

void AAA(DemoClass d){ ... } 

DemoClass d = new DemoClass();
AAA(d)
  • ์œ„์˜ ์ฝ”๋“œ๋“ค์€ ๊ธฐ์กด ์ธ์ž๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ํ˜น์€ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„๋• delegate๋ฅผ ์‚ฌ์šฉ


void AAA(Mydelegate Method){ ... } 

int StringToInt(string str) { ... } 

delegate int Mydelegate(string str) ; 
// ํ˜•ํƒœ๋Š” ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์ด ์ƒ๊ฒผ์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ํด๋ž˜์Šค์™€ ๊ฐ™์ด ๋™์ž‘ํ•จ.

MyDelegate myDelegate = new MyDelegate(StringToInt); // delegate ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

AAA(myDelegate);

โญ๏ธโญ๏ธโญ๏ธ ์ค‘์š” !! โญ๏ธโญ๏ธโญ๏ธ
์ „๋‹ฌํ•˜๋ ค๋Š” ํ•จ์ˆ˜์™€ delegate ์˜ ๋ฐ˜ํ™˜ํƒ€์ž… ๋ฐ ์ธ์žํƒ€์ž…, ์ธ์ž ์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์™œ ๊ทธ๋ƒฅ ์ง์ ‘ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ํ• ๊นŒ?(๊ฐ•์˜์—์„œ ๋˜์ง„ ์˜๋ฌธ)

์‚ฌ์šฉ ์˜ˆ์ œ ์ฝ”๋“œ

using System.Collections;

namespace DelegateEx
{   

    class Program
    {
        //๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ •์˜
        delegate int MyDelegate(string str); 
        // ๋ฐ˜ํ™˜ํƒ€์ž…์ด int์ด๊ณ  ํ•œ๊ฐœ์˜ string์ธ์ž๋ฅผ ๊ฐ€์ง€๋Š” ํฌ๋งท์˜ ๋ฉ”์†Œ๋“œ๋Š” delegate๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋‹ค.

        void TestMethod()
        {
            //๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ฐ์ฒด ์ƒ์„ฑ
            MyDelegate md = new MyDelegate(StringToInt);
            //๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋กœ ์ „๋‹ฌ. => ์ด ๋ถ€๋ถ„์€ ๋ฉ”์†Œ๋“œ๋ฅผ ํฌ์žฅํ•˜๋Š” ๋Š๋‚Œ.

            AAA(md);//์—ฌ๊ธฐ์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌ.
        }

        // ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์— ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฉ”์†Œ๋“œ
        // ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ์ •์˜์‹œ ๋ฐ˜ํ™˜ํ˜• int, ์ธ์ž ํƒ€์ž… = string, ์ธ์ž์ˆ˜ = 1๊ฐœ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฉ”์†Œ๋“œ.
        int StringToInt(string str)
        {
            return int.Parse(str);
        }

        // ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ๋ฉ”์†Œ๋“œ
        void AAA(MyDelegate method)
        {
            int i = method("100");

            Console.WriteLine(i);
        }

        static void Main(string[] args)
        {
            new Program().TestMethod();
        }
    }
}
Output

100