강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

김현우님의 프로필 이미지
김현우

작성한 질문수

홍정모의 따라하며 배우는 C++

9.6 첨자 연산자 오버로딩 하기

[] 범위 검사시 assert 사용 관련 질문

작성

·

43

1

assert는 디버그 모드에서만 작동하는데

실제 상용화 된 프로그램 등에서 사용자의 입력이 오류가 난다면 이땐 핸들링이 안되고 그냥 프로그램이 퍼져버리는거 아닌가요??
이때는 어떤식으로 처리해야할까요

답변 2

0

안녕하세요? 질문&답변 도우미 durams입니다.

말씀하신대로 assert는 거의 개발/디버깅 시에만 사용합니다. 하지만 그렇다고 해서 상용 소프트웨어에서의 대비책이 없는 것은 아닙니다.

상용 소프트웨어는 사용 중 문제가 발생한다고 해서 갑자기 꺼져버리는(crash) 일이 되도록이면 없어야합니다. 그렇기 때문에 개발자가 가능한 모든 케이스에 대해 적절하게 대응하도록 구현해야하며, 필요하다면 오류로그를 기록하거나, 때로는 복구를 시도하는 등의 방법을 선택할 수 있습니다. 그리고 각 전략의 오버헤드도 각각 다르기 때문에, 프로그램의 성능이 얼마나 중요한지에 따라 다른 전략을 사용할 수 있습니다.

심지어 프로그램이 결국 크래시되더라도, 선택에 따라 관련 정보가 담긴 리포트를 개발사로 보내는 등의 동작을 통해 대응이 이루어집니다.

참고로, C++의 std::exception은 비용이 커 성능이 중요시되는 곳에서는 쓰이지 않는 것으로 알고 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김현우님.

assert 함수는 주로 디버깅 시에만 작동하며, 릴리즈(상용화) 버전에서는 비활성화되는 특성이 있습니다. 따라서 상용 프로그램에서 사용자의 입력 오류를 안전하게 처리하려면 assert 대신 예외 처리나 오류 검사를 고려하는 것이 좋습니다.

예외 처리(Exception Handling)

C++에서는 예외 처리를 통해 안전하게 오류를 관리할 수 있습니다. 예외 처리 구문인 try, catch를 사용하여 예상치 못한 입력 오류를 처리할 수 있습니다. 예를 들어:

#include <iostream>
#include <stdexcept>

int divide(int a, int b) {
    if (b == 0) {
        throw std::invalid_argument("Divisor cannot be zero.");
    }
    return a / b;
}

int main() {
    try {
        int result = divide(10, 0);
        std::cout << "Result is " << result << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }
    return 0;
}

조건문을 통한 오류 검사

단순한 오류 처리는 조건문을 통해 예외 상황을 관리할 수 있습니다. 사용자의 입력을 받기 전에 조건문을 사용하여 입력의 유효성을 검사합니다.

이러한 방법들을 활용하여 사용자의 오류 입력에 대해 프로그램이 비정상적으로 종료되지 않도록 할 수 있습니다.

관련 질문으로 직접적인 예시가 제공된 링크는 없습니다만, 예외 처리에 대한 추가 설명과 예제를 보실 수 있는 리소스를 추천해 드리고 싶습니다. C++ 예외 처리 문서를 참조할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김현우님의 프로필 이미지
김현우

작성한 질문수

질문하기