일급 컬렉션 : 하나의 컬렉션을 감싸는 클래스를 만들고, 해당 클래스에서 컬렉션과 관련된 비즈니스 로직을 관리하는 패턴
일급 컬렉션을 사용해야 하는 이유
1) 일급 컬랙션 클래스에 로직을 포함하거나 비즈니스에 특화된 명확한 이름을 부여할 수 있다.
2) 불필요한 API를 외부로 노출하지 않을 수 있다.
3) 컬렉션을 변경할 수 없도록 만든다면, 예기치 않은 변경으로부터 데이터를 보호할 수 있다.
일급 컬렉션을 사용할 때
> 이 컬렉션이 특별한 의미와 책임을 가지는가?
실무에서 자주 보는 예시:
- Orders, OrderItems (주문 관련)
- Products, Categories (상품 관련)
- Members, Teams (회원/팀 관리)
- Emails, PhoneNumbers (연락처 관리)
- LottoNumbers, Cards (게임 로직)
1. 비즈니스 로직이 있는 컬렉션
class Orders {
private final List<Order> orders;
public Money calculateTotalAmount() {
return orders.stream()
.map(Order::getAmount)
.reduce(Money.ZERO, Money::add);
}
public Orders filterByStatus(OrderStatus status) {
// 주문 필터링 로직
}
}
2. 검증 로직이 필요할 때
class LottoNumbers {
private final List<Integer> numbers;
public LottoNumbers(List<Integer> numbers) {
validateSize(numbers);
validateRange(numbers);
validateDuplicate(numbers);
this.numbers = numbers;
}
private void validateSize(List<Integer> numbers) {
if (numbers.size() != 6) {
throw new IllegalArgumentException("로또 번호는 6개여야 합니다");
}
}
}
'cs(with 매일메일)' 카테고리의 다른 글
| [250919금] 자바에서 Checked Exception와 Unchecked Exception에 대해서 설명해주세요. (0) | 2025.09.30 |
|---|---|
| [250930화] equals와 hashCode는 왜 함께 재정의해야 할까요? (0) | 2025.09.30 |
| [250923화] 데이터베이스 인덱스에 대해서 설명해주세요. (0) | 2025.09.29 |
| [250924수] 트랜잭션 격리수준은 무엇인가요? (0) | 2025.09.29 |
| [250925목] 얕은 복사와 깊은 복사에 대해서 설명해주세요. (0) | 2025.09.29 |