자신만의 예외를 던지는 것이 "나쁜 생각"인 이유는 무엇입니까?

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

  •  19-09-2019
  •  | 
  •  

문제

자신만의 예외를 던지는 것이 "나쁜 생각"인 이유는 무엇입니까?

여기에서 발견

도움이 되었습니까?

해결책

일반적으로 자신의 예외를 던지는 것은 완벽합니다. 아마도 당신이 물어 봤던 것은 "언제 내 자신의 예외를 던지는 것이 반드시 좋은 생각은 아니에요?"였습니다.

한 가지 사례는 표준 예외를 던져야하는 경우입니다. 예를 들어, 메소드가 파일 이름을 가져 와서 파일을 반환 해야하는 경우 PeanutpowersfilenotFoundException을 던지지 않고 플랫폼의 표준 filenotFoundException을 던져야 할 것입니다. 자신의 예외를 실제로 던지고 싶다면 표준 filenotfoundException을 확장해야 할 것입니다.

업데이트: Bloch는 이것을 항목 60에서 설명합니다 효과적인 자바

다른 팁

그렇지 않습니다. 예외적 인 상황이있을 때마다 사용자 정의 예외를 만들고 던져야합니다.

표준 기본 예외 유형이 무엇이든 파생 된 것은 제공되지 않습니다 (C ++의 STD :: 예외 또는 Python의 예외 등).

그들이 정상적인 기본 유형에서 _를 낳지 않았다면, 다른 사람들이 모든 예외를 포착 할 것으로 예상 할 때 그들을 잡지 못할 수도 있습니다. 이것은 나쁜 일입니다.

자신만의 예외 유형을 만드는 것은 잘못이 아닙니다. 그러나 자신만의 만들기 전에 프레임 워크가 이미 적합한 예외를 제공하는지 확인해야합니다.

로부터 .NET 디자인 지침:

사용자 정의 예외 유형을 만드는 대신 시스템 네임 스페이스에있는 기존 예외를 던지는 것을 고려하십시오.

다른 기존 예외와 다른 방식으로 프로그래밍 방식으로 처리 할 수있는 오류 조건이있는 경우 사용자 정의 예외를 작성하고 던지십시오. 그렇지 않으면 기존 예외 중 하나를 던지십시오.

팀의 예외를 얻기 위해 새로운 예외를 만들고 던지지 마십시오.

나는 당신이 왜 나쁜 생각입니까? 다시 던지기 예외.

"Rethrow"에 의해, 나는 예외를 포착하고 새로운 것을 생성하고 던지는 것보다는 것을 의미합니다. 원래 스택 추적을 소비하고 오류의 모든 컨텍스트를 잃을 수 있으므로 문제가 될 수 있습니다.

예외 유형에 추가하려는 여분의 내용이 없다면 자신만의 예외 유형을 발명해서는 안됩니다.

API의 사용자에게 잘못된 인수를 제공했다고 말하려면 인수 외인을 던져야하지만 라이브러리 특정 이유 때문에 라이브러리가 실패하면 규칙적인 예외로 전달할 수 없으므로 롤을해야합니다. 자신의 및 개발자에게 필요한 정보를 포함하도록하십시오.

Peter의 응답을 계속하려면 예외를 던질 때의 또 다른 사례는 좋은 생각이 아닙니다. 프로그램의 비즈니스 논리를 제어하기 위해 예외를 사용하는 경우입니다.

당신이 던지는 예외가 적절한 대상에서 비롯된 한, 예외적 인 상황을 전달하는 한, 예외를 던지는 것은 완전히 받아 들일 수 있습니다.

비즈니스 로직을 제어하기 위해 던지기 예외를 사용하여 잘못된 디자인 패턴이되는 성능에도 영향을 미칩니다. 방법에서 반환 된 결과를 기반으로 한 분기와 비교할 때 던지기 및 잡기 예외는 다소 비쌉니다.

자신의 예외를 만드는 데 아무런 문제가 없으며, 이는 상황에 적합한 정보를 정확히 전달하도록 조정할 수 있습니다. ㅏ ConfigFileNotFoundException a보다 더 많은 정보를 전달합니다 FileNotFoundException (어떤 파일을 찾지 못했습니까?).

그러나 꼭, 당신이 각각의 모든 사용자 정의 예외를 잡아서 처리해야합니다. 내부에당신의 암호. 예외가 모듈 외부의 어느 곳으로 날아 가면 (패키지라고 부르고, 네임 스페이스라고 부르십시오), 그 사람들은 그것이 존재한다는 것을 알지 못할 것입니다. a를 제외하고 catch (Throwable t) {/* whut? */}.

나에게 질문은 경험이없는 후보자들이 가짜 경험을 시도하는 것인 것 같습니다. 내 의견으로는 자신의 예외를 던지는 것에 대해서는 아무런 잘못된 것이 없으며 여기에 대답 한 다른 사람들에게 볼 수 있듯이 잘못된 것은 없습니다.

전혀 나쁜 생각이 아닙니다.예외적인 상황이 발생하면 이를 처리하기 위해 예외를 발생시켜야 합니다. 특히 다른 사람이 사용할 수 있는 코드를 디자인하는 경우, 잘못된 입력을 받을 수 있는 경우 등이 있습니다.

코드의 일반적인 검사나 정상적인 실행의 일부로 복구할 수 있는 상황과 같이 절대적으로 필요하지 않은 예외를 사용하는 것은 많은 오버헤드를 가지기 때문에 좋지 않은 생각입니다.나는 그것이 일반적으로 나쁜 생각이라는 생각을 갖게 된 곳이라고 생각합니다.그러나 의도된 작업(귀하의 코드가 처리할 수 없는 예외적인 상황 표시)에 있어서는 절대적으로 최고의 도구입니다.

그리고 다른 사람이 사용할 수 있는 코드에 대해 사용자 정의 예외를 만드는 경우 해당 예외가 무엇인지, 무엇을 의미하는지 문서화하세요.그렇게 하면 나중에 코드 사용자가 이러한 문제가 가능하고 문제가 발생할 경우 그 의미가 무엇인지 알게 되고 적절하게 처리할 수 있습니다.

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