예외 vs 에러
예외 : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류
에러 : 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나, JVM 실행에 문제가 생겼을 경우 발생하는 것
NullPointException : 존재하지 않는 레퍼런스를 참조할 때 발생
ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 index를 접근할 시 발생
NumberFormatException : 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환시 발생
ClassCastException : 변환할 수 없는 타입으로 객체를 반환시 발생
ArithmeticException : 정수를 0으로 나눌 경우 발생
IllegalArgumentException : 잘못된 인자를 전달할 때 발생
IOException : 입출력 동작 실패 또는 인터럽트시 발생
OutOfMemoryException : 메모리가 부족한 경우 발생
: 예외처리
프로그램을 종료되지 않고 정상적으로 작동되게 만들어주는 것
Java에서 예외처리는 Try ... Catch 문을 통해 해줄 수 있다.

try {
//에러가 발생할 수 있는 코드
throw new Exception(); // 강제 에러 출력
} catch (Exception e) {
// 에러시 수행
e.printStackTrace(); // 오류 출력(방법은 여러 가지가 있다.)
throw e; // 최상위 클래스가 아니라면 무조건 던져주자.
} finally {
// 무조건 수행
}
try 블록
try블록에는 예외가 발생할 수 있는 코드가 위치
try catch 문을 주로 쓰는 구간은 주로 데이터베이스에 데이터를 주고받을 경우 많이 사용
Why? 👉🏻 데이터베이스를 거쳐올때는 변수가 많이 생기기 때문 ➡ try catch문은 필수
finally 블록
finally 블록은 생략 가능
finally에는 데이터베이스와의 연결을 끊어주는 코드를 주로 삽입
: 특정 예외가 발생하여 데이터베이스와의 연결이 끊어지지 않으면 여러가지 문제를 야기할수 있기 때문!
throw
예외는 반드시 Throw해주자.
최상단 클래스를 제외한 나머지 클래스에서의 예외처리는 반드시 Throw를 해주어야 한다. 그렇지 않으면 예외처리를 해주었음에도 불구하고 Main에서는 Exception을 전달받지 못하여 개발자가 예외를 인지못하는 경우가 생기기 때문!