return result.isEmpty() ? null : new ArrayList<>(result);위와 같이 null을 반환하는 메서드를 작성함에 있어 문제점을 느끼지 못했다.
값이 없으므로 당연히 null로 반환을 하는걸 당연하게 생각했다.
# Null 정의
- 변수에 아무것도 할당되지 않았을 때
- 정의되지 않음
- 특별한 값이 없음근데 아니였구나… 잘못 알고 있었구나.. 그랬구나..
아래와 같이 정리한다.
API에 null을 최대한 쓰지 말자
# 반환 값이 있어야 한다면 null 대신 예외를 던지자
# 빈 반환값은 빈 컬렉션이나 Null 객체를 사용하자매번 빈 컬렉션 할당하여 반환하지 말고 빈 불변 컬렉션을 반환하도록 하자.
# Collections 상수사용
Collections.emptyList, Collections.emptyMap, ..
# 불변 객체 선언 후 사용
private static final String[] EMPTY_ARRAY = new String[0];계약에 의한 설계(Design by Contract)를 하자
# API 규약을 소비자와 제공자 사이에 지켜야 할 엄격한 계약으로 여기는 설계방법
# 형식적 규약 외에 사전 조건과 사후 조건과 유지 조건을 포함
## 사전조건: 보호절(guard clause)
- 단정문
- Objects 메서드
- IllegalArgumentException
- NullPointException