위와 같이 아이템의 슬롯 인덱스로 해당 아이템을 찾는 기능을 수행하는 일은 빈번하다. 동작이 실패할 수 있는 함수를 호출할 때, 반환 타입이 Nullable하다면 (InventoryItem*) nullptr를 반환하면 된다.
그러나 반환값이 Value 타입이라면?
-
위와 같이 함수 수행의 결과물인 bool 값을 반환하고, 실제 반환값인 item은 참조 파라미터로 받아야만 한다.
-
Pair<bool, InventoryItem> 객체로 해당 함수 실행 결과물의 유효성을 반환한다.
-
반환값의 대상이 되는 객체가 스스로 Valid 하지 않음을 알려주는 함수를 지원하여 Nullptr 검사와 같이 isValid 함수를 콜하도록 한다.
std::optional은 이런 경우를 더 우아하게 처리할 수 있도록 도와준다.
위의 코드는 아래와 같이 쓸 수 있다.
std::optional<InventoryItem> 형태로 받은 반환 값 item은 if (item.has_value())나 if (item) 과 같이 유효성을 확인할 수 있다.
해당 값을 반환하는 쪽에서는 그냥 InventoryItem 타입으로 반환하기만 하면 optional<T>가 const T&&를 받는 생성자로 초기화 하여 값을 전달한다. 그렇지 않은 경우에는 return {}으로 빈 optional 객체를 반환하면 된다.
optional은 아래와 같은 경우에도 사용할 수 있다.
인자가 들어올 수도 있고 아닐 수도 있는 경우, default 값을 설정하여 해당 default 값이면 들어오지 않았다고 판단하는 경우가 있는데, 이런 경우에도 optional을 사용하여 명시적으로 의미를 전달할 수 있다.
'프로그래밍' 카테고리의 다른 글
[Python] Slack sdk를 이용해서 Slack 메시지 보내기 (0) | 2021.09.08 |
---|---|
Github for Android의 베타 버전이 나왔습니다. (0) | 2020.01.15 |