Java에서 Exception을 생성하는 일반적인 규칙은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/26984

  •  09-06-2019
  •  | 
  •  

문제

두 상황에 모두 해당했습니다.

  • 너무 많은 맞춤 예외 생성
  • 너무 많은 일반 예외 클래스 사용

    두 경우 모두 프로젝트는 정상적으로 시작되었지만 곧 유지 (및 리팩터링)하는 오버 헤드가되었습니다.

    자신 만의 예외 클래스 생성과 관련하여 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

Java Specialists Java의 예외 및 예외 생성에 대한 몇 가지"모범 사례 "가 아래에 요약되어 있습니다.

  • 자체 예외를 작성하지 마십시오 (이미 Java API의 일부인 유용한 예외가 많이 있습니다)

  • 유용한 예외 작성 (예외를 직접 작성해야하는 경우 발생한 문제에 대한 유용한 정보를 제공하는지 확인)

다른 팁

우리 회사의 개발자들이 한 일을하지 마십시오. 누군가 java.lang.IllegalArgumentException과 유사한 [원문] InvalidArguementException을 생성했으며, 이제 우리는이를 (문자 그대로) 수백 개의 클래스에서 사용합니다. 둘 다 메서드에 불법적이거나 부적절한 인수가 전달되었음을 나타냅니다. 낭비에 대해 이야기하십시오 ...

Joshua Bloch는 Effective Java Programming Language Guide 에서 이에 대해 설명합니다. [우수 사례에 대한 나의 성경] 8 장. 예외 항목 42 : 사용 선호 표준 예외 . 다음은 그가 말하는 내용입니다. <인용구>

기존 예외를 재사용하면 몇 가지 이점이 있습니다. 이 중 가장 중요한 점은 프로그래머가 이미 익숙한 기존 규칙과 일치 [ Bloch가 아니라 ]하기 때문에 API를 배우고 사용하기가 더 쉽습니다. 두 번째는 API를 사용하는 프로그램이 익숙하지 않은 예외로 인해 복잡하지 않기 때문에 읽기가 더 쉽다는 것입니다. 마지막으로, 예외 클래스가 적다는 것은 메모리 사용량이 적고 클래스를로드하는 데 소요되는 시간이 줄어든다는 것을 의미합니다.

가장 일반적으로 재사용되는 예외는 IllegalArgumentException입니다. 일반적으로 호출자가 값이 부적절한 인수를 전달할 때 throw되는 예외입니다. 예를 들어, 호출자가 일부 작업이 반복되는 횟수를 나타내는 매개 변수에 음수를 전달하면 예외가 발생합니다.

즉, 예외 자체를 발생시키지 않아야 합니다. Java에는 대부분의 상황을 다루고 원인을 해결할 수 있도록 충분히 잘 발생한 예외를 설명하는 잘 선택되고 다양하며 대상이 잘 지정된 일련의 기본 제공 예외가 있습니다.

앞으로 코드를 유지해야하는 프로그래머에게 친숙 해지십시오.

내 경험에 따르면 클라이언트 (호출자)가 예외 유형에 따라 다른 작업을 합리적으로 원할 때 추가 예외 유형이 보증됩니다.그러나 종종 추가 예외 유형이 필요하지 않습니다.예를 들어 호출자가 다음과 같은 코드를 작성하는 경우 라코 디스

그러면 추가 예외 유형이 필요하지 않습니다.호출되는 코드가 새로운 예외 유형을 생성하는 데 지나치게 열중했기 때문에 이와 같은 코드를 너무 자주 보거나 작성해야합니다.

어떤 유형의 오류가 발생했는지 설명하는 이름이있는 예외를 찾을 수 없으면 직접 만듭니다.

그게 내 규칙입니다.

기본적으로 각 작업에는 고유 한 예외가 있습니다.예외를 잡을 때 일반적으로 객체에서하는 것처럼 다른 인스턴스를 구별하지 않으므로 다른 하위 유형이 필요합니다.너무 많은 사용자 지정 예외를 사용하는 것은 거의 발생하지 않는 경우입니다.

한 가지 조언은 필요에 따라 예외를 생성하는 것이며, 한 예외 유형이 다른 유형과 중복되는 것이 분명 해지면 두 가지를 병합하여 코드를 리팩토링하는 것입니다.물론 처음부터 예외 구조화에 대한 생각이 있다면 도움이됩니다.그러나 일반적으로 기존의 상황 별 예외와 1 : 1 대응이없는 모든 사례에 대해 사용자 지정 예외를 사용합니다.

반면에 유전자 코디 세 태그 코드와 유전자 코디 세 태그 코드가 실제로 적절할 수 있습니다.(로깅을 제외하고) 이것들은 던진 후 프로그램이 정의되지 않은 상태에 있다는 것을 의미하는 프로그래밍 오류이므로 잡히지 마십시오.

나만의 경험 법칙 :

나는 당신이 던지는 것이 무관하고 추가 시간을 소비 할 이유가없는 단위 테스트를 제외하고는 예외를 던지지 않습니다.

사용자 지정 비즈니스 논리에서 발생하는 오류에 대해 고유 한 사용자 지정 예외 유형을 만듭니다.이 예외 유형은 클라이언트가 실제로 발생한 상황에 대한 가시성을 확보하는 것이 합당한 경우를 제외하고는 다른 예외를 다시 캐스팅하는 데 최대한 많이 사용됩니다.

자신 만의 예외를 만드는 동안 :

  • 모든 예외는 Throwable 클래스

  • 핸들 또는 선언 규칙에 의해 자동으로 시행되는 확인 된 예외를 작성하려면 예외 클래스

  • 런타임 실행을 작성하려면 런타임 예외 클래스를 확장해야합니다.

예외를 먹지 말고 예외를 던지십시오. https://stackoverflow.com/a/921583/1097600

자신 만의 예외를 만들지 마세요.이미있는 아래 항목을 사용하세요. 라코 디스

확인되지 않은 예외를 던집니다.

라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top