-
대리자(Delegate)와 이벤트(Event) 처리C# 2023. 3. 8. 22:45
대리자(Delegate)
C#에서 대리자(Delegate)는 다른 메서드를 참조하는 데이터 형식입니다. 대리자는 메서드를 참조하기 위해 사용되며, 대리자가 참조하는 메서드를 대신 호출할 수 있습니다. 대리자는 이벤트 처리, 비동기 처리, 콜백 등과 같은 기능을 구현하는 데 매우 유용합니다.
예시 코드 :
// 예시 코드 // 대리자 선언 public delegate int Calculate(int x, int y); public class Calculator { // 더하기 메서드 public int Add(int x, int y) { return x + y; } // 빼기 메서드 public int Subtract(int x, int y) { return x - y; } } public class Program { static void Main(string[] args) { Calculator calculator = new Calculator(); // 더하기 메서드를 참조하는 대리자 생성 Calculate operation = new Calculate(calculator.Add); // 대리자를 사용하여 더하기 메서드 호출 int result = operation(5, 10); Console.WriteLine(result); } }
위 예시 코드에서는 대리자를 사용하여 더하기 메서드를 참조하고 호출하는 방법을 보여줍니다. 대리자는 더하기 메서드를 참조하기 위해 선언되고, 이 메서드를 대신 호출할 대리자를 생성합니다. 이러한 방법을 사용하여 대리자를 통해 메서드를 호출하면 메서드를 직접 호출하는 것보다 더욱 유연하게 동작할 수 있습니다.
이벤트(Event)
C#에서 이벤트(Event)는 객체 간의 상호 작용에서 발생하는 사건을 나타내는 기능입니다. 이벤트는 객체에서 발생하며, 이벤트를 처리하는 메서드를 이벤트 핸들러(Event Handler)라고 합니다. 이벤트 핸들러는 이벤트 발생 시 호출되어 처리합니다.
예시 코드 :
// 예시 코드 // 버튼 클래스 public class Button { // Click 이벤트 선언 public event EventHandler Click; // Click 이벤트 발생 시 호출되는 메서드 public void OnClick() { // 이벤트 핸들러 호출 Click?.Invoke(this, EventArgs.Empty); } } public class Program { static void Main(string[] args) { Button button = new Button(); // Click 이벤트에 대한 이벤트 핸들러 등록 button.Click += Button_Click; // Click 이벤트 발생 button.OnClick(); } // Click 이벤트를 처리하는 메서드 private static void Button_Click(object sender, EventArgs e) { Console.WriteLine("Button clicked"); } }
위 예시 코드에서는 이벤트 처리를 구현하는 방법을 보여줍니다. `Button` 클래스에서 `Click` 이벤트를 선언하고, `OnClick` 메서드에서 이벤트를 발생시킵니다. `Program` 클래스에서는 `Button_Click` 메서드를 이벤트 핸들러로 등록하고, `OnClick` 메서드에서 이벤트가 발생하면 이벤트 핸들러가 호출됩니다. 이러한 방식으로 이벤트를 처리하면 객체 간의 상호 작용에서 매우 유용하게 사용할 수 있습니다.
따라서, C#에서의 대리자와 이벤트 처리는 객체 간의 상호 작용에서 매우 중요한 기능을 수행합니다. 대리자를 사용하여 메서드를 참조하고 호출하는 기능과 이벤트를 사용하여 객체 간의 상호 작용을 구현할 수 있습니다. 이러한 기능을 적절하게 활용하여, 보다 다양하고 유연한 소프트웨어를 개발할 수 있습니다.'C#' 카테고리의 다른 글
C#의 컴포넌트 구조란? (0) 2023.03.13 단위 테스트(Unit Testing) 및 TDD(Test-Driven Development) (0) 2023.03.08 Call by reference(참조에 의한 호출)와 Call by value(값에 의한 호출) (0) 2023.03.07 얕은 복사 (Shallow Copy) 와 깊은 복사 (Deep Copy) (0) 2023.03.07 인터페이스(Interface)와 추상 클래스(Abstract class)의 차이 (0) 2023.03.05