정상적인 경우에는 일어나지 않지만 발생할 수 있는 문제를 말함
예외 처리를 통해 프로그램 오류 발견 및 수정
예외가 발생하여도 프로그램이 계속 수행될 수 있도록 함
예) 0나누기, 배열 색인 오류
예) 은행계좌에서 인출 과정에서 잔액 부족
매개변수 타입에 해당하는 예외는 인자 타입과 그것의 모든 후손 타입을 말함 (상속과 관련)
순서가 중요하다
unchecked - 분류 2-1 : 명시적인 예외 처리를 강제하지 않는 특징이 있기 때문에 Unchecked Exception이라 하며, catch로 잡거나 throw로 호출한 메서드로 예외를 던지지 않아도 상관이 없다. 보통 수정하기 위해서 예외를 확인해본다. 즉 발생하도록 내버려두고 => 오류 수정
checked - 분류 2-2 : 반드시 명시적으로 처리해야 하기 때문에 Checked Exception이라고 하며, try catch를 해서 에러를 잡든 throws를 통해서 호출한 메서드로 예외를 던져야 한다. 보통 상황을 극복하거나 상황에 대한 정보를 통해 사용자에게 메세지를 띄어주기 위해 예외처리를 한다. => 발생하면 => 예외처리
자바는 강건성을 중요시 하였기 때문에 checked 예외에 대해서는 처리를 강제화함(자바에서 오바했다고 함- 잘못된 설계라고 말함)
처음상자는 문법 오류, checked 예외를 처리하지 않았기 때문에
그래서 왼쪽 아래나, 가운데 아래쪽 상자처럼 처리해준다.
왼쪽 아래 상자 : 여기서 예외처리
가운데 아래 상자 : 위에서 예외처리하기를 원함
오른쪽 아래 상자는 f와 g 둘다 null 에러를 발생시킬 수 있기 때문에 아예 저렇게 에러를 방지함(이렇게 unchecked 에러는 잡아줘야한다.)
1,3번째 보다는 2번째 4번째 상자가 더 권장됨
requireNonNullElse => null일 때 예외를 던지게 하지 않고 대체 값을 전달할 수 있다.
requireNonNullElseGet => requireNonNullElse 동작이 같은데 기본값을 계산하기 힘들다면 람다 표현식을 통해 함수를 작동시켜서 대체 값을 전달한다.
좋은 점 : Optional로 하면 얘가 값을 안 줄수도 있구나를 좀 더 명확히 고려할 수 있음. Student라고 했을 때는 값을 안 줄지 잘 모름