대리자(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 |