[아이템 54] null이 아닌, 빈 컬렉션이나 배열을 반환하라

Jimin Lim·2023년 7월 6일
0

Effective Java

목록 보기
37/38
post-thumbnail
post-custom-banner

아이템 54

null이 아닌, 빈 컬렉션이나 배열을 반환하라

✅ 컬렉션

컬렉션이 비었다면 null을 반환하는 것을 흔히 볼 수 있다고 한다. (난 그런 적 없는데..) 만약 null을 반환한다면, 클라이언트는 null 상황을 처리하는 코드를 추가로 작성해야 한다.

빈 컨테이너를 할당하는 데도 비용이 드니 null을 반환하는 쪽이 낫다는 주장이 틀린 이유는 다음과 같다.

  1. 성능 분석 결과 이 할당이 성능 저하의 주범이라고 확인되지 않는 한, 이 정도의 성능 차이는 신경 쓸 수준이 못 된다.
  2. 빈 컬렉션과 배열은 굳이 새로 할당하지 않고 반환할 수 있다.
public List<Cheese> getCheeses() {
	return cheesesInStock.isEmpty() ? Collections.emptyList() : new ArrayList<>(cheesesInStock);
}

위와 같이 작성하면 매번 똑같은 빈 Collections.emptyList()과 같이 '불변'컬렉션을 반환하면 된다.

✅ 배열

배열도 마찬가지로, null을 반환하지 말고 길이가 0인 배열을 반환하면 된다.

public Cheese[] getCheeses() {
	return cheesesInStock.toArray(new Cheese[0]);
}

위 방식이 성능을 떨어뜨릴 것 같다면, 길이 0짜리 배열을 미리 선언해두고 매번 그 배열을 반환하면 된다.

private static final Chesse[] EMPTY_CHEESE_ARRAY = new Cheese[0];

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

toArray(a)는 주어진 배열 a가 충분히 크면 a 안에 원소를 담아 반환하고, 그렇지 않으면 새로 배열을 만드므로 위 코드는 원소가 0이면 미리 할당한 배열을 반환한다.

profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️
post-custom-banner

0개의 댓글