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
'C#' 카테고리의 다른 글
C# 기초부터 고급까지 Chapter 2.1.1. SRP (Single Responsibility Principle) – 단일 책임 원칙 (0) | 2025.04.27 |
---|---|
C# 기초부터 고급까지 Chapter 1.10. 예외 처리 완전정복 (2) | 2025.04.27 |
C# 기초부터 고급까지 Chapter 1.8. 상속, 다형성, 캡슐화 – OOP 3대장 완전 이해하기 (1) | 2025.04.25 |
C# 기초부터 고급까지 Chapter 1.7. static vs instance 완전정복 (0) | 2025.04.25 |
C# 기초부터 고급까지 Chapter 1.6 클래스와 구조체 완전 정복 + 1.6.1. 접근 제한자 완전 정복 (0) | 2025.04.25 |