일급 컬렉션

컬렉션을 감싸는 별도의 클래스입니다. 컬렉션 외에 다른 필드가 없습니다.


Before: 일반 컬렉션

public class Order {
    private List<OrderItem> orderItems;

    public int getTotalPrice() {
        int total = 0;
        for (OrderItem item : orderItems) {
            total += item.getPrice();
        }
        return total;
    }

    public void validate() {
        if (orderItems.size() > 10) {
            throw new IllegalArgumentException("최대 10개까지");
        }
    }
}

After: 일급 컬렉션

public class OrderItems {  // 컬렉션만 감싸는 클래스
    private final List<OrderItem> items;

    public OrderItems(List<OrderItem> items) {
        validate(items);
        this.items = items;
    }

    private void validate(List<OrderItem> items) {
        if (items.size() > 10) {
            throw new IllegalArgumentException("최대 10개까지");
        }
    }

    public int getTotalPrice() {
        return items.stream()
            .mapToInt(OrderItem::getPrice)
            .sum();
    }
}
public class Order {
    private OrderItems orderItems;  // 일급 컬렉션 사용
}

장점

장점설명
비즈니스 로직 응집컬렉션 관련 로직이 한 곳에
불변성 보장외부에서 직접 수정 불가
유효성 검사생성 시점에 검증
이름 부여List<OrderItem> → OrderItems

핵심 규칙

public class OrderItems {
    private final List<OrderItem> items;  // 컬렉션 하나만
    // 다른 필드 없음
}

컬렉션 하나만 필드로 가지는 클래스 — 이게 일급 컬렉션입니다.

CSLOG에서 보기