C++에서 예외 처리의 기본 개념은?
_____A1: 예외 처리는 프로그램 실행 중 발생할 수 있는 오류나 비정상 상황(예외)을 감지하여, 프로그램의 비정상 종료를 방지하고 적절히 대응하도록 하는 메커니즘입니다.
Q2: C++에서 예외 처리 문법의 기본 구성 요소는 무엇인가요?
A2: 기본 구성 요소는 다음과 같습니다:
- try 블록: 예외가 발생할 수 있는 코드를 감싸는 블록
- throw 문: 예외가 발생했을 때 예외 객체를 던지는 표현
- catch 블록: 던져진 예외를 받아 처리하는 블록
Q3: try-catch 문은 어떻게 동작하나요?
A3: try 블록 내에서 예외가 발생하면 throw 문으로 예외 객체를 던집니다. 던져진 예외는 연속된 catch 블록들 중 타입에 맞는 첫 번째 블록으로 전달되어 처리됩니다. 처리 후, try-catch 문을 벗어나 프로그램이 계속 실행됩니다.
Q4: throw 문은 어떤 역할을 하나요?
A4: throw 문은 예외 상황이 발생했음을 알리고 예외 객체를 호출 스택 위로 전달합니다. 이를 통해 예외 처리를 담당하는 catch 블록으로 예외를 전달합니다.
Q5: catch 블록에서 파라미터는 어떤 의미인가요?
A5: catch 뒤의 괄호 안에는 예외 객체의 타입과 이름이 옵니다. 이 타입은 처리할 예외 객체의 타입과 매칭되어야 하며, catch 블록 내에서 예외와 관련된 정보를 사용할 수 있게 해줍니다.
A6: 예외 처리를 하지 않을 경우, 오류 발생 시 프로그램이 즉시 비정상 종료될 수 있고, 적절히 오류를 복구하거나 사용자에게 알리기 어렵습니다.
Q7: 모든 오류를 예외로 처리해야 하나요?
A7: 반드시 그런 것은 아닙니다. 예외 처리는 복구가 어렵고 예외 상황에 적합한 복잡한 오류에 주로 사용하며, 단순한 오류는 일반 반환값이나 오류 코드를 통해 처리하기도 합니다.
Q8: 예외 처리 시 주의할 점은 무엇인가요?
A8: 일부 주의사항은 다음과 같습니다:
- 예외를 잘못 처리하면 프로그램 상태가 불안정해질 수 있음
- 예외 안전성을 고려한 코딩 필요
- 예외 발생 비용이 있으므로 성능에 민감한 곳에서는 신중 사용
- 모든 예외 상황에 대해 catch하지 않으면 std::terminate가 호출되어 프로그램이 종료됨
Q9: 사용자 정의 예외 클래스를 만들 수 있나요?
A9: 네, std::exception을 상속받아 사용자 정의 예외 클래스를 만들고, 메시지나 기타 정보들을 추가할 수 있습니다. 이를 통해 더 세밀한 예외 처리가 가능합니다.
Q10: C++11 이후로 추가된 예외 처리 관련 기능은 어떤 것이 있나요?
A10: C++11에서는 noexcept 키워드를 도입해 함수가 예외를 던지지 않음을 명시할 수 있으며, 이는 최적화에 도움을 줍니다. 또한 std::exception_ptr과 std::rethrow_exception 등을 통해 예외 객체를 저장하고 다시 던질 수 있습니다.
작성자:
정재훈 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:28
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.