백엔드에서 데이터를 내려줄 때 List 타입 객체가 비어있는 경우가 있다. (검색 조건 필터링에 속한 데이터가 없는 경우 등..)

이런 상황에서는 보통 비어있는 리스트(Empty List)를 반환한다.

 

그러한 이유는 null을 반환하면 처리하는 쪽에서 NPE가 발생할 수 있어서 빈 리스트를 반환해 에러를 방지하고, 처리하는 쪽에서 데이터가 있어도 없어도 List 타입으로 처리할 수 있기 때문에 코드 일관성을 유지할 수 있기 때문이다.

 

바로.. 그럴 때 사용할 것이 Collections의 emptyList()이다.

public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

코드를 보면 EMPTY_LIST는 static으로 정의되어 있어서 애플리케이션 구동 시점에 메모리에 올라가게 된다.

그래서 빈 리스트를 반환해야 하는 경우, 새로운 ArrayList 객체를 만들지 않고 이미 메모리에 올라간 이 놈을 사용할 수 있어서 메모리 비용을 줄일 수 있고 메소드명도 emptyList()로 의미가 명확하게 전달되기 때문에 누가 봐도 빈 리스트라는 것을 알 수 있다.

 

참고로 final 키워드가 붙어있어서 불변이기 때문에 빈 리스트를 반환해야하는 경우에 사용하도록 하자.

add()나 get() 메소드 사용 시 UnsupportedOperationException, IndexOutOfBoundsException을 만나게 될 것이다.

 

끝.

'Java' 카테고리의 다른 글

[Java] try-with-resources  (0) 2024.04.22
[Java] instanceof pattern matching  (0) 2024.04.22
[Java] TypeFactory으로 제네릭 타입 변환하기  (0) 2023.11.01