ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] Delegate에 대한 공부(1)
    C# 2022. 1. 7. 14:47
    728x90

    안녕하세요. 오늘은 Delegate에서 공부한 내용을 적어볼까합니다.

     

    Delegate혹은 DelegateCommand라는 말은 많이 들어봤는데 정작 정의를 제대로 알고 사용해 본적이 없어 이번기회에 찾아보고 간단한 예제를통해 실습해 보고자 합니다.

     

    제가 참조한 내용과 예시는 '뇌를자극하는 C#5.0 프로그래밍' 이라는 책입니다. 

     

    먼저Delegate라는 정의를 알아보겠습니다.

     

    'C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다.'

    입니다.

    해당 정의에 대한 출처는 https://www.csharpstudy.com/CSharp/CSharp-delegate.aspx 여기에서 가져왔습니다.

     

    또한 해당 정의로는 어려울 수 있기에 하나의 예제를 가져왔습니다.

     

    회사원인 저는 사장님께 보고를 드리고자 합니다.

    그러나 말단사원이 사장님께 바로 보고를 드릴 수는 없겠죠?

    비서에게 말을 합니다. "저 사원인데 사장님께 보고드리고 싶다고 남겨주세요."

    그럼 비서분께서 사장님 책상에 쪽지를 남겨줍니다.

    "사원 ~가 보고를 드리고싶다고 합니다."

     

    사장님이 확인 후 저에게 바로 전화를 걸어서 확인합니다.

     

    사원 ==> 비서 ==> 사장 으로 체계가 올라갔지만

    사장 ==> 사원으로 비서를 거치지 않고 바로 호출하는걸 알 수 있습니다.

    이렇게 직통으로 연결하는걸 CallBack이라고 합니다.

     

    이제 간단한 예제를 통해 Delegate를 사용해보겠습니다.

    예제는 앞서 말한 책을따라가보겠습니다.

     

    책에서 제공하는 Delegate 순서입니다.

     

    ① 델리게이트를 선언

    ② 델리게이트의 인스턴스를 생성, 인스턴스를 생성할때는 델리게이트가 참조할 메소드를 매개변수로 넘긴다.

    ③ 델리게이트를 호출

     

    Delegate를 이용한 더하기, 빼기를 하는 간단한 코드입니다.

    같이보시죠.

     

    먼저 프로젝트를 하나 만들고 class바로 안에 delegate를 정의해주겠습니다.

    형식은 '한정자 delegate 반환형식 델리게이트 이름 (매개 변수 목록)' 순입니다.

    매개변수는 적용시킬 매소드랑 갯수를 맞춰주시면 되겠습니다.

    delegate int MyDelegate(int a, int b);

     

    다음은 Plus함수와 Minus메서드를 정의하겠습니다.

    추후 앞서 선언한 MyDelegate와 연결하도록 하겠습니다.

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

    따로 언급할 필요없는 간단한 코드입니다.

    Plus면 더하기, Minus면 빼기입니다.

    여기서 주목할 점은 바로 Plus, Minus 매서드 둘 다 위에서 선언한 MyDelegate형식을 따라간다는 점입니다.

     

    이제 메인을 보겠습니다.

            static void Main(string[] args)
            {
                MyDelegate callback;
    
                callback = new MyDelegate(Plus);
                Console.WriteLine(callback(2, 3));
    
                callback = new MyDelegate(Minus);
                Console.WriteLine(callback(7, 4));
    
            }

    위에서 선언한 MyDelegate를 자료형처럼 사용해 callback으로 변수를 선언했습니다.

    MyDelegate안에 파라미터로 Plus 매서드를 넣어줍니다.

    그리고 마치 기존의 Plus함수를 실행 시키듯 callback(2,3)을 실행시키네요.

    그리고 Minus부분도 같습니다.

     

    결과는 어떻게 나올까요?

    예상한대로 Plus, Minus매서드가 실행된걸 확인하실 수 있습니다.

    신기하기는 한데 어디에서 유용하게 쓰일 수 있을지 다음 글에서 좀더 알아보겠습니다.

    'C#' 카테고리의 다른 글

    [C#] Delegate에 대한 공부(3) Delegate Chain  (0) 2022.04.01
    [C#] Delegate에 대한 공부(2)  (0) 2022.03.22
    [C#] 일반화(3)  (0) 2022.03.02
    [C#] 일반화(2)  (0) 2022.01.25
    [C#] 일반화(1)  (0) 2022.01.14

    댓글

Designed by Tistory.