일급 컬렉션
일급 컬렉션이란
Collection을 Wrapping 하는 것으로 Collection 이외에 멤버 변수가 없는 것을 일급 컬렉션이라고 한다.
public class Cars {
private static final String DUPLICATED_NAME_ERROR = "[ERROR] 차 이름은 중복될 수 없습니다.";
private final List<Car> cars;
public Cars(List<Car> carList) {
validateDuplicatedCarName(carList);
cars = carList;
}
...
}
일급 컬렉션을 사용하면, 자동차 이름 중복 같은 필요한 검증을 하여 검증된 객체를 외부에서 사용할 수 있다.
일급 컬렉션을 이용해라
자동차 경주 게임의 우승자를 판정하는 기능을 Referee 라는 클래스를 만들어 구현했다. 내가 구현한 우승자 판정 기능에 대해 간략하게 설명하면, Car객체들 중 최대 position을 찾아내, Car 객체마다 최대 position 값이 일치하는지 비교하는 방식으로 구현을 하였다.
일급 컬렉션 이용하기 전
- Referee.java
public static List<Car> judgeWinner(Set<Car> cars, int maxPosition) {
return cars.stream()
.filter(car -> car.isPosition(maxPosition))
.collect(Collectors.toList());
}
위와 같이 코드를 구현한 경우, 만약 꼴등을 뽑는 기능이 추가가 된다면, judgeWinner()와 코드가 중복되는 메서드 하나를 더 구현하게 될 것이다. 그래서 일급 컬렉션에게 행위를 위임하고 요청하는 방식으로 바꾸었다.
일급 컬렉션 이용한 후
- Referee.java
public static List<Car> judgeWinner(Cars cars, int maxPosition) {
return cars.getSamePositionCar(maxPosition);
}
- Cars.java
public List<Car> getSamePositionCar(int position) {
return cars.stream()
.filter(car -> car.isPosition(position))
.collect(Collectors.toList());
}
발생할 수 있는 중복 코드들을 일급 컬렉션이 해결해줄 수 있다. 일급 컬렉션을 만들었다면, 일급 컬렉션이 상태와 행위를 관리할 수 있게 해주자.
참고
https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection/