본문 바로가기

IT

C# 델리게이트 이해 및 예제

 

C#에서 어느정도의 기초학습이 끝나고 나면 등장하는 녀석입니다.

 

중급정도의 개발 기술입니다.

 

델리게이트를 잘 이해하면 개발 수준이 빠르게 높아질 수 있습니다.

 

그럼 이해하기 쉽게 예제와 함께 설명해 드리겠습니다.

 


 

◎ 델리게이트란?

 

"델리게이트는 메서드를 참조(가리키는)할 수 있는 타입입니다."
즉, 메서드를 변수처럼 다룰 수 있게 해주는거죠.


☞  비유로 이해하기

델리게이트를 전화번호부로 비유해 보겠습니다.

  • 전화번호부에는 이름(델리게이트 변수)이 있고
  • 실제 전화번호(메서드 주소)가 저장돼 있죠.
  • 우리가 전화번호부를 통해 전화를 걸 듯,

델리게이트를 통해 메서드를 간접적으로 호출할 수 있습니다.


▷ 기본 사용예제

using System;

public class Program
{
    // 1. 델리게이트 선언 (string을 받아서 void를 반환하는 메서드를 위한 델리게이트)
    delegate void SaySomething(string message);

    // 2. 델리게이트가 가리킬 메서드
    static void Hello(string msg)
    {
        Console.WriteLine("안녕: " + msg);
    }

    static void Main()
    {
        // 3. 델리게이트 인스턴스 생성 및 메서드 할당
        SaySomething say = Hello;

        // 4. 델리게이트를 통해 메서드 호출
        say("김희선");  // 결과: 안녕: 김희선
    }
}


☞  델리게이트의 장점

  1. 메서드를 매개변수처럼 넘길 수 있음
  2. 런타임에 어떤 메서드를 실행할지 바꿀 수 있음
  3. 이벤트 처리(윈도우 버튼 클릭 등)에 많이 사용됨
  4. 익명 메서드나 람다식과 함께 쓰면 아주 강력함

▷▷ 실전 팁

델리게이트는 요즘에는 다음 두 가지로 많이 대체되고 있습니다.

  • Action : 반환값 없는 델리게이트
  • Func : 반환값 있는 델리게이트

Action<string> say = msg => Console.WriteLine(msg);
say("안녕하세요");

Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(3, 4));  // 결과: 7


 

=> 기호

  • 정식 명칭: 람다 연산자(lambda operator) 
  • 읽는 방법: "이렇게 매핑된다 또는 매핑하라" 또는 "이렇게 동작한다 또는 동작하라" 라고 이해하면 됩니다.

※ 기본구조

 

(매개변수) => { 실행 코드 }

 

또는, 코드가 한 줄이면 중괄호 없이 이렇게도 씁니다:

 

(매개변수) => 결과

 

예제 1 : List에서 짝수만 가져오기

 

Func<int, int, int> add = (a, b) => a + b;

Console.WriteLine(add(3, 4));  // 결과

 

람다식은 이전글에 있습니다.

쉽지만 응용력이 뛰어나고 활용도가 아주 높습니다.

꼭 학습해서 실무에 도움되시길 바랍니다.

 

 

--- 참고 ---

https://kke1404.tistory.com/6

 

C# foreach 와 for 문 LINQ 사용법

Foreach 문 Foreach 는 컬렉션 (배열, 리스트, 테이블 등)을 반복(iterate) 할 때 사용하는 반복문입니다.사용법 foreach (var item in 컬렉션) {     // item을 이용한 처리 }예제1: 문자열 리스트 반복 L

kke1404.tistory.com

 

 

 

'IT' 카테고리의 다른 글

C# SWICH 문 예제  (0) 2025.04.02
C# 델리게이트 이벤트핸들러 사용 예제  (0) 2025.03.28
C# Clone() 함수 사용법과 예제  (0) 2025.03.25
C# Func 사용법 예제  (0) 2025.03.25
C# foreach 와 for 문 LINQ 사용법  (2) 2025.03.25