티스토리 뷰
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
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리눅스
- PowerShell
- OpenSource
- DLL
- 윈도우
- Windows
- 블루버블다이브팀
- 외돌개
- Build
- 현포다이브
- Thread
- C# 고급 기술
- 스쿠버다이빙
- 성산블루버블
- C
- ip
- C#.NET
- 울릉도
- 암호화
- 패턴
- 블루버블다이빙팀
- C++
- Linux
- 서귀포
- 서귀포블루버블
- 제주도
- 블루버블
- ReFS
- CMake
- C#
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함