본론
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