NMP-Study / EffectiveJava2018

Effective Java Study
9 stars 0 forks source link

아이템 54. NULL이 아닌, 빈 컬렉션이나 배열을 반환하라 #54

Closed madplay closed 5 years ago

fairsun commented 5 years ago

컬렉션이 비었으면 null을 반환한다.

public List getCheeses() { return cheeseInStock.isEmpty()? null : new ArrayList<>(cheeseInStock); }


### 빈 컨테이너를 할당하는 데도 비용이 드니 null을 반환하는 쪽이 낫다는 주장은 틀린 주장이다. 
1. 성능 분석 결과 이 항당이 성능 저하의 주범이라고 확인되지 않는 한(#67) 이 정도의 성능 차이는 신경 쓸 수준이 못된다.
2. 빈 컬렉션과 배열은 굳이 새로 할당하지 않고도 반환할 수 있다. 

### 빈 컬렉션을 반환하는 올바른 예
~~~java
private final List<Cheese> cheeseInStock = null;

public List<Cheese> getCheeses() {
    return new ArrayList<>(cheeseInStock);
}

사용 패턴에 따라 빈 컬렉션 할당이 성능을 눈에 띄게 떨어 뜨릴 수도 있다. (가능성이 적다)

Collections.emptyList

Array

public Cheese[] getCheeses() { return cheeseInStock.toArray(EMPTY_CHEESE_ARRAY); }


## 핵심 정리

> null이 아닌, 빈 배열이나 컬렉션을 반환하라. 
> null을 반환하는 API는 사용하기 어렵고 오류 처리 코드도 늘어난다. 그렇다고 성능이 좋은 것도 아니다.