Car-racing 미션을 진행하면서 일급 컬렉션이라는 것에 대해 공부해보았고, 사용해보았다.
일급 컬렉션이란?
Java에서 일급 컬렉션(First-Class Collection)은 다른 객체와 동등한 지위를 갖는 컬렉션 객체를 말합니다.
일급 컬렉션은 다음과 같은 특징을 가집니다.
- 컬렉션 객체는 변수나 매개변수에 할당할 수 있다.
- 컬렉션 객체는 다른 객체와 동등한 지위를 가진다.
- 컬렉션 객체는 반환값으로 사용할 수 있다.
- 컬렉션 객체는 필요한 경우 메서드에서 생성할 수 있다.
그냥 간단하게 한 문장으로 말하면 Collection을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 합니다.
예를 들어보자면
public class Cars {
private final List<Car> cars;
public Cars(List<Car> cars, String[] carNames) {
makeCarListWithNames(cars, carNames);
this.cars = cars;
}
private void makeCarListWithNames(List<Car> cars, String[] carNames) {
for (String carName : carNames) {
cars.add(makeCar(carName));
}
}
private Car makeCar(String name) {
return new Car(name);
}
public List<Car> getCars() {
return Collections.unmodifiableList(cars);
}
}
이렇게 Collection의 값을 하나의 Wrapping하여 클래스로 관리 해주는 것입니다.
일급 컬렉션에서는 setter 메서드를 선언해서는 안됩니다.
public Game(Conditions conditions, Input input) {
this.cars = new Cars(new ArrayList<>(), input.getCarNames());
this.condition = conditions;
}
public List<Car> getCars() {
return cars.getCars();
}
위의 코드처럼 호출하여 사용이 가능하게 되는 것입니다.
장점
- 가독성과 유지보수성이 향상된다.
- 유효성 검증이 용이해진다.
일급 컬렉션을 사용한다면 이런 장점들을 가질 수 있습니다.
많은 글에서 setter를 사용하지 않기에 불변성을 보장한다라는 장점은 사실 일급 컬렉션으로는 구현이 불가능 합니다.
setter 메서드가 없어도 Collection은 충분히 변경이 가능하기 때문에 불변을 구현하고 싶다면
Collections.unmodifiableList(cars)
Collections.unmodifiableList() 를 사용하여야 합니다.
일급 컬렉션은 궁극적으로 Collection을 비지니스 로직에 종속된 하나의 자료구조로 만들기 위해 사용한다 라고 볼 수 있습니다.
'백엔드 멘토링' 카테고리의 다른 글
RestTemplate vs webClient vs openFeign 차이 (0) | 2023.08.27 |
---|---|
Car-Racing 토이 프로젝트 step 1 회고록 (1) (0) | 2023.07.11 |
2023/04/10 - Spring 공부중 관련 질문들 [2] (0) | 2023.04.13 |
2023/04/10 - Spring 공부중 관련 질문들 [1] (0) | 2023.04.13 |
2023/04/05 - java 11, 17 특징 (0) | 2023.04.07 |