개발관련/오류노트

예외 생성에 대한 지침이나 모범 사례

Rateye 2021. 6. 13. 21:02
728x90
반응형
질문 : 예외 생성에 대한 지침이나 모범 사례가 있습니까?

응용 프로그램에서 예상하지 못한 모든 조건에 대해 예외가 생성되었습니다. UserNameNotValidException , PasswordNotCorrectException

그러나 이러한 조건에 대한 예외를 만들지 말아야한다고 들었습니다. 내 UML에서 이러한 ARE는 기본 흐름에 대한 예외인데 왜 예외가 아니어야합니까?

예외 생성에 대한 지침이나 모범 사례가 있습니까?

답변

내 개인 지침은 다음과 같습니다. 현재 코드 블록의 기본 가정이 거짓 인 경우 예외가 발생합니다.

예 1 : 임의의 클래스를 검사하고 해당 클래스가 List <>에서 상속되면 true를 반환하는 함수가 있다고 가정합니다. 이 함수는 "이 개체가 List의 자손입니까?"라는 질문을합니다. 이 함수는 작동에 회색 영역이 없기 때문에 예외를 throw해서는 안됩니다. 모든 단일 클래스는 List <>에서 상속하거나 상속하지 않으므로 대답은 항상 "예"또는 "아니요"입니다.

예제 2 : List <>를 검사하고 길이가 50보다 크면 true를 반환하고 길이가 짧으면 false를 반환하는 다른 함수가 있다고 가정합니다. 이 기능은 "이 목록에 50 개 이상의 항목이 있습니까?"라는 질문을합니다. 그러나이 질문은 가정을합니다-주어진 대상이 목록이라고 가정합니다. NULL을 건네면 그 가정은 거짓입니다. 이 경우 함수가 true 또는 false를 반환하면 자체 규칙을 위반하는 것입니다. 이 함수는 아무것도 반환 할 수 없으며 질문에 올바르게 대답했다고 주장 할 수 없습니다. 따라서 반환되지 않습니다. 예외가 발생합니다.

이것은 "로드 된 질문" 논리적 오류와 유사합니다. 모든 기능은 질문을합니다. 주어진 입력이 그 질문을 오류로 만들면 예외를 던집니다. 이 줄은 void를 반환하는 함수로 그리기가 더 어렵지만 결론은 다음과 같습니다. 입력에 대한 함수의 가정을 위반하면 정상적으로 반환하는 대신 예외를 throw해야합니다.

이 방정식의 다른 측면은 예외가 자주 발생하는 함수를 발견하면 가정을 구체화해야한다는 것입니다.

출처 : https://stackoverflow.com/questions/77127/when-to-throw-an-exception
728x90
반응형