[C#] 콜백 함수
카테고리: C# + Unity
콜백 함수
콜백 함수(callback function)는 프로그래밍에서 특정 이벤트가 발생했을 때 호출되는 함수를 가리킨다. 콜백 함수는 다른 함수나 컴포넌트에 의해 호출되는 함수로서, 보통 이벤트 핸들러로 비동기적인 프로그래밍이나 이벤트 기반 프로그래밍에서 자주 사용된다.
- 이벤트 처리(Event Handling): 사용자가 버튼을 클릭하거나 다른 이벤트가 발생했을 때 특정 작업 수행
- 비동기 작업(Asynchronous Operations): 비동기 작업이 완료되었을 때 실행되는 함수를 콜백으로 등록하여 작업이 끝날 때까지 대기하지 않고 다른 작업 수행
- 타이머 및 인터벌(Timeouts and Intervals): 특정 시간 간격으로 실행되는 작업 수행
C#에서 콜백 함수는 델리게이트(delegate; 대리자)를 통해 구현된다. 델리게이트는 메서드나 메서드의 인스턴스를 참조하는 개체로, 이를 사용하여 함수를 매개 변수로 전달한다.
https://syudal.github.io/post/C-대리자와-delegate-Action-Func/
소스 코드
아래는 라이브러리에서 콘솔앱의 System.Console.WriteLine을 콜백하는 함수의 예제이다.
using System;
// 델리게이트 선언: 문자열을 입력으로 받고, 반환값이 없는 콜백 함수를 나타내는 델리게이트
public delegate void ConsoleWriteLineCallback(string message);
public class ConsoleCallbackLibrary {
// 콜백을 받을 델리게이트 변수
private static ConsoleWriteLineCallback callback;
// 콜백 함수를 등록하는 메서드
public static void RegisterCallback(ConsoleWriteLineCallback callbackFunction) {
callback = callbackFunction;
}
// 라이브러리 내에서 콘솔 출력을 수행하는 메서드
public static void PerformConsoleWriteLine(string message) {
// 등록된 콜백 함수가 있다면 호출
callback?.Invoke(message);
}
}
class Program {
static void Main() {
// 라이브러리에 콜백 등록
ConsoleCallbackLibrary.RegisterCallback(ConsoleWriteLineCallback);
// 라이브러리를 통해 콘솔 출력 수행
ConsoleCallbackLibrary.PerformConsoleWriteLine("Hello, Callback!");
Console.ReadKey();
}
// 실제로 호출될 콜백 함수
public static void ConsoleWriteLineCallback(string message) {
// System.Console.WriteLine 호출
Console.WriteLine(message);
}
}
이 예제에서 ConsoleCallbackLibrary 클래스가 라이브러리를 나타내며, 콜백을 등록하는 메서드 RegisterCallback과 콘솔 출력을 수행하는 메서드 PerformConsoleWriteLine이 정의되어 있다. 콜백 함수는 델리게이트로 받아 저장하고, 나중에 PerformConsoleWriteLine 메서드를 호출할 때 등록된 콜백 함수가 있다면 해당 함수를 호출한다.