c23 [C++] 예외처리
본문 바로가기
[C++]

[C++] 예외처리

by Jarvis2304 2022. 12. 10.

▶ 오류의 종류

▷컴파일 오류

- 문법에 맞지 않은 구문으로 인한 오류

 

▷실행 오류

● 개발자의 논리 오류

- 잘못 설정된 조건문 때문에 엉뚱한 코드 실행한 경우

 예외적으로 발생하는 입력이나 상황에 대한 대체가 없을 때 발생하는 오류

- 프로그램 논리는 정확히 작성되었지만, 오류를 유발할 수 있는 예측 못한 입력이나 예외적인 데이터의 발생을 탐지하는 코드가 작성되어 있지 않는 경우

ex) 정수 입력을 기다리는데 사용자가 문자를 입력한 경우

→ 실행 오류의 결과

- 결과가 틀리거나 엉뚱한 코드 실행, 프로그램 비정상 종료

 

 

 

예제 1) 예외 상황에 대한 대체가 없는 프로그램

 

 

예제 2)  if문과 리턴 값을 이용한 오류 처리

 

예제 3) 리턴 값을 참조 매개변수를 이용한 오류 처리

 

 

 

 

▶ 예외

- 실행 중, 프로그램 오동작이나 결과에 영향을 미치는 예상치 못한 상황 발생

ex) 예제2에서 getExp() 함수가 예상치 못하게 사용자가 음수를 입력하면 2^-3을 -1로 계산한 경우

 

 

▷ 예외 처리기

- 예외 발생을 탐지하고 예외를 처리하는 코드

- 잘못된 결과, 비정상적인 실행, 시스템에 의한 강제 종료를 막음

 

▷ 예외 처리 수준

● 운영체제 수준 예외 처리

- 운영체제가 예외의 발생을 탐지하여 응용프로그램에게 알려주어 예외에 대처하게 하는 방식

- 운영체제마다 서로 다르므로, 운영체제나 컴파일러 별로 예외 처리 라이브러리로 작성

- Java 경우, JVM 혹은 라이브러리에서 탐지한 예외를 자바응용프로그램에게 전달

- 윈도우 운영체제는 탐지한 예외를 C/C++ 응용프로그램에게 알려줌 (운영체제와 컴파일러 의존적인 C++ 문법 사용)

 

● 응용프로그램 수준 예외 처리

- 사용자의 잘못된 입력이나 없는 파일을 여는 등 응용프로그램 수준에서 발생하는 예외를 자체적으로 탐지하고 처리하는 방법

- C++ 예외 처리

 

 

 

▶ C++ 예외처리

▷ C++ 예외 처리 기본형식, try-throw-catch

 ● try { } 블록

- 예외가 발생할 가능성이 있는 코드를 묶음

● throw 문

- 발견된 예외를 처리하기 위해, 예외 발생을 알리는문장

- try{ }블록 내에서 이루어져야 함

● catch{ } 블록

- throw에 의해 발생한 예외를 처리하는 코드

 

 

 

▷ throw와 catch

- throw문으로 던지는예외는 catch{ } 블록에 의해 처리됨

- throw는 정수, 문자, 문자열, 실수, 객체 등 다양한 타입의 예외 값을 던질 수 있다

 

 

▷ try-throw-catch의 예외 처리 과정

 

예제) 0으로 나누는 예외 처리

 

 

 

 

 

▷ throw와 catch의 예

● 하나의 try { } 블록에 다수의 catch() { } 블록 연결

 

 

● 함수를 포함하는 try{ }블록

 

예제)  지수 승 계산을 예외 처리 코드로 재작성 (완결판)

 

예제) 문자열을 정수로 변환하기

 

 

 

▷ 예외를 발생시키는 함수의 선언

- 함수 원형에 연이어 throw(예외 타입, 예외 타입, ...) 선언

- 프로그램의 작동을 명확히 함

- 프로그램을 가독성 높임

 

 

예제) 예외 처리를 가진 스택 클래스 만들기

 

'[C++]' 카테고리의 다른 글

[C++] 파일 입출력  (0) 2022.12.10
[C++] STL (표준 템플릿 라이브러리)  (0) 2022.11.30
[C++] 템플릿  (0) 2022.11.23
[C++] 가상함수와 추상 클래스 (다형성)  (0) 2022.11.17
[C++] 상속  (0) 2022.11.08

댓글