티스토리 뷰

java

[Java] Exception Handling

구삼칠오 2021. 10. 27. 20:30

자바의 예외처리에 대해 알아보겠습니다.

 

오류의 종류

프로그램은 오작동을 일으킬 때 오류를 발생시킵니다. 여러 가지의 오류들이 있지만 크게 두 가지 타입으로 나눠볼 수 있습니다.

  • CompileTime Exception
  • RunTime Exception

CompileTime에 발생하는 오류나 예외는 말 그대로 컴파일 시 발생되며 이 때문에 컴파일 에러 발생할 시 프로그램 빌드가 불가해 집니다.

RunTime에 발생하는 오류는 프로그램 실행 중 발생하는 오류들을 이야기하며, 컴파일러가 알려주지 않기 때문에 개발자는 발생 가능한 RunTime 오류들을 미리 처리해 두어야만 합니다.

 

 

자바의 Exception

http://java5tutor.info/java/flowcontrol/exceptionover.html

자바는 발생 가능한 다양한 오류들을 정의해서 제공하고 있습니다. 모든 오류들은 Throwable class를 상속받고 있으며 두 가지로 나누어집니다.

 

Error

Error가 발생할 시 프로그램은 즉시 비정상적으로 종료됩니다.

Error는 JVM에 의해 던져지며 개발자가 코드레 벨에서 Error를 제어할 수 있는 방법은 없습니다.

 

Exception

예외는 Error와 다르게 개발자가 직접 처리할 수 있고, 비정상 종료를 사전에 방지할 수 있습니다.

예외는 또다시 두 가지로 나뉩니다.

 

Checked Exception (확인된 예외)

Checked Exception은 컴파일 타임에 알 수 있으며 프로그램 빌드와 실행을 위해선 반드시 처리되어야만 하는 예외입니다. Exception을 상속받는 예외들 중 RuntimeException을 상속받지 않은 모든 예외들이 Checked Exception에 해당됩니다.

 

Unchecked Exception (확인되지 않은 예외)

RuntimeException을 상속받은 예외들이 Unchecked Exception에 해당됩니다. Checked Exception과 달리 컴파일러가 예외 발생 여부를 알려주지는 않으며 따라서 개발자가 직접 예외 발생 가능성을 확인하고 대비해야만 합니다.

 

 

 

Exception Handling

Error발생은 개발자가 처리할 수 없지만 Exception은 얼마든지 처리가 가능하고 프로그램의 비정상 종료를 막아 정상적인 실행상태를 유지할 수 있습니다. 그리고 이렇게 예외에 대비한 코드를 작성해 두는 것을 예외처리(Exception Handling)이라고 합니다.

 

try-catch-finally

자바에서 예외들은 try-catch-finally 구문으로 처리가 가능합니다.

try {
	// 예외 발생 가능성이 있는 코드
} catch (NullPointerException e) {
	// NullPointerException을 처리하는 코드
} catch (Exception e) {
	// NullPointerException을 제외한 모든 예외를 처리하는 코드
} finally {
	// 예외 발생여부와 상관 없이 수행되는 코드
}

먼저 예외가 발생할 수 있는 코드를 try 블록 안에 위치시킵니다. try 블록 안에서 예외가 발생할 시 catch블록 안에 코드가 실행되는데 이때 지정된 타입의 예외를 전달받습니다. 하나의 try에 여러 개의 catch가 붙을 수 있으며 try에서 뱉어내는 예외를 instanceof 연산자를 사용해 catch문에 지정한 예외의 타입과 비교 후 true가 되는 catch문에 예외를 전달하고 해당 catch블록이 실행됩니다. 여러 개의 catch문들 중 단 하나만 실행되며 앞에 위치한 catch문들이 우선순위를 가집니다. 즉 위에서 예외가 catch 되었다면 그 뒤에 붙어있는 catch들은 무시됩니다.

예외를 처리하기 위해 하나 이상의 try-catch문은 필수적이지만 finally는 선택사항입니다. finally문은 예외 발생 여부와 관계없이 무조전 실행되며, stream을 close 해주는 것과 같이 꼭 처리되어야 하는 코드들이 주로 위치하게 됩니다.

 

 

 

ref.

자바의 정석

http://java5tutor.info/java/flowcontrol/exceptionover.html

https://iroshandu.medium.com/exception-handling-in-java-f430027d60bf

'java' 카테고리의 다른 글

[JAVA] Reflection  (0) 2022.01.07
[Java] Lambda Expression  (0) 2021.11.08
[Java] Generics  (0) 2021.10.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함