자신만의 예외를 던지는 것이 "나쁜 생각"인 이유는 무엇입니까?
-
19-09-2019 - |
문제
자신만의 예외를 던지는 것이 "나쁜 생각"인 이유는 무엇입니까?
해결책
일반적으로 자신의 예외를 던지는 것은 완벽합니다. 아마도 당신이 물어 봤던 것은 "언제 내 자신의 예외를 던지는 것이 반드시 좋은 생각은 아니에요?"였습니다.
한 가지 사례는 표준 예외를 던져야하는 경우입니다. 예를 들어, 메소드가 파일 이름을 가져 와서 파일을 반환 해야하는 경우 PeanutpowersfilenotFoundException을 던지지 않고 플랫폼의 표준 filenotFoundException을 던져야 할 것입니다. 자신의 예외를 실제로 던지고 싶다면 표준 filenotfoundException을 확장해야 할 것입니다.
업데이트: Bloch는 이것을 항목 60에서 설명합니다 효과적인 자바
다른 팁
그렇지 않습니다. 예외적 인 상황이있을 때마다 사용자 정의 예외를 만들고 던져야합니다.
표준 기본 예외 유형이 무엇이든 파생 된 것은 제공되지 않습니다 (C ++의 STD :: 예외 또는 Python의 예외 등).
그들이 정상적인 기본 유형에서 _를 낳지 않았다면, 다른 사람들이 모든 예외를 포착 할 것으로 예상 할 때 그들을 잡지 못할 수도 있습니다. 이것은 나쁜 일입니다.
자신만의 예외 유형을 만드는 것은 잘못이 아닙니다. 그러나 자신만의 만들기 전에 프레임 워크가 이미 적합한 예외를 제공하는지 확인해야합니다.
로부터 .NET 디자인 지침:
사용자 정의 예외 유형을 만드는 대신 시스템 네임 스페이스에있는 기존 예외를 던지는 것을 고려하십시오.
다른 기존 예외와 다른 방식으로 프로그래밍 방식으로 처리 할 수있는 오류 조건이있는 경우 사용자 정의 예외를 작성하고 던지십시오. 그렇지 않으면 기존 예외 중 하나를 던지십시오.
팀의 예외를 얻기 위해 새로운 예외를 만들고 던지지 마십시오.
나는 당신이 왜 나쁜 생각입니까? 다시 던지기 예외.
"Rethrow"에 의해, 나는 예외를 포착하고 새로운 것을 생성하고 던지는 것보다는 것을 의미합니다. 원래 스택 추적을 소비하고 오류의 모든 컨텍스트를 잃을 수 있으므로 문제가 될 수 있습니다.
예외 유형에 추가하려는 여분의 내용이 없다면 자신만의 예외 유형을 발명해서는 안됩니다.
API의 사용자에게 잘못된 인수를 제공했다고 말하려면 인수 외인을 던져야하지만 라이브러리 특정 이유 때문에 라이브러리가 실패하면 규칙적인 예외로 전달할 수 없으므로 롤을해야합니다. 자신의 및 개발자에게 필요한 정보를 포함하도록하십시오.
Peter의 응답을 계속하려면 예외를 던질 때의 또 다른 사례는 좋은 생각이 아닙니다. 프로그램의 비즈니스 논리를 제어하기 위해 예외를 사용하는 경우입니다.
당신이 던지는 예외가 적절한 대상에서 비롯된 한, 예외적 인 상황을 전달하는 한, 예외를 던지는 것은 완전히 받아 들일 수 있습니다.
비즈니스 로직을 제어하기 위해 던지기 예외를 사용하여 잘못된 디자인 패턴이되는 성능에도 영향을 미칩니다. 방법에서 반환 된 결과를 기반으로 한 분기와 비교할 때 던지기 및 잡기 예외는 다소 비쌉니다.
자신의 예외를 만드는 데 아무런 문제가 없으며, 이는 상황에 적합한 정보를 정확히 전달하도록 조정할 수 있습니다. ㅏ ConfigFileNotFoundException
a보다 더 많은 정보를 전달합니다 FileNotFoundException
(어떤 파일을 찾지 못했습니까?).
그러나 꼭, 당신이 각각의 모든 사용자 정의 예외를 잡아서 처리해야합니다. 내부에 의 당신의 암호. 예외가 모듈 외부의 어느 곳으로 날아 가면 (패키지라고 부르고, 네임 스페이스라고 부르십시오), 그 사람들은 그것이 존재한다는 것을 알지 못할 것입니다. a를 제외하고 catch (Throwable t) {/* whut? */}
.
나에게 질문은 경험이없는 후보자들이 가짜 경험을 시도하는 것인 것 같습니다. 내 의견으로는 자신의 예외를 던지는 것에 대해서는 아무런 잘못된 것이 없으며 여기에 대답 한 다른 사람들에게 볼 수 있듯이 잘못된 것은 없습니다.
전혀 나쁜 생각이 아닙니다.예외적인 상황이 발생하면 이를 처리하기 위해 예외를 발생시켜야 합니다. 특히 다른 사람이 사용할 수 있는 코드를 디자인하는 경우, 잘못된 입력을 받을 수 있는 경우 등이 있습니다.
코드의 일반적인 검사나 정상적인 실행의 일부로 복구할 수 있는 상황과 같이 절대적으로 필요하지 않은 예외를 사용하는 것은 많은 오버헤드를 가지기 때문에 좋지 않은 생각입니다.나는 그것이 일반적으로 나쁜 생각이라는 생각을 갖게 된 곳이라고 생각합니다.그러나 의도된 작업(귀하의 코드가 처리할 수 없는 예외적인 상황 표시)에 있어서는 절대적으로 최고의 도구입니다.
그리고 다른 사람이 사용할 수 있는 코드에 대해 사용자 정의 예외를 만드는 경우 해당 예외가 무엇인지, 무엇을 의미하는지 문서화하세요.그렇게 하면 나중에 코드 사용자가 이러한 문제가 가능하고 문제가 발생할 경우 그 의미가 무엇인지 알게 되고 적절하게 처리할 수 있습니다.