기본 개념
Exception
하드웨어 또는 소프트웨어에서 감지될 수 있는 비정상적인 이벤트.
에러일 수도 있고 에러가 아닐 수도 있다.
보통 특별한 처리가 필요할 수 있다.
Exception handling
예외가 감지된 후에 필요한 특별한 처리
Exception handling을 해주는 code unit(코드 단위)은 exception handler라고 부른다.
예외 Exception
예외(상황)란?
- 심각하지 않은 오류 혹은 비정상적 상황
- 예외 발생 시 계속 수행할 수 있도록 처리해야 함
- 발생된 예외를 처리하지 못하면 프로그램 종료
예외에 대한 적절한 처리
- 안전한 프로그램 실행을 위해 매우 중요
- C++, Java, Python 등 최신 언어들은 예외 관련 기능을 제공함
-> Reliability가 아니라 Readability가 높다. C는 try-catch를 지원하지는 않지만, 예외 처리를 할 수는 있음
필요한 예외 관련 구문
- 예외 정의
- 예외 발생
- 예외 처리
재개 모델 resumption model
- 예외가 발생하면 예외 처리 후 예외를 발생시킨 코드로 재개하여 계속 실행
- 즉 (1) 지점에서 예외가 발생했을 때 (1) -> (3) -> (2) 순으로 실행
종료 모델 termination model -> 일반적인 모델
- 예외가 발생하면 예외 처리 후 예외를 발생시킨 코드로 재개하지 않고
- try 문을 끝내고 다음 문장을 실행. 즉 (1) -> (3) -> (4) 순으로 실행
Exception Handling
예외 처리 기능이 없는 언어
Reliability가 낮다.
예외가 발생하면 제어는 OS로 이동하고 메시지가 표시되며 프로그램이 종료된다.
예외 처리 기능이 있는 언어
프로그램은 몇 가지 예외를 허용하고 문제를 해결하고 계속 진행할 가능성을 제공한다.
Exception Handling의 대안
예외는 관련된 이벤트가 발생할 때 raise된다.
예외 처리 기능이 없는 언어도 (사용자 정의된, 소프트웨어가 감지한) 예외를 정의, 감지, 발생, 처리할 수 있다.
대안
- 보조 매개변수(auxiliary parameter)를 전송하거나 서브 프로그램의 리턴 상태를 알리기 위해 리턴 값을 이용한다.
- 모든 서브 프로그램에 레이블 매개변수를 전달한다. (오류 반환은 전달된 레이블로 이루어진다.)
- 예외 처리를 하는 서브 프로그램을 모든 서브 프로그램에 전달한다.
Built-in Exception Handling의 장점
예외 감지 코드는 작성하기 번거롭고 프로그램을 혼란스럽게 만들 수 있다.
예외 처리는 프로그래머들이 다양한 가능한 오류들을 고려하도록 한다.
Exception Propagation은 예외 처리 코드의 높은 수준의 재사용을 허락한다.
A->B->C->D 의 구조에서 D의 try-catch에서 에러가 감지되지 않았다면
dynamic link를 따라 C에서도 감지를 요청하고 B->A->Main으로 이어진다.
'Programming Languages [PL]' 카테고리의 다른 글
[PL] 11. Support for Object-Oriented Programming (1) | 2024.01.10 |
---|---|
[PL] 10. Abstract Data Types and Encapsulation Constructs (0) | 2024.01.10 |
[PL] 09. Implementing Subprograms (1) | 2024.01.10 |
[PL] 08. Subprograms (0) | 2024.01.10 |
[PL] 07. Statement-Level Control Structures (0) | 2024.01.10 |