오류와 예외
- 오류 (error)
- 시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시키는 것
- 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이라서 오류에 대한 처리는 할 수 없다.
- 예외 (exception)
- 오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시킨다.
- 발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.
- 개발자는 예외 처리(exception handling)를 통해 예외 상황을 처리할 수 있도록 코드의 흐름을 바꿀 필요가 있다.
예외 처리
- try 블록
- 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 on 블록에서 처리된다.
- 필수적으로 사용
- 1번만 선언할 수 있다.
- on 블록
- try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당한다.
- 선택적으로 사용
- 여러 번 선언할 수 있다.
- 예외가 발생하면, try 블록과 가장 가까운 on 블록부터 순서대로 검사한다. (★)
- catch 블록
- 발생한 예외에 대한 정보를 다룬다.
- 예외 핸들러가 예외 객체를 필요로 할 때 사용한다.
- 2가지 매개변수를 다룬다.
- 첫번째 매개변수
- 발생될 예외
- 두번째 매개변수
- StackTrace 객체
- 첫번째 매개변수
- on 블록과 함께 사용할 수 있다.
- finally 블록
- 이 블록은 try 블록에서 예외가 발생하건 안 하건 맨 마지막에 무조건 실행된다.
- 선택적으로 사용
- 1번만 선언할 수 있다.
on/try/finally 블록 중 1개는 있어야 한다.
사용 방법
예외 제어
throw 키워드
- 해당 예외를 강제로 발생시킨다.
※1
Exception: 예외 강제 발생
※2
Exception: 예외 강제 발생
at Object.wrapException (:427:43) at main ( :2813:17) at :3364:7 at :3347:7 at dartProgram ( :3358:5) at :3366:3 at replaceJavaScript (https://dartpad.dev/scripts/frame.js:19:19) at messageHandler (https://dartpad.dev/scripts/frame.js:100:13)
rethrow 키워드
- 발생한 예외에 대해서 전파하는 키워드
- 사용 예시
디버깅 함수
- 조건식을 통해서 디버깅을 진행한다.
- 조건식의 결과가 false일 경우 예외를 발생시킨다.
- AssertionError
- 두번째 인자에 메시지를 넣으면 조건식의 결과가 false일때 해당 메시지가 출력된다.