programing

Runtime을 슬로우하는 메서드메서드 서명에 예외가 표시됩니까?

luckcodes 2022. 10. 29. 15:46

Runtime을 슬로우하는 메서드메서드 서명에 예외가 표시됩니까?

예를 들어 프레임워크/JDK의 많은 메서드가 느려질 수 있습니다.

java.lang.SecurityException 

단, 메서드시그니처에는 표시되어 있지 않습니다(이것은 통상 체크된 예외용으로 예약된 프랙티스이기 때문입니다.저는 런타임 선언이메서드 시그니처의 예외에는 많은 이점이 있습니다(예를 들어 스태틱타입 체크).나 취했어?

서명에 체크되지 않은 예외를 선언하지 않습니다.이는 API 사용자에게 오해를 불러일으키기 때문입니다.예외를 명시적으로 처리해야 하는지는 더 이상 명확하지 않습니다.

javadoc에서 선언하는 것이 더 나은 방법입니다.필요하다고 생각되는 경우 이를 처리할 수 있지만, 원한다면 무시할 수 있다는 것을 알고 있기 때문입니다.이것에 의해, 온과 오프의 구별이 명확해집니다.

Oracle Java 튜토리얼에서 다음을 수행합니다.

"메서드의 API를 문서화하는 것이 그렇게 좋다면, 실행 시 예외도 지정하는 것이 어떨까요?"런타임 예외는 프로그래밍 문제로 인한 문제를 나타내므로 API 클라이언트코드가 이들로부터 회복되거나 어떤 방식으로든 처리될 것으로 합리적으로 기대할 수 없습니다.이러한 문제에는 0으로 나누는 것과 같은 산술 예외, Null 참조를 통해 개체에 액세스하려는 것과 같은 포인터 예외, 너무 크거나 너무 작은 인덱스를 통해 배열 요소에 액세스하려는 것과 같은 인덱싱 예외가 포함됩니다.

런타임 예외는 프로그램 내 어디에서나 발생할 수 있으며, 일반적인 예외는 매우 많을 수 있습니다.모든 메서드 선언에 런타임 예외를 추가해야 하는 경우 프로그램의 선명도가 저하됩니다.

collection #add의 javadoc을 확인합니다.

체크되지 않은 예외가 많이 언급되어 있습니다.

Throws:
UnsupportedOperationException - add is not supported by this collection.
ClassCastException - class of the specified element prevents it from being added to this collection.
NullPointerException - if the specified element is null and this collection does not support null elements.
IllegalArgumentException - some aspect of this element prevents it from being added to this collection.

인내심이 있다면 이러한 방법으로 발생할 수 있는 예외를 철저히 문서화하는 것이 좋습니다.어떤 면에서는 체크되지 않은 예외에 대해 이 작업을 수행하는 것이 더욱 중요합니다.체크되지 않은 예외는 어느 정도 자기 문서화되어 있습니다(컴파일러는 호출 코드를 강제로 인식시킵니다).

내 관점에서는 적어도 이 메서드에 대한 javadoc에서 런타임 예외를 선언하는 것이 좋습니다.서명에 그것을 선언하는 것은 어떤 일이 잘못되었을 때 무슨 일이 일어날지 더욱 명확하게 한다.이것이 제가 이 정보를 제공하라고 제안하는 주된 이유입니다.

참고로 시간이 경과함에 따라(2017년 현재) javadoc에서만 문서화하고 체크된 예외를 가능한 한 피하고 있습니다.

내 관점에서는 예외는 그 성질에 반하기 때문에 메서드 서명에 선언되어서는 안 된다.

단, Javadoc의 @throws에서 발생할 수 있는 상황에 주목하여 체크되지 않은 예외를 발생시킬 가능성이 있는 메서드가 있다면 메서드를 호출하여 무엇이 잘못될 수 있는지를 이해하는 데 도움이 될 수 있습니다.이것은, 발신자가 처리할 수 있는 예외(입력 불량 등에 의한 NPE 등)의 경우에만 유효합니다.

만약 당신이 다른 사람들이 사용하기 위해 api를 쓰고 있다면, 당신의 의도를 api에 명시적인 문서화할 충분한 이유가 있으며, Runtime을 선언하는 것에 단점은 없습니다.메서드 시그니처의 예외.

이는 체크된 예외에 대한 논의와 관련이 있습니다.메서드 서명에 예외를 선언해서는 안 된다는 데 대부분 동의합니다.

런타임 예외를 사용하는 방법에 대해서도 설명합니다.런타임 예외는 프로그래밍 오류 또는 치명적인 상태를 나타내야 한다는 하나의 포스터에 동의합니다.그래서 서명에 그것들을 선언할 가치가 별로 없다.모든 방법이 한 가지 방법을 통해 이루어질 수 있습니다.

언급URL : https://stackoverflow.com/questions/824217/should-methods-that-throw-runtimeexception-indicate-it-in-method-signature