throw

예외를 발생시키다.

프로그램적으로 에러가 아니더라도 로직 상 개발자가 강제로 에러를 발생시켜 로그에 기록하고 싶은 상황이 있을 수 있다. 이 때, 자바에서는 throw 키워드르 사용하여 강제로 예외를 발생시킬 수 있다.

이렇게 발생한 에러를 처리하기 위해서 우리는 기본적 try-catch문을 작성해서 에러를 던지는 블럭 안에서 에러 핸들링도 함께 한다.

throws

예외를 던지다.

강제로 예외를 발생시킨 곳에서 처리하지 않고 다른 곳에서 처리하도록 예외를 던질 수 있도록 해준다.

예외의 종류?

그렇다면 Optional.orElseThrow는 Checked일까? UnChecked일까?

orElseThrow 메서드는 내부적으로 예외를 던지지만, 이를 호출하는 메서드가 반드시 예외를 던져야 한다는 규칙이 없다. orElseThrow 메서드는 예외를 런타임 시점에 던지므로, 해당 예외가 컴파일 타임에 체크되는 예외가 안닌 언체크 예외일 때는 throws 키워드를 명시할 필요가 없다.

즉, orElseThrow는 NoSuchElementException과 같은 언체크 예외를 던지는 경우가 대부분인데, 이 경우에는 throws를 생략할 수 있다.

Optional.orElseThrow에서 UnChecked Exception를 던지는 경우, throws. 키워드 생략이 가능하다.

Optional.orElseThrow에서 UnChecked Exception를 던지는 경우, throws. 키워드 생략이 가능하다.

Optional.orElseThrow에서 Checked Exception를 던지는 경우, throws. 키워드를 선언하지 않아서 컴파일 오류 발생한다.

Optional.orElseThrow에서 Checked Exception를 던지는 경우, throws. 키워드를 선언하지 않아서 컴파일 오류 발생한다.

그렇다면 사용자 정의 예외를 던지는 경우는?