🧠 먼저 알아야 할 핵심 개념 3가지
| 용어 |
쉽게 말하면 |
예시 |
| async |
"기다릴 수 있는 함수야!" 라고 표시하는 것 |
async Task MyFunc() { ... } |
| await |
"이 작업이 끝날 때까지 기다려줘!" |
await DownloadImage() |
| Task |
"나중에 결과가 나올 거야!" 라는 약속 |
Task<string>은 "나중에 string 줄게" |
✅ 1. bool 함수
- 그냥 즉시 true/false를 반환하는 함수
- 기다릴 필요 없음 (동기 함수)
🧩 예시:
bool IsEven(int number)
{
return number % 2 == 0;
}
- 2를 넣으면 바로 true, 3을 넣으면 false
- await 못 씀
✅ 2. async Task 함수
- "결과가 없는 비동기 작업" 할 때 사용해
- 예: 이미지 다운로드, DB 저장
🧩 예시:
async Task DownloadImage()
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture("http://image.png");
await www.SendWebRequest(); // 여기서 기다림
Debug.Log("다운 완료!");
}
- void처럼 결과가 없지만, 기다림이 필요해서 await로 호출할 수 있음
✅ 3. async Task<bool> 함수
- "true 또는 false를 나중에 줄게!"
- 예: 로그인 성공/실패, 이미지 유효성 확인 등
🧩 예시:
async Task<bool> CheckLogin(string email, string pw)
{
await Task.Delay(1000); // 로그인 처리 기다리는 중
return (email == "abc@test.com" && pw == "1234");
}
bool result = await CheckLogin("abc@test.com", "1234");
if (result)
Debug.Log("로그인 성공");
else
Debug.Log("실패");
✅ 4. ContinueWith vs await
| 항목 |
ContinueWith |
await |
| 문법 |
작업이 끝나면 그다음 실행 |
기다렸다가 아래 코드 실행 |
| 가독성 |
중첩돼서 복잡할 수 있음 |
순서대로 읽기 쉬움 |
| 사용 위치 |
Firebase에서 종종 사용됨 |
Unity에서도 많이 사용됨 |
🧩 ContinueWith 예시:
GetDataFromServer().ContinueWith(task => { Debug.Log("작업 끝! 결과: " + task.Result); });
🧩 await 버전:
var result = await GetDataFromServer(); Debug.Log("작업 끝! 결과: " + result);
💡 언제 어떤 걸 써야 할까?
상황추천 함수 형태이유
| 상황 |
추천 함수 형태 |
이유 |
| 단순 판단 (바로 true/false 리턴) |
bool |
기다릴 필요 없음 |
| 다운로드, 저장 등 시간이 걸리는 작업 |
async Task |
기다릴 필요 O, 결과 없음 |
| 성공/실패를 알고 싶은 비동기 작업 |
async Task<bool> |
기다리고 결과도 있어야 함 |
| 오래 걸리는 작업 뒤에 처리 연결 |
await, 가능하면 ContinueWith 대신 사용 |
코드가 깔끔하고 이해 쉬움 |
🎯 최종 요약 정리
| 함수 형태 |
의미 |
예시 |
사용법 |
| bool |
true/false 즉시 줌 |
IsEven(3) |
if (IsEven(3)) { ... } |
| async Task |
결과 없음, 기다림 필요 |
DownloadImage() |
await DownloadImage() |
| async Task<bool> |
결과 있음, 기다림 필요 |
CheckLogin() |
bool ok = await CheckLogin() |
🧠 기억 꿀팁
async와 함께 쓰는 리턴은 무조건 Task나 Task<T>만 된다!
그리고 bool을 쓰고 싶으면 Task<bool>로 써야 await할 수 있다!