티스토리 뷰

728x90
반응형
Callback vs Fallback 차이와 예제

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
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함