인프런 커뮤니티 질문&답변

최은영님의 프로필 이미지
최은영

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

회원 기능 테스트

isEmpty(), NPE

작성

·

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인지 먼저 체크하고 그 후에 비어있는지 체크하는 것이 순서상 맞습니다:)

 

 

감사합니다.

최은영님의 프로필 이미지
최은영

작성한 질문수

질문하기