Language/C C++

[C++]optional

덴마크초코우유 2018. 12. 6. 16:55
반응형
[C++]optional

[C++]optional

C++17의 표준으로 optional이 도입되었다. 이전에 자바 스프링 개발을 할 때도 본적이 있었는데 C++에서 보니 반갑다. 자바는 jdk1.8부터 optional 지원이 된것으로 알고있다. 그러면 이 optional은 무엇일까?

함수를 작성하는 예시를 들어보자. 두 INT값을 나누어 결과를 반환하는 함수를 작성하려고 한다.

만일 이 함수에 인자 b에 0이 주어진다면 exception이 발생할 것이다. 따라서 b == 0일 경우 실패했다는 결과값을 반환해야 한다.

여기서 작성한 함수의 반환값은 double이기 때문에 실패라는 결과를 알 수 있는 방법이 없다. 함수의 성공 여부를 확인하기 위해 다음과 같은 방법들을 생각해볼 수 있다.

  • 인자에 double*형을 받아 결과값을 보낸다.
  • 예외를 throw한다.
  • 반환값을 pair<double, bool>식으로 처리한다.

위 방법들보다 간소하게 처리할 수 있는 방법이 optional이다. optional은 결과값과 성공 여부를 모두 담을 수 있다. 이를통해 반환값으로 함수의 실패 여부까지 처리할 수 있다. optional에서 사용할 수 있는 내부함수 두 가지가 있다.

  • value : 결과 값을 반환한다.
  • value_or(T value) : 성공하면 결과 값을 반한하고, 아닐경우 해당값을 반환한다.

이것을 통해 실패시 적절한 처리를 할 수 있다.

반응형