# Item 54. Empty Collection

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

코드를 작성하다보면 컬렉션이 빈 경우 null을 반환하는 경우를 종종 볼 수 있다.

```java
class Example {

    private final List<String> list = new ArrayList<>();

    public List<String> getList() {
        return list.isEmpty()
                ? null
                : new ArrayList<>(list);
    }

    public static void main(String[] args) {
        Example example = new Example();
        List<String> list = example.getList();
        if (list != null) {
            System.out.println(list.size());
        }
    }
}
```

빈 경우에 null을 반환하게 되면 클라이언트 코드에서는 불필요하게 null 체크를 해야하고, 이는 코드 가독성을 떨어뜨리고 오류를 유발할 수 있다.\
해결책은 아주 간단하게 빈 컬렉션을 반환하면 된다.

```java
class Example {

    private final List<String> list = new ArrayList<>();

    public List<String> getList() {
        return list.isEmpty()
                ? Collections.emptyList()
                : new ArrayList<>(list);
    }

    private static final String[] EMPTY_ARRAY = new String[0]; // 길이가 0인 배열은 모두 불변이기 때문에 재사용 가능

    // 배열을 반환해야 하는 경우
    public String[] getArray() {
        return list.toArray(EMPTY_ARRAY);
    }
}
```

빈 배열을 반환해야하는 경우에도 null을 반환하지 말고 `toArray` 메서드에 빈 배열을 인수로 전달하면 된다.\
(예시 코드에서는 `EMPTY_ARRAY`를 미리 선언하여 사용해 성능 저하를 방지했다.)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hyoguoo.gitbook.io/docs/java/effective-java/item54.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
