1. 문제 상황
프로젝트를 진행하다 보면 "데이터 오류"나 "이전 단계를 완료하세요" 같은 반복적인 팝업 메시지를 띄워야 할 때가 많다.
보통은 아래와 같이 쓴다.
AlertDialog dialog(
_pocket->GetVtkWidget(),
"Data Error",
"Please complete the previous step before proceeding",
DialogState::DIALOG_FAILURE,
ButtonState::BUTTON_OK
);
dialog.setModal(true);
dialog.exec();
이런 코드가 여러 군데 흩어져 있으면 유지보수가 불편하고, 메시지 하나 바꾸려 해도 모든 곳을 수정해야 한다.
2. 해결 : 람다 함수로 캡슐화
C++11 이상에서는 람다(lambda) 함수를 사용해 이런 로직을 간단히 묶어둘 수 있다.
auto showDataError = [&](const std::string& message) {
AlertDialog dialog(
_pocket->GetVtkWidget(),
"Data Error",
QString::fromStdString(message),
DialogState::DIALOG_FAILURE,
ButtonState::BUTTON_OK
);
dialog.setModal(true);
dialog.exec();
};
이제 에러를 띄우고 싶을 때는 단 한줄이면 끝!
if (marginIndex.empty()) {
showDataError("Please complete the previous step before proceeding");
return;
}
3. 장점
- 중복 제거 - AlertDialog 생성 로직이 한 곳에만 존재
- 가독성 향상 - 메인 로직이 깔끔해짐
- 유지보수 용이 - 메시지 형식, 아이콘 변경 시 한 곳만 수정
- 캡쳐 기능 덕분에 유연함 - [&]를 통해 외부 객체(_pocket) 접근 가능