[에러노트] List.isEmpty() vs List.size() : null 값

hyewon jeong·2024년 2월 20일
0

에러노트

목록 보기
37/46

1 발생

Custom으로 예외 처리를 하는 과정에서 , null 로 인한 에러가 발생했다.


2 코드


    public Object nameDuplicateCheck(@RequestBody Map<String, Object> paramsMap) throws CustomException {
        Map<String, Object> result = new HashMap<String, Object>();

        List<Map<String, Object>> list = ExampleService.nameDuplicateCheck(paramsMap);
        if (list.isEmpty()) {
            result.put("data", "사용가능 합니다.");
            return result;
        } else {
            throw new CustomException(ExceptionStatus.DUPLICATED_NAME);
        }
    }

3 원인

  • List.isEmpty() 는 리스트 객체가 어떤 요소를 갖고 있지 않을때 true 를 리턴한다.
  • 만약에 리스트객체가 null 이라면, isEmpty() 메소드 호출시 NullpointException 이 발생하기 때문에 null처리 됐던것이다. 반드시 null check 가 필요하다.

4 해결

List.size()로 리스트가 비어있는지 확인

List.size()는 리스트의 요소 개수를 리턴한다. 만약 리스트가 비어있다면 0을 리턴합니다. 리스트의 길이와 0을 비교하여 비어있는지 확인할 수 있다. 위와 마찬가지로, List 객체가 null일 가능성이 있다면 null check를 먼저 체크를 해줘야 함으로 아래와 같이 코드 작성하여 문제를 해결 했다.

시도1. null값 처리를 했지만 null 이기에 NullpointException 이 발생한다.

if(list == null || list.size() == 0 ){ }
or

시도2. 해결 코드


    public Object nameDuplicateCheck(@RequestBody Map<String, Object> paramsMap) throws CustomException {
        Map<String, Object> result = new HashMap<String, Object>();

        List<Map<String, Object>> list = ExampleService.nameDuplicateCheck(paramsMap);
        if (list != null && list.size() == 1) {
            result.put("data", "사용가능 합니다.");
            return result;
        } else {
            throw new CustomException(ExceptionStatus.DUPLICATED_NAME);
        }
    }
profile
개발자꿈나무

2개의 댓글

comment-user-thumbnail
2024년 6월 8일

"List.isEmpty() vs List.size() : null 값" 처리 방법에 대한 내용을 정리한 내용 잘 봤습니다!!

여담으로...
List<Map<String, Object>> list = ExampleService.nameDuplicateCheck(paramsMap);
코드에서 list 를 가지고 어떠한 처리도 하지 않고 있기 때문에...
실제 개발하실 때는!!
boolean isDuplicate = ExampleService.nameDuplicateCheck(paramsMap);
로 처리하는게 더 좋을 것 같습니다!
"가능 vs 불가능" 을 따져서 클라이언트에 전달해주면 되는 부분으로 Exception 까지 처리하는건 불필요해 보여서요!

지나가던 나그네였습니다!

1개의 답글