Java & Spring/Java

생활코딩 - Java(예외 Exception)

DJ.Kang 2024. 4. 15. 17:06

□ 예외란?

예외(Exception)란 프로그램을 만든 프로그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법

□ try - catch

ex) 0으로는 나눌 수 없기 때문에 오류가 발생하게 되는데

      try - catch를 통해 오류 내용을 출력함

 

※ e.메소드

e.getMessage();  by zero 

오류에 대한 기본적인 내용을 출력해준다. 상세하지 않다.

 

 

e.toString()  java.lang.ArithmeticException: / by zero

e.toString()은 e.getMessage()보다 더 자세한 예외 정보를 제공한다.

 

e.printStackTrace()

메소드 getMessage, toString과는 다르게 printStackTrace는 리턴값이 없다.

이 메소드를 호출하면 메소드가 내부적으로 예외 결과를 화면에 출력한다.

printStackTrace는 가장 자세한 예외 정보를 제공한다.

 

□ 다중 catch

아래 try - catch 구문에서 만약 catch(Exception e)가 맨위로 오게되면 애러가 발생한다.

catch구문의 경우 순서가 있다.

try - catch구문도 if - elif와 같이 여러 상황에 대비할 수 있다.

 

□ finally

ex) 예외에 관계없이 finally값을 출력

결과값

□ thorw / thorws

아래 코드에서 class B가 new FileReader에서 발생한 예외를 try-catch로 처리하고있다.

그러나 thorws를 사용하여 예외처리 책임을 다음 사용자에게 떠넘길 수 있다.

 

- class B에서 classC로 예외를 넘긴 코드

 

- class C에서 메인 class로 예외를 넘긴 코드

위 코드에서 FileNotFoundException catch를 삭제해도 동작에 이상이없다.

그 이유는 Exception 상속관계를 확인해보면 아래와 같기 때문이다.

Exception 상속관계

□ 여러가지 예외 상황들

 

- 아래 코드에서 IOException은 Checked Exception으로 try-catch구문이 필수로 들어가야한다.

 

※ Check / UnChecked Exception 적용 기준

API 쪽에서 예외를 던졌을 때 API 사용자 쪽에서 예외 상황을 복구 할 수 있다면 checked 예외를 사용한다.

checked 예외는 사용자에게 문제를 해결할 기회를 주는 것이면서 예외처리를 강제하는 것이다.

하지만 checked 예외를 너무 자주 사용하면 API 사용자를 몹시 힘들게 할 수 있기 때문에 적정선을 찾는 것이 중요하다.

 

사용자가 API의 사용방법을 어겨서 발생하는 문제거나 예외 상황이 이미 발생한 시점에서 그냥 프로그램을 종료하는 것이 덜 위험 할 때 unchecked를 사용한다. 

 

 

 

출처 : 생활코딩 유튜브 : 

https://www.youtube.com/watch?v=WijVClKt5Z8&list=PLuHgQVnccGMCeAy-2-llhw3nWoQKUvQck&index=115