1단계 팀원들과 함께 각자가 받은 리뷰에 대해 얘기를 하다가, 일급 컬렉션에 대한 얘기가 나왔다.
나와 페어는 경주에 참여하는 자동차들의 모음인 List<Car>를 멤버변수로 담는 CarGroup 클래스를 만들고 그룹에 차를 추가하거나, 우승자를 구하는 메서드를 작성했는데, 사실 일급 컬렉션인지도 모르고 일급 컬렉션을 사용한 샘이다.
따라서, 일급 컬렉션이 무엇이고 어떻게 나는 활용했는지를 알아보고자 작성한다.
정의
일급 컬렉션이란, 컬렉션을 Wrapping한 클래스로, 반드시 컬렉션외의 다른 멤버 변수가 없어야 한다.
public class CarGroup {
private final List<Car> cars = new ArrayList<>();
public void add(Car car) {
cars.add(car);
}
// 생략
}
일급 컬렉션의 장점
비지니스에 종속적인 자료구조
List<Car>로 자동차들을 사용하게 될 경우, 해당 자동차들이 중복되는지(검증)에 대해 Model이 아닌 컨트롤러단에서 처리를 해줘야 한다.
도메인 규칙을 가지고 있는 자료구조를 만들면 List에 대한 검증을 컨트롤러에서 해도 되지 않으며, 객체가 가지고 있게 처리할 수 있다.
Collection의 불변성을 보장
사실 나는 일급 컬렉션의 장점이 불변하다는 것을 듣고 조금 의아하였다.
게임의 init() 과정에서 차 List를 생성한 후에 Immutable List로 불변 리스트를 만든다면 굳이 클래스를 만들지 않고도 불변함을 얻을 수 있지 않는 것 아닌가? 라는 생각에 이 장점이 와닺지 않았다.
그러다가 비슷하게 든 생각이, 불변하다는 것이 장점이라면... add와 같은 setter가 있는 객체는 일급 컬렉션이 아닌가? 하는 의문이 들었다.
결론부터 말하자면, 일급 컬렉션이 꼭 불변해야 하는 것은 아니다고 생각한다.
단지 setter를 열지 않을 수 있기 때문에 불변하게 사용도 가능하다는 것이였다.
상태와 행위를 한 곳에서 관리
Car 목록에 대해 처리가 필요한 것들이 있다.
일급컬렉션을 사용하게 되면 Car 목록을 생성하는 곳에서 로직을 처리하는 것이 아닌, 일급 컬렉션에서 가지고 있기 때문에 상태와 행위를 한 곳에서 관리할 수 있다.
참고 블로그
https://jojoldu.tistory.com/412
https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection/
'우아한테크코스 6기 > 1단계' 카테고리의 다른 글
[사다리 타기 미션] 학습 내용 정리 (0) | 2024.03.26 |
---|---|
[자동차 경주 미션] 학습 내용 정리 (1) | 2024.03.25 |
[자동차 경주 미션] 개인 회고 (0) | 2024.03.25 |
List의 copyof()와 of() (0) | 2024.03.14 |
static final 변수는 항상 상수일까? (0) | 2024.03.11 |