JAVA :: 자바 문법 정리(11)
예외처리
프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이러한 결과를 초래하는
원인을 프로그램 에러 또는 오류라고 한다.
이를 발생시점에 따라 컴파일 에러와 런타임 에러로 나눌 수 있다.
✔️컴파일 에러 - 컴파일 시에 발생하는 에러
✔️런타임 에러 - 실행 시에 발생하는 에러
✔️논리적 에러 - 실행은 되지만, 의도와 다르게 동작하는 것
컴파일은 잘되었어도 실행 중에 에러에 의해서 잘못된 결과를 얻거나 프로그램이 비정상적으로 종료될 수 있다.
자바에서는 실행 시(runtime) 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception) 두 가지로 구분하였다.
에러는 메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverflowError)와 같이 일단 발생하면 복구할 수 없는 심각한 오류이고, 예외는 발생하더라도 수습될 수 있는 비교적 덜 심각한 것이다.
모든 예외의 최고 조상은 Exception 클래스이다.
예외 처리하기 - try-catch 문
✔️예외처리의 정의 - 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성하는 것
✔️예외처리의 목적 - 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것
에러와 예외는 모두 실행 시(runtime) 발생하는 오류이다.
발생한 예외를 처리하지 못하면, 프로그램은 비정상적으로 종료되며, 처리되지 못한 예외(uncaught exception)는 JVM 의 ‘예외처리기(UncaughtExceptionHandler)’가 받아서 예외의 원인을 화면에 출력한다.
예외를 처리하기 위해서는 try-catch 문을 사용한다. 하나의 try 블럭 다음에는 여러 종류의 예외를 처리할 수 있도록 하나 이상의 catch 블럭이 올 수 있으며, 이 중 발생한 예외의 종류와 일치하는 단 한 개의 catch 블럭만 수행된다.
try 블럭 또는 catch 블럭에 또 다른 try-catch 문이 포함될 수 있다. catch 블럭 내의 코드에서도 예외가 발생할 수 있기 때문이다. catch 블럭 내에 또 하나의 try-catch 문이 포함된 경우, 같은 이름의 참조변수를 사용해서는 안 된다.
정수는 0 으로 나누는 것이 금지되어 있지만, 실수를 0 으로 나누는 것은 금지되어있지 않으며 예외가 발생하지 않는다.
try 블럭에서 예외가 발생하면, 예외가 발생한 위치 이후에 있는 try 블럭의 문장들은 수행되지 않으므로, try 블럭에 포함시킬 코드의 범위를 잘 선택해야 한다.
예외가 발생한 문장이 try-catch 블럭부터 차례로 내려가면서 catch 블럭의 괄호()내에 선언된 참조변수의 종류와 생성된 예외클래스의 인스턴스에 instanceof 연산자를 이용해서 검사하게 되는데, 검사 결과가 true 인 catch 블럭을 만날 때까지 검사는 계속된다.
'Language > JAVA' 카테고리의 다른 글
JAVA :: 자바 문법 정리(13) (0) | 2023.05.02 |
---|---|
JAVA :: 자바 문법 정리(12) (0) | 2023.05.01 |
JAVA :: 자바 문법 정리(10) (0) | 2023.04.29 |
JAVA :: 자바 문법 정리(9) (0) | 2023.04.28 |
JAVA :: 자바 문법 정리(8) (0) | 2023.04.27 |
댓글