질문 : 예외 생성에 대한 지침이나 모범 사례가 있습니까?
응용 프로그램에서 예상하지 못한 모든 조건에 대해 예외가 생성되었습니다. 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
'개발관련 > 오류노트' 카테고리의 다른 글
Objective-c / cocoa에서 예외 발생 (0) | 2021.06.24 |
---|---|
예외를 올바르게 무시하는 방법 (0) | 2021.06.14 |
자바 list에서 요소를 제거하려고 할 때 UnsupportedOperationException이 발생하는 이유 (0) | 2021.06.12 |
컬렉션을 반복하여 루프에서 개체를 제거 할 때 ConcurrentModificationException 방지 (0) | 2021.06.09 |
null 매개 변수에 대한 IllegalArgumentException 또는 NullPointerException? (0) | 2021.06.08 |