PL 예외(6)
예외의 정의, 발생, 처리 방법과 예외 전파, 종료 모델, Python과 Java의 예외 처리 문법, 오류 메시지 생성 방법, 그리고 컴파일 시간에 이루어지는 예외 검사(검사 예외와 비검사 예외)에 대해 설명합니다.
예외 처리
예외(Exceptions) - 심각하지 않은 오류
필요한 예외 관련 구문 – 예외 정의, 예외 발생, 예외 처리
예외 전파 – 호출된 함수 내에서 발생된 예외는 그 함수 내에서 처리되지 않으면 역순
으로 호출자 함수에 전파
예외 처리 모델 – 재개 모델, 종료 모델
(예외 발생시킨 코드로 재개를 하느냐 안하느냐 차이)
- 보통 언어들은 종료 모델을 따르는중
Python 예외 문법(Java도 유사) – 종료 모델
- python : try, except, finally, raise
-
Java 차이점 : except -> catch, raise -> throw
- try문 중첩 == except(catch)문 연속 사용(연속이 더 깔끔)
오류 메시지
오류 메시지 만들기
- raise 예외이름(“음수 입력입니다.(오류메시지)”)
- raise를 통해 예외 강제 발생해서 테스트
- 예외이름으로 만든 예외 클래스에 str 메소드 구현
- raise를 통해 발생한 예외를 미리 만든 동일한 예외이름 클래스의 str 메소드로 반환해서 표현
예외 검사
예외 검사 – 예외처리 구문이 있는지 컴파일 시간
에 미리 검사하자라는 뜻
-
try-catch 문으로 처리될 수 있는가
를 검사 -
추가로 자바의 경우 메소드 헤더에
throws
로 선언되었는가로도 검사가 가능! -
검사 예외 – 예외가 발생 되면 처리될 수 있는지 컴파일러가
미리 검사
-
비검사 예외 – 예외 처리 여부를 컴파일러가
미리 검사하지 않는다
파이썬의 포괄적 예외 처리의 예시로 BaseException, Exception
이 많이 사용. 즉, 상위 쪽 계층.
Java의 포괄적 예외 처리 예시 : Exception클래스 자식 - 사용자 정의 예외 클래스, RuntimeException
- 사용자 정의 예외 클래스 (검사 예외)
- RuntimeException의 자식들… (비검사 예외)
- 즉, 실행시간중에 예외들을 의미
댓글남기기