내가 호출하는 메소드가 그러한 기대를 충족시킬 것이라는 것을 알고 있더라도 메소드 호출의 리턴 값에 대해 방어해야하는지에 대해 궁금합니다.
주어진
User getUser(Int id)
{
User temp = new User(id);
temp.setName("John");
return temp;
}
해야 돼
void myMethod()
{
User user = getUser(1234);
System.out.println(user.getName());
}
또는
void myMethod()
{
User user = getUser(1234);
// Validating
Preconditions.checkNotNull(user, "User can not be null.");
Preconditions.checkNotNull(user.getName(), "User's name can not be null.");
System.out.println(user.getName());
}
나는 이것을 개념적 수준에서 요구하고 있습니다. 내가 메소드의 내부 작동을 알고 있다면 내가 부르고 있습니다. 내가 작성했거나 검사했기 때문입니다. 그리고 반환 가능한 값의 논리는 내 전제 조건을 충족시킵니다. 유효성 검사를 건너 뛰는 것이 "보다 낫거나"더 적절합니까? 또는 항상 통과해야하더라도 현재 구현중인 방법으로 진행하기 전에 여전히 잘못된 값을 방어해야합니까?
모든 답변에서 내 결론 (자유롭게 나올 수 있음) :
언제 주장- 이 방법은 과거에 오작동하는 것으로 나타났습니다
- 이 방법은 신뢰할 수없는 출처에서 온 것입니다.
- 이 방법은 다른 곳에서 사용되며 사후 조건을 명시 적으로 나타내지 않습니다.
- 이 방법은 귀하와 밀접한 관계를 유지합니다 (자세한 내용은 선택한 답변 참조).
- 이 방법은 적절한 문서, 유형 안전, 단위 테스트 또는 사후 조건 확인과 같은 계약을 명시 적으로 정의합니다.
- 성능이 중요합니다 (이 경우 디버그 모드 어설 션이 하이브리드 방식으로 작동 할 수 있음)
Null
있습니까 ( )? 이름이 ""
(null이 아니라 빈 문자열) 또는 인 경우 똑같이 문제가 될 수 "N/A"
있습니다. 결과를 신뢰할 수 있거나 적절한 편집증이 있어야합니다.