개발/코더 탈출
Callback vs Fallback 차이와 예제
-=HaeJuK=-
2025. 4. 16. 10:36
728x90
반응형
Callback vs Fallback: 차이점과 예제
📌 Callback이란?
Callback은 특정 이벤트가 발생했을 때 호출되는 **사용자 정의 함수**입니다. 주로 비동기 처리, 이벤트 대응에 사용되며, 미리 등록해두면 이벤트 발생 시 자동 호출됩니다.
예: 일반 C++에서의 Callback
void OnDone() {
std::cout << "작업 완료!" << std::endl;
}
void DoTask(std::function<void()> callback) {
// 작업 수행
callback(); // 이게 바로 콜백
}
DoTask(OnDone);
예: 파일 필터 드라이버에서의 Callback
FLT_PREOP_CALLBACK_STATUS PreWriteCallback(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext)
{
// 파일 쓰기 전에 호출되는 콜백
DbgPrint("Write intercepted.\n");
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
📌 Fallback이란?
Fallback은 어떤 기능이나 처리가 실패했을 때 사용하는 **대체 처리 경로**입니다. 예외 처리, 장애 복구, 호환성 보장 등을 위해 필수적으로 사용됩니다.
예: 일반 코드에서의 Fallback
if (!TryPrimaryConnection()) {
std::cout << "기본 연결 실패, 대체 경로로 시도합니다." << std::endl;
TryFallbackConnection();
}
예: ReFS 필터 실패 시 Fallback (ETW)
if (!FltRegisterFilter(DriverObject, FilterRegistration, &gFilterHandle)) {
DbgPrint("FltRegisterFilter 실패 → ETW로 대체 감시 시작");
StartEtwFileMonitor(); // fallback 처리
}
✅ 비교 요약
항목 | Callback | Fallback |
---|---|---|
목적 | 이벤트 발생 시 함수 호출 | 실패 시 대체 처리 |
형태 | 함수 포인터, 람다, delegate | 조건 분기, 예외 흐름, try-catch |
드라이버 예시 | PreCreateCallback() |
필터 실패 시 ETW로 대체 |
주 사용 분야 | 비동기, 이벤트, 인터페이스 | 예외 처리, 장애 대비 |
✅ 결론
Callback은 어떤 일이 발생하면 실행되는 콜백 함수,
Fallback은 실패했을 때를 대비한 대체 경로입니다.
이름은 비슷하지만 목적과 동작 방식은 완전히 다릅니다.
728x90