본문 바로가기

Java & Spring

[java] Collections.emptyList와 Collections.emptyMap

API를 개발하다 보면 외부 저장소 혹은 Http Client에서 데이터를 조회해서 결과를 받아 처리하는 경우가 있다.


이 때 외부에서 반환한 데이터가 없거나 내부로직에 의해 빈 데이터가 반환되어야 하는 경우 NullPointerException을 방지하기 위하여 반환 형태에 따라 List나 Map의 인스턴스를 생성하여 반환하여 처리해야 하는 경우가 있다.


후속 로직에서 size 메소드 등으로 체크를 하고 추가적인 값을 변경하지 않는 경우 Collections.emptyList()이나 Collections.emptyMap() 메소드를 사용하면 매번 동일한 정적 인스턴스가 반환되므로 각 호출에 대해 불필요한 인스턴스 생성이 되지 않아 메모리 사용량을 줄일 수 있다. 


주의할점은 Collections.emptyList()이나 Collections.emptyMap() 메소드로 반환된 객체의 add 혹은 put 메소드를 호출하는 경우 UnsupportedOperationException가 발생하므로 추가적인 데이터 수정을 하지 않는 경우에만 사용하여야 한다.


아래는 Collections.emptyList() 메소드의 구현체이다. 메소드 호출시 매번 동일한 List를 반환하는 것을 확인할 수 있다.

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