Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C#] delegate를 이용한 익명 메소드 (Anonymous Method) 본문

Programming/C#

[Programming/C#] delegate를 이용한 익명 메소드 (Anonymous Method)

scii 2020. 9. 22. 23:40

익명 메소드란 이름이 없는 메소드를 말한다. 익명 메소드는 delegate 키워드를 이용하여 선언한다. 

대리자 인스턴스 = delegate(매개변수 목록)
               {
                   // 실행하고자 하는 코드
               };

익명 메소드는 자신을 참조할 대리자의 형식과 동일한 형식으로 선언되어야 한다.

delegate int Calculate(int a, int b);

public static void Main(){
    Calculate calc;
    calc = delegate(int a, int b){
               return a + b;
           };
}

반환 형식을 int로 선언했다면 익명 메소드도 int 형식의 결과를 반환해야 하며, 대리자에서 int 형식의 매개 변수 2개를 받도록 선언했다면 익명 메소드도 역시 동일하게 매개 변수를 받도록 구현해야 한다.
익명 메소드는 아주 유용하게 사용된다. 대리자가 참조할 메소드를 넘겨야 할 시기에 이 메소드가 두 번 다시 사용할 일이 없다고 판단되면 그 때가 익명 메소드를 사용할 타이밍이다.

익명 메소드의 예제

using System;

namespace test
{
    delegate int Compare(int a, int b);

    internal class Program
    {
        static void BubbleSort(int[] dataSet, Compare comparer)
        {
            int temp = 0;
            for (int i = 0; i < dataSet.Length - 1; i++)
            {
                for (int j = 0; j < dataSet.Length - (i + 1); j++)
                {
                    if (comparer(dataSet[j], dataSet[j + 1]) > 0)
                    {
                        temp = dataSet[j];
                        dataSet[j] = dataSet[j + 1];
                        dataSet[j + 1] = temp;
                    }
                }
            }
        }

        public static void Main(string[] args)
        {
            int[] array = new int[] {3, 7, 4, 2, 10};

            Console.WriteLine("sorting ascending...");
            // 익명 메소드 전달
            BubbleSort(array, delegate(int a, int b)
            {
                if (a > b)
                    return 1;
                else if (a == 0)
                    return 0;
                else
                    return -1;
            });

            for (int i = 0; i < array.Length; i++)
                Console.Write($"{array[i]} ");

            int[] array2 = new int[] {7, 2, 8, 10, 11};
            Console.WriteLine("\nsorting descending...");
            BubbleSort(array2, delegate(int a, int b)
            {
                if (a < b)
                    return 1;
                else if (a == b)
                    return 0;
                else
                    return -1;
            });

            for (int i = 0; i < array2.Length; i++)
                Console.Write($"{array2[i]} ");

            Console.WriteLine();
        }
    }
}


/* 결과

sorting ascending...
2 3 4 7 10 
sorting descending...
11 10 8 7 2 

*/
Comments