
프로그램 실행 시 발생할 수 있는 예기치 못한 예외를 대비한 코드를 작성하는 것
자바에서 코드를 예외 처리한다고 해서 프로그램의 예외 상황 자체를 막을 수 없음
넓은 의미에서는
프로그램 실행 시 발생할 수 있는 모든 문제들 ➡️ 에러
에러와 예외는 프로그래밍에서 엄밀히 말하면 차이가 존재
자바 프로그래밍에서는 실행 시(Run-time) 발생할 수 있는 오류를 에러 와 예외 2가지로 구분
∴ 예외 처리는 코드 수정으로 해결 가능한 문제를 처리하는 것
자바에서는 오류를 Error와 Exception으로 나눴고 이들을 클래스로 구현하여 처리하도록 하였음
예외가 발생하면 예외 클래스로부터 객체를 생성하여 해당 인스턴스를 통해 예외처리
IllegalArgumentException, NullPointerException과 IOException 모두 클래스
JVM은 예외가 발생하면 해당 예외 클래스로 객체를 생성하고, 예외 처리 코드에서 해당 인스턴스를 이용할 수 있도록 해줌


자바에서 다루는 모든 예외 오류는 Exception class 에서 처리
위의 Exception 클래스 트리 구조를 보면 색깔별로 구분되어 있는데
컴파일 에러와 런타임 에러를 따로 클래스로 구분했기 때문
Exception 클래스는 RuntimeException과 그 외의 자식 클래스 그룹으로 나뉘어짐
Exception 및 하위 클래스런타임 시 발생하는 에러를 제외한 모든 Exception 클래스와 하위 클래스들을 가리킴
컴파일러가 코드 실행 전에 예외 처리 코드 여부를 검사하기 때문에 Checked 예외라고 부르기도 함
주로
ClassNotFoundException)FileNotFoundException)DataFormatException) 등사용자의 편의 실수로 발생하는 경우가 많음
RuntimeException 클래스런타임 시 발생하는 RuntimeException 클래스와 하위 클래스들을 가리킴
컴파일러가 예외 처리 코드 여부를 검사하지 않기 때문에 Unchecked 예외라 부르기도 함
ClassCastException)ArrayIndexOutOfBoundsException)프로그래머의 실수로 인해 발생하는 케이스
Checked / Unchecked Exception의 가장 핵심적인 차이
➡️ 반드시 예외 처리를 하는가?
확인하는 시점이 컴파일 단계이기 때문에 별도의 예외처리를 하지 않으면
➡️ 컴파일 자체가 ❌
따라서 Checked Exception이 발생할 가능성이 있다면
반드시 try - catch or throws로 처리해줘야 한다!
명시적인 예외 처리를 하지 않아도 👌
개발자의 충분한 주의로 미리 회피할 수 있는 경우가 대부분
상대적으로 약한 예외로 처리되어
자바 컴파일러가 별도의 예외 처리를 하지 않도록 설계되어 있기 때문
따라서 에러를 일부러 일으키는 코드가 있더라도
try - catch 처리하지 않더라도 컴파일에 실행까지 가능
2편에 계속...