[코드리뷰] Null이 아닌 빈 컬렉션이나 배열을 반환하라

SEPTEMBER 14, 2020
return result.isEmpty() ? null : new ArrayList<>(result);

위와 같이 null을 반환하는 메서드를 작성함에 있어 문제점을 느끼지 못했다.
값이 없으므로 당연히 null로 반환을 하는걸 당연하게 생각했다.

# Null 정의
 - 변수에 아무것도 할당되지 않았을 때
 - 정의되지 않음
 - 특별한 값이 없음

근데 아니였구나… 잘못 알고 있었구나.. 그랬구나..

아래와 같이 정리한다.

  1. API에 null을 최대한 쓰지 말자

    # 반환 값이 있어야 한다면 null 대신 예외를 던지자
    # 빈 반환값은 빈 컬렉션이나 Null 객체를 사용하자
  2. 매번 빈 컬렉션 할당하여 반환하지 말고 빈 불변 컬렉션을 반환하도록 하자.

    # Collections 상수사용
    Collections.emptyList, Collections.emptyMap, ..
    # 불변 객체 선언 후 사용
    private static final String[] EMPTY_ARRAY = new String[0];
  3. 선택적 매개변수는 null 대신 다형성(overload)를 사용하자
  4. 계약에 의한 설계(Design by Contract)를 하자

    # API 규약을 소비자와 제공자 사이에 지켜야 할 엄격한 계약으로 여기는 설계방법
    # 형식적 규약 외에 사전 조건과 사후 조건과 유지 조건을 포함
    ## 사전조건: 보호절(guard clause)
    - 단정문
    - Objects 메서드
    - IllegalArgumentException
    - NullPointException

작업 기록 블로그