프로그래밍/C#

delegate

selinatsu 2024. 10. 12. 13:24
반응형

델리게이트 (delegate)

C#에서 델리게이트는 특정 메서드를 가리키고 그 메서드를 나중에 호출할 수 있는 "포인터" 같은 역할을 합니다. 델리게이트를 사용하면 메서드를 매개변수로 전달하거나, 여러 메서드를 하나의 호출 리스트로 묶어 실행할 수 있습니다.

특히 이벤트와 콜백(callback)과 같은 상황에서 많이 활용됩니다.

 

델리게이트의 기본 개념

델리게이트는 특정한 형식의 메서드를 참조할 수 있는 타입입니다.

예를 들어, 반환 타입이 void이고 인자가 없는 메서드를 참조하는 델리게이트를 정의하려면 다음과 같이 작성합니다.

 

public delegate void MyDelegate();

 

다음은 델리게이트를 선언하고 사용하는 간단한 예시입니다

 

 

델리게이트의 사용 예

델리게이트는 주로 콜백 메서드를 구현하거나, 메서드들을 동적으로 호출해야 할 때 사용됩니다. 예를 들어, 어떤 작업이 끝난 후 특정 작업을 실행해야 하는 경우(예: 파일 다운로드 후 알림 출력) 델리게이트를 통해 콜백을 설정할 수 있습니다.

using UnityEngine;

public delegate void Notify();

public class Process : MonoBehaviour
{
    public void StartProcess(Notify callback)
    {
        Debug.Log("작업을 수행 중입니다...");
        // 작업 수행 로직
        callback(); // 작업 완료 후 콜백 호출
    }
}

public class DelegateCallbackExample : MonoBehaviour
{
    void Start()
    {
        Process process = new Process();
        process.StartProcess(CompletionNotification);
    }

    void CompletionNotification()
    {
        Debug.Log("작업이 완료되었습니다!");
    }
}

 

위 코드에서 StartProcess 메서드는 Notify 델리게이트 타입의 콜백을 받아서 작업이 완료된 후 호출합니다. 이를 통해 코드 흐름을 유연하게 관리할 수 있습니다.

 

델리게이트와 이벤트

델리게이트는 이벤트(event)와 밀접한 관련이 있습니다. 이벤트는 특정 조건이 발생했을 때 알림을 보내는 메커니즘인데, 이를 구현할 때 델리게이트를 사용합니다. 예를 들어, 버튼을 클릭할 때 발생하는 이벤트를 처리하는 로직을 생각해볼 수 있습니다:

using UnityEngine;

public class Button : MonoBehaviour
{
    public delegate void ClickHandler();
    public event ClickHandler Click;

    public void OnClick()
    {
        if (Click != null)
        {
            Click();
        }
    }
}

public class ButtonExample : MonoBehaviour
{
    void Start()
    {
        Button button = new Button();
        button.Click += ButtonClicked;
        button.OnClick();
    }

    void ButtonClicked()
    {
        Debug.Log("버튼이 클릭되었습니다.");
    }
}

 

Click 이벤트는 ClickHandler 델리게이트를 사용하여 버튼이 클릭되었을 때 실행할 메서드를 지정합니다. button.OnClick()이 호출되면 Click 이벤트에 연결된 ButtonClicked 메서드가 실행됩니다.

 

델리게이트의 특징

메서드 참조

델리게이트는 메서드의 참조를 저장할 수 있습니다. 메서드를 변수처럼 다룰 수 있기 때문에 동적으로 메서드를 호출할 수 있습니다.

 

타입 안전성

델리게이트는 참조할 수 있는 메서드의 시그니처(매개변수와 반환 타입)를 미리 정의하므로, 타입 안전성을 보장합니다.

 

정리

델리게이트는 메서드를 참조하는 객체로, 메서드를 동적으로 호출하거나 콜백을 구현하는 데 사용됩니다.

멀티캐스트 델리게이트를 통해 여러 메서드를 한 번에 호출할 수 있습니다.

이벤트는 델리게이트를 활용하여 특정 상황에서 메서드를 호출하도록 만드는 메커니즘입니다.

델리게이트는 코드의 유연성을 높이고, 특히 이벤트 기반 프로그래밍에서 중요한 역할을 합니다. 이해하고 나면 메서드 호출을 더 유연하게 처리할 수 있는 강력한 도구임을 알 수 있을 것입니다.

 

 

 

반응형

'프로그래밍 > C#' 카테고리의 다른 글

Callback  (1) 2024.10.12
event 와 delegate  (0) 2024.10.12
Interface  (1) 2024.10.10
var 키워드  (0) 2024.10.08
이터레이터 메서드  (0) 2024.10.05