일급 컬렉션(First-Class Collection)이란?

  • 컬렉션(List, Set, Map 등)을 감싸는 하나의 클래스를 만들어 데이터를 관리하는 객체지향 프로그래밍 기법
  • 단순한 컬렉션 대신 이를 감싸는 클래스를 만들어 비즈니스 로직을 포함할 수 있도록 설계하는 것이 특징

일급 컬렉션의 개념

  • 컬렉션을 단일한 클래스 내에서 관리하여 코드의 응집도를 높이고 캡슐화를 강화하는 기법
  • List와 같은 컬렉션을 직접 사용하지 않고 컬렉션을 포함하는 전용 클래스를 만들어 컬렉션을 관리하는 방식

일급 컬렉션의 특징

  1. 컬렉션을 Wrapping한 단일 클래스

컬렉션을 직접 사용하지 않고 하나의 클래스로 감싸서 관리

  1. 비즈니스 로직을 포함할 수 있음

컬렉션을 감싼 클래스 내부에 관련 비즈니스 로직을 포함할 수 있어 응집도가 높아짐

  1. 불변성 유지

컬렉션을 직접 외부에 노출하지 않고 내부에서만 관리하도록 하면 불변성을 보장할 수 있음

→ setter를 제공하지 않거나 unmodifiableList를 반환하여 변경을 막을 수 있음

  1. 동일한 데이터 구조를 관리하는 코드의 중복 방지

컬렉션을 사용하는 곳곳에서 동일한 검증 로직, 필터링 로직을 중복 작성하지 않고 일급 컬렉션 내부에서 공통 로직을 관리할 수 있음

일급 컬렉션을 쓰면 좋은 이유

일반적인 컬렉션 사용시

public class Order {
    private List<Product> products;
 
    public Order(List<Product> products) {
        this.products = products;
    }
 
    public List<Product> getProducts() {
        return products;
    }
}
 
  • List가 직접 노출되어 객체지향적이지 않음
  • products 리스트를 수정할 수 있어 불변성이 보장되지 않음

일급 컬렉션 사용시 장점

  1. 캡슐화를 통한 변경 불가능성 보장
  2. 컬렉션에 대한 로직을 한 곳에서 관리 가능
  3. 원시 값이나 컬렉션을 객체로 포장하여 의미 부여

일급 컬렉션을 사용하면 안되는 경우

  • 너무 단순한 경우
  • 컬렉션이 매우 크고 성능 최적화가 필요한 경우 → 메모리 사용량 증가 가능

Ref