C#

C# 기초부터 고급까지 Chapter 1.9. 델리게이트, 이벤트, 람다식

Juan_ 2025. 4. 27. 08:28
728x90

📚 Chapter 1.9: 델리게이트, 이벤트, 람다식 – C# 진짜 개발자가 되기 위한 완전 정복


✅ 이 챕터에서 배울 것

이번 챕터는 단순히 "문법"이 아니라,
C# 프로그램 흐름을 "디자인"할 수 있는 기술을 배운다!
  • 델리게이트란 무엇인가? 왜 필요한가?
  • 이벤트란 무엇인가? 델리게이트와 뭐가 다른가?
  • 람다식이란 무엇인가? 왜 굳이 쓰는가?
  • 실무에서 진짜 쓰는 예제까지 정리!

🔥 1. 델리게이트 (Delegate)


🎯 1-1. 델리게이트 기본 개념

델리게이트란?

"메서드(함수)를 변수처럼 저장하고, 실행할 수 있게 해주는 타입"이다!

→ "함수 포인터" 느낌인데, 타입 안정성(type safety)을 갖춘 버전!

🛠️ 예제: 가장 기본적인 델리게이트

public delegate void Printer(string message);

class Program
{
    static void PrintToConsole(string text)
    {
        Console.WriteLine(text);
    }

    static void Main()
    {
        Printer printer = PrintToConsole;
        printer("델리게이트로 호출된 출력!");
    }
}
🔵 정리
- Printer는 문자열(string)을 받아서 아무것도 반환하지 않는 메서드를 가리킬 수 있다.
- printer("문자열") → 메서드를 호출하는 것과 같다.

🎯 1-2. 델리게이트를 쓰는 이유

이유 설명
결합도 낮추기 호출하는 쪽과 실행되는 쪽을 분리 가능
전략 패턴 구현 실행할 메서드를 외부에서 주입
이벤트 기반 필수 이벤트 핸들링은 델리게이트로 구성

🎯 1-3. 다중 델리게이트 (Multicast Delegate)

여러 메서드를 하나의 델리게이트에 연결할 수도 있다!
void Print1(string msg) => Console.WriteLine("1번: " + msg);
void Print2(string msg) => Console.WriteLine("2번: " + msg);

Printer printer = Print1;
printer += Print2; // 델리게이트 체인

printer("테스트 메세지");
✅ 델리게이트를 +=, -=로 메서드를 추가하거나 제거할 수 있다.

---

🔥 2. 이벤트 (Event)


🎯 2-1. 이벤트 기본 개념

이벤트란?

"특정 상황이 발생했을 때 미리 연결해둔 메서드를 호출하는 구조"

👉 델리게이트 + 몇 가지 제약조건 = 이벤트!
  • 외부에서는 Invoke를 못 함
  • +=, -=로만 핸들러 추가/삭제 가능
  • 발생 주체가 통제권을 가짐

🛠️ 예제: 버튼 클릭 이벤트

public class Button
{
    public event Action Clicked;

    public void Click()
    {
        Console.WriteLine("버튼 눌림!");
        Clicked?.Invoke();
    }
}

Button button = new Button();
button.Clicked += () => Console.WriteLine("클릭 이벤트 핸들링!");
button.Click();
결과:
버튼 눌림!
클릭 이벤트 핸들링!

🎯 2-2. 델리게이트 vs 이벤트

항목 델리게이트 이벤트
호출 주체 누구나 호출 가능 선언한 클래스만 호출 가능
주 용도 메서드 저장/호출 상황 발생 알림
외부 접근 Invoke 가능 Invoke 불가능

---

🔥 3. 람다식 (Lambda Expression)


🎯 3-1. 람다식 기본 개념

람다식이란?

"메서드를 한 줄짜리 인라인 표현식으로 만드는 문법"
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // 25 출력
  • (x) => x * x
  • 매개변수 → 반환값
  • 메서드 따로 안 만들고 변수처럼 사용

🛠️ 예제: 람다식 + 리스트 필터링

List numbers = new List { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(x => x % 2 == 0);

foreach (var n in evenNumbers)
{
    Console.WriteLine(n); // 2, 4 출력
}
✅ 람다식은 짧고 간결한 코드에 필수다!

🎯 3-2. 델리게이트 + 람다식 콤보

Action greet = name => Console.WriteLine($"안녕, {name}!");
greet("장선생");  // 출력: 안녕, 장선생!
Action, Func 델리게이트를 람다식으로 간편하게 사용한다!

---

💥 장선생 실전 꿀팁

주제 꿀팁
델리게이트 기능을 느슨하게 연결하고 싶을 때
이벤트 외부에 상태 변화를 알릴 때
람다식 코드 간결화 + 동적 처리할 때
모두 합쳐서 비동기 프로그래밍, MVVM, 콜백 처리 필수

✅ 요약 정리

개념 핵심 요약
델리게이트 메서드를 변수처럼 저장하고 호출
이벤트 상황 발생시 연결된 메서드 실행 (덮어쓰기 ❌)
람다식 메서드를 간단히 표현하는 문법

🏁 마무리

이제 니는

"델리게이트", "이벤트", "람다" 이 세 개를
다 알게 된 진짜 C# 개발자다! 😎

📘 다음 챕터 예고 🎓

📘 Chapter 1.10: 예외 처리 완전정복 – try-catch, throw, 로깅까지!

프로그램은 무조건 예외 터진다!
우아하게 처리하는 법 배우자!!
728x90