🔍 System.Action을 사용해야 하는 경우와 비동기 호출과의 차이점
System.Action은 매개변수를 가질 수 있지만 반환 값이 없는 델리게이트(delegate) 타입이야.
즉, 특정 메서드를 콜백(callback)으로 전달할 때 유용하게 사용돼.
1️⃣ System.Action을 사용해야 하는 경우
✅ 1. 콜백(callback) 함수로 사용
- 어떤 이벤트가 발생한 후 특정 동작을 실행해야 할 때
- 주로 UI 이벤트, 작업 완료 후 실행할 코드 등을 전달할 때 사용
void DoSomething(Action callback)
{
Console.WriteLine("작업 실행 중...");
callback?.Invoke(); // 콜백 실행
}
DoSomething(() => Console.WriteLine("작업 완료!"));
💡 Action을 이용해 함수 실행 후 콜백을 호출하는 방식
✅ 2. 매개변수로 동작(함수)을 전달할 때
- 특정 로직을 재사용하면서, 실행할 내용을 바꿀 때 유용
void ExecuteAction(Action action)
{
Console.WriteLine("동작 시작...");
action();
Console.WriteLine("동작 끝!");
}
ExecuteAction(() => Console.WriteLine("특정 동작 수행"));
💡 ExecuteAction은 동작을 실행할 뿐, 어떤 동작인지 알 필요 없음
💡 즉, 원하는 동작을 Action으로 전달하면 됨
✅ 3. 이벤트 핸들러와 함께 사용
- 특정 이벤트 발생 시 실행할 코드를 동적으로 할당할 수 있음
Action onClick;
void ButtonClick()
{
onClick?.Invoke(); // 등록된 이벤트 실행
}
onClick = () => Console.WriteLine("버튼 클릭됨!");
ButtonClick(); // 버튼 클릭됨!
💡 버튼 클릭 시 실행할 동작을 Action으로 등록해서 유연하게 관리 가능
2️⃣ 비동기 호출과 Action의 차이
Action을 사용하는 것과 비동기(Async/Await, Task) 방식을 사용하는 것은 차이가 있어.
비교 항목 Action (콜백) 비동기 호출 (Async/Await)
실행 방식 | 즉시 실행(동기) | 병렬로 실행(비동기) |
흐름 제어 | 함수가 실행되면 callback.Invoke()로 직접 실행 | await 키워드로 호출 후 결과 대기 |
주 사용 사례 | 이벤트, UI 처리, 콜백 함수 전달 | 네트워크 요청, 파일 I/O, 장시간 작업 |
✅ 콜백(Action) vs 비동기(Async/Await) 예제
1️⃣ Action을 이용한 콜백 방식
void DoSomething(Action callback)
{
Console.WriteLine("작업 실행 중...");
callback?.Invoke();
}
DoSomething(() => Console.WriteLine("콜백 실행됨!"));
💡 즉시 실행되므로 흐름을 블로킹(blocking)함
2️⃣ 비동기 Task를 이용한 방식
async Task DoSomethingAsync()
{
Console.WriteLine("작업 실행 중...");
await Task.Delay(2000); // 2초 대기 (비동기 작업)
Console.WriteLine("비동기 작업 완료!");
}
await DoSomethingAsync();
💡 비동기 작업이 진행되는 동안 다른 작업 수행 가능!
💡 콜백 기반 Action보다 가독성이 좋고 관리가 쉬움
3️⃣ Action과 Task의 혼합 사용
- 콜백 기반 코드도 비동기적으로 실행할 수 있음
- Action을 비동기 코드에서 활용 가능
async Task ExecuteAsync(Action callback)
{
Console.WriteLine("비동기 작업 실행 중...");
await Task.Delay(2000);
callback?.Invoke();
}
await ExecuteAsync(() => Console.WriteLine("비동기 작업 후 콜백 실행!"));
💡 비동기 작업 후 특정 동작을 실행해야 할 때 Action을 활용 가능
🎯 정리
- Action
- 즉시 실행되는 콜백을 전달할 때 사용
- 이벤트 핸들러, UI 이벤트 처리, 특정 작업 후 실행할 함수 전달에 유용
- 흐름 제어가 단순하지만, 비동기 작업에는 적합하지 않음
- 비동기(Async/Await, Task)
- 네트워크 요청, 파일 I/O, 장시간 작업에서 흐름을 블로킹하지 않도록 사용
- await을 통해 흐름을 자연스럽게 유지 가능
- Action vs 비동기
- 즉시 실행이 필요하면 Action
- 병렬 실행이 필요하면 Task
- 둘을 혼합하여 비동기 작업 후 콜백을 실행할 수도 있음
즉, 비동기로 처리할 필요가 없는 경우엔 Action을 사용하면 깔끔하고, 비동기가 필요하면 Task를 활용하면 된다! 🚀
'유니티' 카테고리의 다른 글
노래 AI (1) | 2025.02.18 |
---|---|
비동기와 대리자의 차이 (0) | 2025.02.18 |
C# string 주요기능 (0) | 2025.02.17 |
[UNITY] Mathf 주요 기능 정리 (Unity 수학 라이브러리) (0) | 2025.02.17 |
unity TryParse, Parse (0) | 2025.02.17 |