주제목차내용🧵 Java의 예외와 오류🍔 Throwable🌽 오류 (Error)🧀 예외 (Exception)🤾♀️ throw (예외 고의로 던지기)🏌️♀️ throws (예외 떠넘기기)🤷♀️ 왜?🎐 자바 표준 예외👓 이 코드는 잘 돌아갈까요?🎇 펑 ! UnsuppoertedOperationException🍍 자바 예외 계층effective java 아이템 72reference
주제
목차
내용
🧵 Java의 예외와 오류
🍔 Throwable

- 예외와 오류는 모두 Throwable 상속받습니다.
public static void main(String[] args) { int []arr = new int[2]; try { arr[2] = 1; } catch (ArrayIndexOutOfBoundsException e) { log.error("------- e -------" + e); log.error("------- e.getMessage() ------- " + e.getMessage()); log.error("------- e.printStackTrace() -------"); e.printStackTrace(); } }

- getMessage() : 오류의 원인을 사람이 이해하기 쉬운 형태
- printStackTrace() : 예외 메세지의 발생 근원지를 찾아 단계별로 출력 -> 가장 자세함
🌽 오류 (Error)
public class Test { public static void main(String[] args) { print("ERROR"); } private static void print(String error) { print(error); // StackOverflowError !! } }
- 시스템 레벨에서 발생하는 개발자가 수습할 수 없는 심각한 문제
- 개발자가 미리 예측하여 방지할 수 없음
- ex ) OutOfMemoryError, StackOverflowError 등등
🧀 예외 (Exception)
- 개발자가 구현한 로직에서 발생한 실수에 의해 발생
- 개발자가 미리 예측하여 방지할 수 있어 상황에 맞는 예외 처리 필요
- 예외는 catch, throw, throws 할 수 있다.
🤾♀️ throw (예외 고의로 던지기)
throw new Execption;
- 정보를 주기 위해서 -> 예외가 없다면 비정상적으로 종료되고 당시 어떤 일이 일어났는지 정보를 알 수 없음
- ex) user를 save 하기전에 이미 등록된 사용자가 있으면 예외를 던져버린다.
🏌️♀️ throws (예외 떠넘기기)
public void methodB() throws Exception { // Exception 발생 } public void methodA { try{ methodB(); } catch(Exception e) { // e } }
- catch로 잡지않고 현재 메서드를 호출한 메서드로 예외를 떠넘김
🤷♀️ 왜?

- 메서드 선언부에 선언된 throws문을 통해 어떤 예외가 발생할 수 있는지 예측할 수 있다.
- 현재 메서드 내에서 예외 처리를 할 필요가 없다고 판단했을 경우 -> 팀원들이 내가 만든 메서드를 사용하는 경우, 팀원마다 예외를 다르게 처리할 수 있다.
🎐 자바 표준 예외

👓 이 코드는 잘 돌아갈까요?

🎇 펑 ! UnsuppoertedOperationException

- java.util.Arrays.ArrayList 클래스는 set(), get(), contains() 메서드를 가지고 있습니다. -> 즉, remove는 지원하지 않음 -> 예외 발생 ! 주로 asList를 사용하다가 많이 보는 예외입니다 !
🍍 자바 예외 계층
<figure style="display:block; text-align:center;">
<img src="https://velog.velcdn.com/images/hye_b/post/7a667747-2b29-46a1-adc8-a414647f01a9/image.png" alt="text"
style="width: 700px; margin:0px auto">
<figcaption style="text-align:center; font-size:15px; color:#808080">
</figcaption>
</figure>
effective java 아이템 72
- Exception, Throwable, Error, RuntimeException 은 직접 재사용하지 말자. 이 클래스들은 추상 클래스라고 생각하길 바란다. 이 예외들은 다른 예외들의 상위 클래스이므로 안정적으로 테스트할 수 없다.