반응형
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다.
아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라
ex 1) 컬렉션이 비어있다면 null을 반환하는 메서드 (따라하지 말 것)
private final List<Cheese> cheesesInStock = ...;
/**
* @return 매장 안의 모든 치즈 목록을 반환한다.
* 단, 재고가 하나도 없다면 null을 반환한다.
*/
public List<Cheese> getCheeses() {
return cheesesInStock.isEmtpy() ? null
: new ArrayList<>(cheesesInStock);
}
- 이 코드처럼 null을 반환한다면, 클라이언트는 이 null 상황을 처리하는 코드를 추가로 작성해야 한다.
- null 상황을 처리하는 코드를 빼먹으면 오류가 발생할 수 있다.
ex2) 빈 컬렉션을 반환하는 좋은 예
public List<Cheese> getCheeses() {
return new ArrayList<>(cheesesInStock);
}
- 빈 컬렉션을 반환하는 전형적인 코드로, 대부분의 상황에서 이렇게 하면 된다.
ex 3) 똑같은 빈 불변 컬렉션을 반환하게 한 예
public List<Cheese> getCheeses() {
return cheesesInStock.isEmpty() ? Collections.emptyList()
: new ArrayList<>(cheesesInStock);
}
- 가능성은 작지만, 사용 패턴에 따라 빈 컬렉션 할당이 성능을 눈에 띄게 떨어뜨릴 수 있다. → 매번 똑같은 빈 불변 컬렉션을 반환하면 된다. (불변 객체는 자유롭게 공유해도 안전)
ex 4) 길이가 0일수 도 있는 배열을 반환하는 올바른 예
public Cheese[] getCheeses() {
return cheesesInStock.toArray(new Cheeses[0]);
}
ex 5) ex 3처럼 빈 배열을 반환하는 예
private static final Cheese[] EMPTY_CHEESE_ARRAY = new Cheese[0];
public Cheese[] getCheeses() {
return cheesesInStock.toArray(EMPTY_CHEESE_ARRAY);
}
정리
- null 이 아닌, 빈 배열이나 컬렉션을 반환하자.
- 그렇지 않으면 null을 처리하는 코드를 사용자가 작성해야하며, null을 반환한다고 성능이 좋은 것도 아니다.
반응형
'BE > Java' 카테고리의 다른 글
[Effective Java] 아이템 56. 공개된 API 요소에는 항상 문서화 주석을 작성하라 (0) | 2022.11.21 |
---|---|
[Effective Java] 아이템 55. 옵셔널 반환은 신중히 하라 (0) | 2022.11.18 |
[Effective Java] 아이템 53. 가변인수는 신중히 사용하라 (0) | 2022.11.16 |
[Effective Java] 아이템 52. 다중정의는 신중히 사용하라 (0) | 2022.11.15 |
[Effective Java] 아이템 51. 메서드 시그니처를 신중히 설계하라 (0) | 2022.11.14 |