Search

이것이 C#이다: 13장 - 대리자와 이벤트 (2/2)

본론

1. 익명 메소드(Anonymous Method)

1.1 개념과 활용

익명 메소드는 이름이 없는 메소드를 의미합니다. 주로 한 번만 사용되는 간단한 메소드를 구현할 때 유용합니다. 다음은 익명 메소드의 기본 예제입니다:
// 대리자 선언 public delegate void MyDelegate(string message); // 익명 메소드 사용 MyDelegate myDelegate = delegate(string message) { Console.WriteLine($"메시지: {message}"); }; // 호출 myDelegate("안녕하세요!");
C#
복사

1.2 사용 시점

익명 메소드는 다음과 같은 상황에서 특히 유용합니다:
1.
메소드가 일회성으로만 사용될 때
2.
코드가 간단하여 별도의 명명된 메소드로 분리할 필요가 없을 때
3.
콜백 함수를 즉석에서 구현해야 할 때

2. 이벤트(Event)

2.1 기본 개념

이벤트는 객체의 상태 변화나 특정 동작의 발생을 다른 객체에게 알리는 매커니즘입니다. 대리자를 기반으로 하지만, 더 제한된 형태로 동작합니다.

2.2 구현 단계

다음은 이벤트를 구현하는 기본적인 단계입니다:
// 1. 대리자 선언 public delegate void NotificationEventHandler(string message); public class NotificationManager { // 2. 이벤트 선언 public event NotificationEventHandler NotificationReceived; // 3. 이벤트 발생 메소드 public void SendNotification(string message) { // null 체크는 필수입니다! NotificationReceived?.Invoke(message); } } // 4. 이벤트 핸들러 구현 public class Program { static void Main() { NotificationManager manager = new NotificationManager(); // 5. 이벤트 핸들러 등록 manager.NotificationReceived += HandleNotification; // 이벤트 발생 manager.SendNotification("새로운 알림이 있습니다!"); } static void HandleNotification(string message) { Console.WriteLine($"알림 수신: {message}"); } }
C#
복사

2.3 주의사항

1.
이벤트 핸들러 등록 시 null 체크는 필수입니다.
2.
이벤트는 외부에서 직접 호출할 수 없습니다.
3.
이벤트 핸들러 미등록은 컴파일 에러를 발생시키지 않으므로 주의가 필요합니다.

3. 대리자와 이벤트의 차이점

이벤트는 대리자를 기반으로 하지만, 중요한 차이점이 있습니다:
public class Example { // 대리자 인스턴스 - 외부에서 직접 호출 가능 public Action<string> LogHandler; // 이벤트 - 클래스 내부에서만 발생 가능 public event Action<string> OnLog; }
C#
복사
핵심 차이점:
접근 제어: 이벤트는 클래스 외부에서 직접 호출 불가
용도: 대리자는 콜백용, 이벤트는 상태 변화 통지용
설계 의도: 이벤트는 게시-구독 패턴에 최적화

결론

대리자와 이벤트는 C#의 객체 지향 프로그래밍을 더욱 풍부하게 만드는 핵심 기능입니다. 특히 이벤트는 마이크로소프트가 의도한 견고한 이벤트 기반 프로그래밍을 가능하게 합니다.

참고 자료

박상현, "이것이 C#이다", 한빛미디어, 2023