-
오류 (error) 와 예외 (exception)
오류
시스템 레벨에서 프로그램에 심각한 문제를 일으키며 실행 중인 프로그램을 종료시킨다.
이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없다.
예외
오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만 발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.
=> 예외적인 상황을 대비하여 미리 안전장치를 하는 것
예외 처리 (exception handling)
예외 처리를 위해 try / catch / finally 문을 사용.
try { 예외를 처리하길 원하는 실행 코드; } catch (e1) { e1 예외가 발생할 경우에 실행될 코드; } catch (e2) { e2 예외가 발생할 경우에 실행될 코드; } ... finally { 예외 발생 여부와 상관없이 무조건 실행될 코드; }
1. try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 catch 블록에서 처리된다.
=> 예외 발생 가능성이 있는 문장
2. catch : try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당한다.
+ 예외가 발생하면 처리할 문장. 매개변수로는 예외의 종류를 둘 수 있다.
catch 블록에 아무런 내용을 작성해주지 않으면, 어디서 오류가 발생했는지 파악하기가 어려워
특수한 상황이 아니라면 항상 로그를 남기도록 하자.
3. finally : 이 블록은 try 블록에서 예외가 발생하건 안 하건 맨 마지막에 무조건 실행된다.
catch 블록과 finally 블록은 선택적인 옵션으로 반드시 사용할 필요는 없다.
1. try / catch 2. try / finally 3. try / catch / ... / finally
이와 같이 사용하는게 적합하다.
예외 처리 메커니즘
1. try 에 도달한 프로그램의 제어는 try 블록 내의 코드를 실행.
이때 만약 예외가 발생하지 않고 finally 블록이 존재하면 프로그램의 제어는 바로 finally 블록으로 이동한다.
2. try 블록에서 예외가 발생하면 catch 핸들러는 다음과 같은 순서로 적절한 catch 블록을 찾게 된다.
2 - 1 스택에서 try 블록과 가장 가까운 catch 블록부터 차례대로 검사.
2 - 2 만약 적절한 catch 블록을 찾지 못하면 바로 다음 바깥쪽 try 블록 다음에 위치한 catch 블록을 차례대로 검사.
2 - 3 이러한 과정을 가장 바깥쪽 try 블록까지 계속 검사
2 - 4 그래도 적절한 catch 블록을 찾지 못하면, 예외는 처리 X.
예외를 발생시키는 throw 와 예외를 떠넘기는 throws
예외를 강제적으로 발생 => 예외를 떠넘김
throw : 예외 발생 => 예외 클래스 객체를 만들어주고 throw 로 예외를 강제적으로 발생시킴.
throws : 예외를 떠넘김 => 어떠한 메소드를 호출할 떄 그 메소드가 throws 키워드로 정의가 되어 있으면
해당 메소드는 호출한 곳에서 강제적으로 예외를 처리해주어야됨.
선언부를 보고 어떤 예외가 발생했는지도 알 수 있음.
'[Java]' 카테고리의 다른 글
[Java] 인터페이스 (0) 2023.10.26 [JAVA] 매개 변수의 수를 모를 때 (4) 2023.07.03 this 와 this() 의 용도 (6) 2023.05.21