Backend/Java

Collections.EMPTY_LIST, Collections.EMPTY_MAP

findmypiece 2021. 7. 12. 23:30
728x90

apache commons-collections 패키지에 보면 Collections.EMPTY_LIST, Collections.EMPTY_MAP 라는 상수가 존재한다. 여기에서는 이걸 왜 사용하는지 정리해본다.

 

개발을 하다보면 의도적으로 빈객체를 만들어야 하는 상황이 있다. 예를 들어 CircuitBreaker의 fallback 메소드가 그렇다. 정상적인 데이터를 받지 못했지만 임시로 처리하기 위해 기본적인 객체 구조는 갖추되 정말 아무런 값이 필요없는 필드는 빈 객체로 할당해야 한다.

 

빈 객체를 할당해야 하는 필드가 List 타입이라고 한다면 new ArrayList() 로 할당해도 되겠지만 되도록 Collections.EMPTY_LIST 를 사용하는 편이 좋다.

 

이유는 아무런 데이터가 없는 빈 객체 임에도 new 통해 객체를 생성하게 되면 메모리를 할당하게 되고 불필요하게 GC 대상이 되기도 한다. 하지만 Collections.EMPTY_LIST 의 경우 static final 필드로 구성되어 있기 때문에 싱글톤인 동시에 GC 대상도 아니게 된다.

 

덤으로 해당 객체는 immutable 의 특성도 가진다. 의도적으로 리턴하는 빈객체인데 해당 값을 중간에 바꿔버리면 본래 의미가 사라지기 때문에 이를 사전에 방지한다.

 

한가지 더 생각해보면 "이럴 거 없이 그냥 null 을 리턴하면 안되나?" 라고 생각할 수도 있겠지만 null 을 리턴할 경우 이를 사용하는 쪽에서는 방어코드도 복잡해지고 사용하는 곳이 많을 수록 복잡한 방어코드가 중복으로 존재하게 된다. 이에 null 보다는 되도록 빈 객체를 리턴하는 것이 좋은 선택이다.

728x90

'Backend > Java' 카테고리의 다른 글

AutoBoxing과 AutoUnBoxing  (0) 2021.08.25
@Async, CompletableFuture, parallelStream  (0) 2021.07.14
Map에 stream 사용하기  (0) 2021.06.18
jackson 역직렬화 시 주의할 점  (0) 2021.04.14
ThreadLocal  (0) 2021.03.16