일급 컬렉션
컬렉션을 감싸는 별도의 클래스입니다. 컬렉션 외에 다른 필드가 없습니다.
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; // 컬렉션 하나만
// 다른 필드 없음
}
컬렉션 하나만 필드로 가지는 클래스 — 이게 일급 컬렉션입니다.