inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

84

김현우

작성한 질문수 22

1

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

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

c++

답변 2

0

durams

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

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

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

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

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

0

인프런 AI 인턴

안녕하세요, 인프런 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++ 예외 처리 문서를 참조할 수 있습니다.

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

교재 있나요?

1

127

2

11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)

1

85

3

using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다

1

98

2

cstr직접구현

0

111

3

BubbleSort

1

75

2

숙제 마지막 부분

1

76

2

강의와 똑같이 진행했는데 링킹 에러가 발생합니다.

1

90

2

수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??

1

158

2

공변반환형 관련 문의 드립니다.

1

88

2

170강 유니크 포인터에대해 질문있습니다

1

78

1

섹션 5 퀴즈의 답이 이상합니다

1

82

2

이중포인터와 배열이 이해가 안됩니다.

1

151

2

5분 17~5분 34초 객체 잘림 질문

1

74

1

Resource.h 코드 알려주세요

1

70

1

char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다

1

93

2

화면좌측 숫자 보이기

1

111

1

화면 좌측 숫자 보이기

0

65

1

처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??

1

134

3

46강 string 버퍼 질문입니다

1

79

2

프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.

1

122

2

Lecture 클래스 멤버변수 명명 관련

0

85

2

프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요

0

67

1

noexcept과 throw()

1

78

2

explicit instantiation에 대해

1

60

2