메서드가 요청된 작업을 제대로 수행할 수 없는 경우 예외를 발생시켜 실패가 발생했음을 알려야

한다. 오류 코드를 이용하는 경우 사용자가 이를 쉽게 무시해버릴 수 있고, 오류 코드를 검사하고

이를 활용하는 코드 때문에 정상적인 실행 흐름을 혼돈스럽게 만들고, 핵심 논리를 흐리게 한다.

하지만 일반적인 실행 흐름을 제어하는 메커니즘으로 예외를 사용해서는 안 된다.

추가적으로 다른 개발자가 사용할 라이브러리를 작성하는 경우에는 정상적인 운영 환경에서 예외

가 발생할 가능성을 최소화하는 것이 좋다. 런타임에 발생하는 예외는 상당히 값비쌀 뿐 아니라

이에 대응하는 코드를 작성하는 것이 쉽지 않다. 따라서 개발자가 try/catch 블록을 작성하지 않고도

정상적으로 메서드가 수행될 수 있는지를 확인할 수 있는 API를 함께 제공하는 것이 좋다.

오류를 보고하는 매커니즘의 관점에서 보자면 반환 코드를 이용하여 오류를 보고하는 방식보다

예외를 이용하는 방식이 장점이 더 많다. 반환 코드를 이용하는 방식은 메서드의 원형에 영향을

미친다. 그리고 반환 코드는 계산의 결과를 나타내는 용도로 주로 사용되므로 오류가 발생했다는

사실 이외에 추가적인 정보를 전달하기가 어렵다. 이에 비해 예외는 클래스 타입이므로 개발자가

자신만의 예외 타입을 파생시킬 수 있으며 오류에 대한 추가적인 정보를 전달할 수 있다.

에러를 나타내는 반환 코드는 메서드 호출자에 의해서 처리된다. 반면 예외는 콜 스택을 통해서

적절한 catch 문이 구성된 위치까지 콜스택을 통해 전파된다. 따라서 개발자는 에러를 발생시키는

위치와 에러를 처리하는 부분을 여러 수준에서 분리하여 개발할 수 있다. 그리고 이렇게 분리하더라

예외 클래스를 사용하면 에러에 대한 세부 정보를 잃지 않을 수 있다.