C++ variant, 상속 없이 다형성 흉내 내기 (실무 후기)

지난번 std::optional에 이어, 오늘은 C++17의 또 다른 강력한 무기인 std::variant에 대해 이야기해 보려고 한다. optional이 '값이 있거나 없거나'의 두 가지 상태를 다뤘다면, variant는 한 걸음 더 나아가 여러 가지 정해진 타입 중 하나가 될 수 있는 상태를 우아하게 처리한다.예전엔 우리 어떻게 했더라? (feat. 공용체와 보이드 포인터)하나의 변수가 여러 타입 중 하나를 가져야 하는 상황. 생각보다 흔하다. 네트워크 메시지는 '인증 요청'일 수도, '데이터 전송'일 수도 있다. UI 이벤트는 '마우스 클릭'일 수도, '키보드 입력'일 수도 있다. 이런 걸 처리하기 위해 예전에는 보통 이런 방법을 썼다.union과 enum의 조합: C 스타일의 전통적인 방식. un..

썸네일

C++ optional, '널 포인터'와 작별하는 가장 우아한 방법 (실무 후기)

오랜만에 C++ 관련 글을 쓰는 것 같다. 오늘은 C++17에 등장한 이후로 나의 '최애' 기능 중 하나가 된 std::optional에 대해 이야기해 보려고 한다. 특히 현업에서 골치 아팠던 문제를 optional이 얼마나 우아하게 해결해 줬는지, 실제 경험을 바탕으로 풀어볼까 한다.예전엔 우리 어떻게 했더라? (feat. 널 포인터와 마법의 숫자)함수에서 '값이 없음' 또는 '실패'를 어떻게 표현했는지 돌이켜보자. 아마 대부분 비슷할 것이다.포인터를 반환하며, 실패 시 nullptr 반환: 가장 흔한 방식. 하지만 호출하는 쪽에서 잊지 않고 꼭 널 체크를 해줘야만 한다. 이걸 깜빡하면? 바로 런타임 에러와 함께 프로그램이 뻗어버린다. (그리고 이런 버그는 꼭 새벽에 터진다...)'마법의 숫자'나 특정..

썸네일