일급 컬렉션(First-Class Collection)이란?
- 컬렉션(List, Set, Map 등)을 감싸는 하나의 클래스를 만들어 데이터를 관리하는 객체지향 프로그래밍 기법
- 단순한 컬렉션 대신 이를 감싸는 클래스를 만들어 비즈니스 로직을 포함할 수 있도록 설계하는 것이 특징
일급 컬렉션의 개념
- 컬렉션을 단일한 클래스 내에서 관리하여 코드의 응집도를 높이고 캡슐화를 강화하는 기법
- List
와 같은 컬렉션을 직접 사용하지 않고 컬렉션을 포함하는 전용 클래스를 만들어 컬렉션을 관리하는 방식
일급 컬렉션의 특징
- 컬렉션을 Wrapping한 단일 클래스
컬렉션을 직접 사용하지 않고 하나의 클래스로 감싸서 관리
- 비즈니스 로직을 포함할 수 있음
컬렉션을 감싼 클래스 내부에 관련 비즈니스 로직을 포함할 수 있어 응집도가 높아짐
- 불변성 유지
컬렉션을 직접 외부에 노출하지 않고 내부에서만 관리하도록 하면 불변성을 보장할 수 있음
→ setter를 제공하지 않거나 unmodifiableList를 반환하여 변경을 막을 수 있음
- 동일한 데이터 구조를 관리하는 코드의 중복 방지
컬렉션을 사용하는 곳곳에서 동일한 검증 로직, 필터링 로직을 중복 작성하지 않고 일급 컬렉션 내부에서 공통 로직을 관리할 수 있음
일급 컬렉션을 쓰면 좋은 이유
일반적인 컬렉션 사용시
public class Order {
private List<Product> products;
public Order(List<Product> products) {
this.products = products;
}
public List<Product> getProducts() {
return products;
}
}
- List
가 직접 노출되어 객체지향적이지 않음 - products 리스트를 수정할 수 있어 불변성이 보장되지 않음
일급 컬렉션 사용시 장점
- 캡슐화를 통한 변경 불가능성 보장
- 컬렉션에 대한 로직을 한 곳에서 관리 가능
- 원시 값이나 컬렉션을 객체로 포장하여 의미 부여
일급 컬렉션을 사용하면 안되는 경우
- 너무 단순한 경우
- 컬렉션이 매우 크고 성능 최적화가 필요한 경우 → 메모리 사용량 증가 가능