작성
·
116
0
private void validateDuplicateMember(Member member) {
//중복 회원 검증
List<Member> findMembers = memberRepository.findByName(member.getName());
if(!findMembers.isEmpty()){
throw new IllegalStateException("이미 존재하는 회원입니다.");
}
}
중복 회원 검증 메서드에서 위의 코드는 test 돌릴 때 제대로 작동하는데 아래 코드처럼 if문의 조건을 바꾸면 test가 fail합니다..!
리스트가 null일 경우 isEmpty() 호출 시 NPE가 발생하기 때문에 가급적 null인지 여부도 함께 확인하라는 글을 본적이 있어서 아래처럼 작성한 것인데, 왜 에러가 나는 건지 궁금합니다!
private void validateDuplicateMember(Member member) {
//중복 회원 검증
List<Member> findMembers = memberRepository.findByName(member.getName());
if(!findMembers.isEmpty() || findMembers!=null){
throw new IllegalStateException("이미 존재하는 회원입니다.");
}
}
답변 1
0
안녕하세요. 최은영님, 공식 서포터즈 y2gcoder입니다.
조건에 오류가 있는 것으로 보입니다!
findMembers가 null이 아니고, findMembers 가 비어있지 않으면
을 검증해야 한다면
findMembers != null && !findMembers.isEmpty() 와 같이 null 인지를 먼저 판단하고, 리스트가 비어있지 않은지를 판단하는 게 맞고, 이를 AND 조건으로 묶어주셔야 합니다.
올려주신 코드 블록과 같이 한다면 findMembers 가 비어있거나 null일 때 해당 조건을 통과하므로 정상적인 체크를 할 수가 없습니다. 그리고 보통은 컬렉션 객체가 null인지 먼저 체크하고 그 후에 비어있는지 체크하는 것이 순서상 맞습니다:)
감사합니다.