0Pricing
C++ Academy · 강의

예외 안전성

예외에 안전한 코드 작성하기

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

예외 안전성이란 무엇인가요

예외 안전성은 작업 도중 예외가 발생했을 때 코드가 어떤 보장을 유지하는지를 나타냅니다.

예외를 발생시키지 않는 보장

가장 강력한 수준으로, 작업이 절대 예외를 발생시키지 않는다는 보장입니다. 소멸자, 교환 및 이동 연산은 이를 목표로 하고 noexcept를 지정해야 합니다.

강한 보장

작업에서 예외가 발생하면 프로그램 상태가 작업을 시작하지 않은 것처럼 되돌아갑니다. 즉, 커밋 또는 롤백 의미론을 따릅니다.

기본 보장

작업에서 예외가 발생해도 자원이 누출되지 않고 모든 불변 조건이 유지됩니다. 다만 정확한 상태는 변경되었을 수 있습니다.

보장 없음

가장 약한 수준입니다. 예외로 인해 프로그램이 손상되거나 자원이 누출된 상태에 남을 수 있습니다. 이러한 코드는 작성하지 마십시오.

RAII가 제공하는 기본 보장

자원을 RAII 객체로 감싸면 스택 되감기 과정에서 자원이 자동으로 해제되므로 거의 아무런 비용 없이 기본 보장을 얻을 수 있습니다.

#include <memory>
#include <stdexcept>

void process() {
    auto buf = std::make_unique<int[]>(100);  // freed even if throw
    throw std::runtime_error("oops");          // no leak
}

강한 안전성을 위한 복사 후 교환

일반적인 기법은 위험할 수 있는 모든 작업을 복사본에서 수행한 다음 swap으로 적용하는 것입니다. 교환은 예외를 발생시키지 않으므로 변경이 전부 적용되거나 전혀 적용되지 않습니다.

void assign(Widget& target, const Widget& src) {
    Widget tmp = src;          // may throw, target untouched
    using std::swap;
    swap(target, tmp);         // no-throw commit
}

마지막에 커밋하도록 작업 순서 정하기

예외를 발생시킬 수 있는 모든 작업을 되돌릴 수 없는 변경보다 먼저 수행하십시오. 공유 상태를 변경하기 시작한 뒤에는 실패할 수 없어야 합니다.

부분 업데이트 주의하기

두 번째 작업에서 예외가 발생할 수 있는 상태로 두 멤버를 업데이트하면 객체가 일관되지 않게 됩니다. 두 값을 모두 준비한 다음 예외가 발생하지 않는 단계로 함께 커밋하십시오.

소멸자는 예외를 발생시키면 안 됩니다

되감기 중에 예외를 발생시키는 소멸자는 std::terminate를 호출합니다. 안전성 보장을 유지하려면 소멸자가 예외를 발생시키지 않게 하십시오.

보장 선택하기

가능하다면 강한 보장을 목표로 하고, 항상 최소한 기본 보장을 제공하며, 실제로 예외를 발생시키지 않는 작업에는 noexcept를 지정하십시오.

빠른 확인

예외 안전성에 대한 이해도를 테스트해 보십시오.

복습

예외 안전성의 네 가지 수준인 예외를 발생시키지 않는 보장, 강한 보장, 기본 보장, 보장 없음을 배웠습니다. RAII는 기본 보장을 자동으로 제공하고, 복사 후 교환과 마지막 커밋은 강한 보장을 제공합니다. 소멸자와 교환은 예외를 발생시키지 않게 하십시오.

자주 묻는 질문

“예외 안전성” 강의는 무료인가요?

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

“예외 안전성”에서 뭘 배우나요?

예외에 안전한 코드 작성하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“예외 안전성” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. try, catch, throw
  2. 예외 안전성
  3. noexcept 지정자
  4. 사용자 지정 예외 타입
← C++ Academy(으)로 돌아가기