0Pricing
C++ Academy · 강의

optional 값에 접근하기

value_or와 has_value 사용하기

optional 값에 접근하기은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

역참조 연산자

선택적 값을 읽는 가장 빠른 방법은 *opt이지만, 값이 있다고 확신할 때만 사용해야 하며 확인은 수행하지 않습니다.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 10;
    if (o) std::cout << *o << "\n";
}

value() 메서드

opt.value()는 값을 반환하지만 선택적 값이 비어 있으면 예외를 발생시킵니다 std::bad_optional_access. 빈 선택적 값이 실제 오류인 경우에 사용하십시오.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o;
    try { std::cout << o.value() << "\n"; }
    catch (const std::bad_optional_access&) { std::cout << "empty!\n"; }
}

기본값을 위한 value_or

opt.value_or(fallback)은 값이 있으면 포함된 값을 반환하고, 그렇지 않으면 대체값을 반환합니다. 분기도 예외도 필요하지 않습니다.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = std::nullopt;
    std::cout << o.value_or(-1) << "\n"; // -1
}

실제 데이터와 함께 사용하는 value_or

구성 값이나 조회 결과가 없을 때 기본값을 제공하는 것이 일반적인 사용 방법입니다.

#include <iostream>
#include <optional>
#include <string>
std::optional<std::string> lookup(bool found) {
    if (found) return std::string("Pro");
    return std::nullopt;
}
int main() {
    std::cout << lookup(false).value_or("Free") << "\n";
}

화살표 연산자

클래스 타입을 담는 선택적 값에서는 opt->member를 사용하여 멤버에 직접 접근할 수 있습니다(다시 말해 비어 있지 않다고 가정합니다).

#include <iostream>
#include <optional>
#include <string>
int main() {
    std::optional<std::string> o = std::string("hello");
    if (o) std::cout << o->size() << "\n";
}

접근 전에 확인하기

안전한 관용 방식은 확인한 다음 사용하는 것입니다. 확인과 접근을 함께 처리하면 예외와 정의되지 않은 동작을 모두 피할 수 있습니다.

#include <iostream>
#include <optional>
int main() {
    std::optional<int> o = 7;
    if (o.has_value()) {
        int x = *o;
        std::cout << x * 2 << "\n";
    }
}

if의 초기화 문

if 문의 초기화 문을 사용하면 한 줄에서 선언과 확인을 수행할 수 있으며, 선택적 값의 범위를 해당 분기 안으로 제한할 수 있습니다.

#include <iostream>
#include <optional>
std::optional<int> find() { return 3; }
int main() {
    if (auto v = find(); v.has_value())
        std::cout << *v << "\n";
}

변환(C++23)

transform과 같은 모나드 도우미는 값이 있을 때만 함수를 적용하고 새 선택적 값을 반환합니다. 이를 통해 계산을 깔끔하게 연결할 수 있습니다.

연결을 위한 and_then

and_then(C++23)은 그 자체로 선택적 값을 반환하는 함수를 호출하고 결과를 평탄화하므로, 각 단계가 실패할 수 있는 작업에 적합합니다.

접근 방식 선택하기

합리적인 기본값이 있으면 value_or를 사용하고, 비어 있는 상태가 예외를 발생시킬 만한 오류라면 value()를 사용하십시오. */->는 명시적으로 확인한 후에만 사용하십시오.

확인 없는 역참조 피하기

선택적 값이 비어 있지 않은지 확인하지 않고 *opt를 호출하지 마십시오. 이는 정의되지 않은 동작이며 충돌의 흔한 원인입니다.

빠른 확인

선택적 값에 접근하는 방법에 대한 이해를 확인해 보십시오.

복습

선택적 값에 접근하는 방법을 배웠습니다:

  • 확인한 후 *와 ->를 사용합니다.
  • 빈 상태에서 value()를 호출하면 예외가 발생합니다.
  • value_or는 기본값을 제공합니다.
  • 모나드 방식의 transform/and_then으로 연산을 연결합니다(C++23).

자주 묻는 질문

“optional 값에 접근하기” 강의는 무료인가요?

네 — “optional 값에 접근하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“optional 값에 접근하기”에서 뭘 배우나요?

value_or와 has_value 사용하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“optional 값에 접근하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. optional로 부재 표현하기
  2. optional 값에 접근하기
  3. std::expected 기초
  4. 오류 처리 패턴
← C++ Academy(으)로 돌아가기