오늘 알아볼 내용은
1. Error와 Exception이 무엇인지
2. Checked Exception과 Unchecked Exception의 차이는 무엇인지
💡Java 예외 구조

💡 Error란?
- 자바 프로그램 밖에서 발생한 예외 → 시스템이 종료되어야 할 수준
- 서버의 디스크 고장
- 메인보드 고장 → 개발자가 미리 예측해 방지하기 어렵다
대표적인 에러
-
OutOfMemoryError
: JVM에 할당된 메모리 부족으로 더 이상 객체를 할당하지 못할 때 발생하는 오류
- heap 사이즈 부족
- GC가 더 이상 메모리 확보하지 못할 때
- 네이티브 메모리 공간 부족
-
StackOverFlowError
- JVM 실행될 때 할당받은 stack의 크기를 넘어서서 메서드를 호출하게 되면 발생하는 오류
💡 Exception
- 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생
- Error와 달리 Exception은 개발자가 미리 예측해 방지할 수 있다
- 대응 코드(Exception Handling)를 통해 프로그램을 종료시키지 않고 계속 실행 가능
대표적인 예외
FileNotFoundException
- 존재하지 않는 파일 이름 이름
- 컴파일 시점에 발생 → Checked Exception
NullPointException
- null인 객체의 메소드나 변수에 접근하려고 할 때
- 즉, null 값을 가진 객체에
**객체 접근 연산자인 토드(.)** 사용할 때
- unchecked exception
IllegalArgumentException
- 적합하지 않거나, 적절하지 못한 인자를 메서드에 넘겨줄 때 발생함
- unchecked exception
ArrayIndexOutOfBoundsException
- 배열 범위 벗어난 index로 배열에 접근할 때 발생
- unchecked exception
Exception 종류 2가지
**Runtime Exception**
**Checked Exception**
❗ Error와 Exception의 차이
⭐Error 발생 시, 프로그램은 종료되지만 Exception은 handling만 해주면 종료되지 않고 계속 실행할 수 있다 ⭐
💡 Unchecked Exception
- Runtime Exception이라고 함
- 컴파일 시점에서 체크하지 않기에 unchecked exception이라고 부른다
- 주로 개발자 실수 등으로 컴파일 이후 런타임 시점에 발생하는 예외들이다
대표적인 예외
IndexOutOfBoundsException
NullPointerException
ClassCastException
ArithmeticException

💡 Checked Exception
- 컴파일 시점에 잡아주는 예외
Error와 Unchecked Exception을 제외한 모든 예외
대표적인 예외
- FileNotFoundException
- ClassNotFoundException
- DataFormatException
❗ Checked Exception과 Unchecked Exception의 차이 2가지
1. 꼭 예외 처리를 해줘야 하는가
- checked는 꼭 예외 처리 해야함 try-catch로
- unchecked는 명시적인 예외 처리 안해도 된다
2. 언제 이 Exception을 확인하는가
- checked exception은 컴파일 단계에서 확인
- unchecked exception은 런타임 단계에서 확인
checked / unchecked 로 구분한 이유
- checked exception으로 exception handling을 강제해서 좀 더 견고하게 코딩할 수 있도록 유도..?
- unchecked exception을 통해 try-catch문을 강제하지 않고 개발자에게 좀 더 자유를 주는…?