개발도생's Blog
[12Days] Study_Exception 본문
프로그램을 작성할 때 문법에 맞지 않게 코드를 작성할 때 발생하는 문법 오류(Syntax Error),
문법에 맞게 작성이 된 프로그램이 예상하지 못한 오류가 발생해서 동작이 강제로 종료가 되는 경우가 있다.
예상하지 못한 상황이 발생하여 프로그램에 영향이 미치는 것을
'오류(Error)'와 '예외(Exception)' 두 가지로 구분이 가능하다.
오류(Error)는,
시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료시킨다.
오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없다.
예외(Exception)는,
오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만,
발생할 수 있는 상황을 미리 예측하여 처리할 수 있다.
따라서 개발자는 예외 처리(exception handling)를 통해 예외 상황을 처리할 수 있도록
코드의 흐름을 바꿀 필요가 있다.
예외 처리(exception handling)
자바에서는 프로그램이 실행되는 도중 발생하는 예외를 처리하기 위해
'try', 'catch', 'finally' 문을 사용할 수 있다.
∙ try : 기본적으로 맨 먼저 실행되는 코드로 여기에서 발생한 예외는 'catch' 블록에서 처리
∙ catch : try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당
∙ finally : 이 블록은 try 블록에서 예외가 발생하건 안 하건 맨 마지막에 무조건 실행
※예외 처리 문법 예시, Error를 강제로 발생시키기 위해 'throw' 구문을 사용
public class ExceptionTest {
public static void main(String[] args) {
MyException m = new MyException();
System.out.println("에러 발생 전");
m.exceptionThrows();
System.out.println("에러 발생 후 처리 완료!");
}
}
public class MyException {
public void exceptionThrows() {
exceptionRun();
}
// 에러를 발생 시키기 위한 메서드
private void exceptionRun() {
System.out.println("에러 발생!");
try {
throw new Exception("에러가 발생하였습니다.");
} catch (Exception e) {
e.printStackTrace();
// Exception 이 발생한 이유와 위치는 어디에서 발생했는지
// 전체적인 단계를 전부 출력해주는 메서드
}
}
}
예외 처리 진행 순서
try {
•••
try {
① •••
} catch(Exception e1) {
② •••
} catch(Exception e2) {
③ •••
}
} catch(Exception e3) {
④ •••
} catch(Exception e4) {
⑤ •••
}
finally {
⑥
}
만약 ①번 try 블록에서 예외가 발생하지 않고, 바깥쪽 try 블록에서도 예외가 발생하지 않으면,
⑥번 finally 블록이 바로 실행된다.
하지만 ①번 try 블록에서 예외가 발생하면,
②번과 ③번 catch 블록에서 해당 예외를 처리할 수 있는지 검사하게 된다.
만약 적절한 catch 블록을 찾지 못하면,
바깥쪽 try 블록의 ④번과 ⑤번 catch 블록도 차례대로 검사하게 됩니다.
해당 예외를 처리할 수 있는 catch 블록을 찾게 되면, 해당 catch 블록을 실행한 후 ⑥번 finally 블록을 실행한다.
하지만 모든 catch 블록이 해당 예외를 처리할 수 없으면,
예외는 처리되지 못한 채 해당 프로그램은 강제 종료된다.
Exception Class
자바에서는 모든 예외의 조상(상위) 클래스가 되는 'Exception' Class는 크게 다음과 같이 구분할 수 있다.
'RuntimeException' 클래스를 상속받는 자식 클래스들은,
주로 치명적인 예외 상황을 발생시키지 않는 예외들로 구성되어 있다.
하지만 그 외 'Exception' 클래스에 속하는 자식 클래스들은 치명적인 예외 상황을 발생시키기 때문에
반드시 try와 catch문을 사용해서 예외 처리를 해줘야 한다.
예외 처리를 명확하게 왜 사용하는지 모르고 사용하다가
이번에 '왜' 사용해야 되는지 조금은 이해하고 사용할 수 있게 된 거 같다.
하지만 완벽하게 갈증이 해소된 것은 아니기 때문에 조금 더 공부하면서
깊이 이해하고 완벽하게 활용할 수 있도록 노력해야겠다.
속도는 더디더라도 꾸준하게 성장하는 개발자가 되기를!
'개발자의 일기 > Study' 카테고리의 다른 글
[11Days] Study_추상화 (0) | 2023.04.07 |
---|---|
[10Days] Study_Inheritance (0) | 2023.03.28 |
[9Days] Study_Method (0) | 2023.03.24 |
[8Days] Study_Static&Constructor (0) | 2023.03.22 |
[7Days] Study_객체 지향 언어(Java) (0) | 2023.03.18 |