본문 바로가기

(신)회사/개인 공부

델리게이트 (delegate)

델리게이트가 뭐야?

델리게이트는 마치 리모컨과 같아요. 리모컨은 TV를 켜고 끌 때 사용하는데, 리모컨 버튼을 누르면 실제로는 TV의 특정 기능(전원을 켜거나 끄는 것)을 실행하죠. 델리게이트도 비슷하게, 특정 메서드(함수)를 가리키고 그 메서드를 실행할 수 있도록 해주는 "리모컨"이에요.


왜 사용하는 걸까?

델리게이트는 프로그램에서 여러 개의 메서드를 쉽게 연결하거나 교체해서 사용할 수 있게 해줘요. 마치 리모컨을 통해 TV뿐만 아니라 DVD 플레이어나 오디오 시스템도 조종할 수 있는 것처럼, 델리게이트는 프로그램에서 다른 메서드를 유연하게 호출할 수 있도록 해줍니다.


예를 들어 볼까?

마치 "친구에게 부탁하기"와 같은 상황이라고 생각해 보세요. 친구에게 "숙제를 도와줘"라고 말할 때, 어떤 친구는 수학을 도와주고 다른 친구는 과학을 도와줄 수 있어요. 이때 델리게이트는 어떤 친구가 어떤 과목을 도와줄지 결정하는 역할을 해요.


using System;

public class Program
{
    // 델리게이트 선언: 리모컨처럼 작동할 델리게이트
    public delegate void SimpleDelegate(string message);

    // 메서드 1: 화면에 메시지를 출력
    public static void PrintHello(string message)
    {
        Console.WriteLine("안녕, " + message);
    }

    // 메서드 2: 화면에 다른 메시지를 출력
    public static void PrintGoodbye(string message)
    {
        Console.WriteLine("잘 가, " + message);
    }

    public static void Main(string[] args)
    {
        // 델리게이트 인스턴스에 메서드 연결 (리모컨의 버튼을 설정하는 것과 비슷)
        SimpleDelegate myDelegate = PrintHello;

        // 델리게이트 호출 (리모컨의 버튼을 누르는 것)
        myDelegate("친구");

        // 다른 메서드로 델리게이트 변경
        myDelegate = PrintGoodbye;
        myDelegate("친구");
    }
}

코드 설명

  1. SimpleDelegate: string 매개변수를 받는 메서드를 가리킬 수 있는 리모컨이에요.
  2. **PrintHello**와 PrintGoodbye: 두 개의 메서드로, 델리게이트가 어떤 메서드를 호출할지 선택할 수 있어요.
  3. myDelegate = PrintHello: 델리게이트가 PrintHello 메서드를 가리키도록 설정했어요. 이 리모컨을 눌러 PrintHello를 실행할 수 있어요.
  4. myDelegate("친구"): 델리게이트를 사용해 PrintHello 메서드를 호출해요.
  5. myDelegate = PrintGoodbye: 이제 델리게이트가 PrintGoodbye 메서드를 가리키게 변경됐어요.


왜 델리게이트가 유용할까?

델리게이트를 사용하면 어떤 메서드를 실행할지 쉽게 바꿀 수 있어서 코드가 더 유연해져요. 마치 리모컨의 버튼 하나만 눌러 TV에서 DVD 플레이어로 전환하듯, 델리게이트는 코드에서 실행할 메서드를 쉽게 변경할 수 있게 해줘요.

'(신)회사 > 개인 공부' 카테고리의 다른 글

ref 와 out 차이  (4) 2025.02.05
델리게이트 & 이벤트 (delegate & event)  (1) 2024.11.07