확인된 예외(checked exception)

메서드 안에서 처리되지 않으면 반드시 메서드 정의의 throws 절에 추가해야하는 예외를 말한다. 하지만 이는 자바의 자체적인 언어 기능이지만, JVM은 이를 강제하지 않으며 JVM 언어에 대한 요구사항도 아니다.

확인된 예외의 의도는 메서드가 성공적으로 실행될때의 입력과 출력의 타임이 중요한 만큼, 메서드가 실패하는 경우도 예외의 타입으로 표현해서 두 가지 시나리오 모두 같은 수준의 타입 중요성을 갖도록 하자는 것이다.

인터페이스를 정의한다는 것은 메서드 시그니처를 이용해 '계약'한다는 것이다

→ 인터페이스는 안정적으로 정의하기도 어렵고 나중에 개선하기도 어렵다. 여기에 throws 까지 더해져서 인터페이스 확장과 수정이 어렵게 된다.

이러한 이유에서 C#은 자바와 같은 예외 명세를 요구하지도 않고 허용하지도 않는다. 예외 명세는 프로그램의 크기가 작을 때는 개발자의 생산성과 코드의 품질을 모두 향상할 수 있지만 대규모 소프트웨어 프로젝트에서는 그렇지 못했다. 오히려 생산성이 떨어지고 코드 품질의 향상은 극히 미미하거나 전혀 이루어지지 않았다.