코코코딩공부/JAVA

[JAVA] 일급 컬렉션

Ocean_ 2023. 2. 25. 14:40

들어가며

우테코 미션을 진행하면서 일급 컬렉션에 대해서 엄청엄청 많이 들어보았다. 그래서 정리를 해보고자 한다.


일급 컬렉션

일급 컬렉션이란 값 객체(Value Object)를 포함하고 있는 컬렉션이다. 값 객체란 값 그 자체로 의미가 있으며, 변경 불가능하다는 특징을 가지고 있는 것이다. 일급 컬렉션은 이러한 값 객체들을 모아서 하나의 객체로 다루는 것을 의미한다.

Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다.

 

일급 컬렉션의 장점

  • 코드 가독성의 향상
    • 값 객체가 포함된 컬렉션을 변수로 사용하는 것보다, 일급 컬렉션으로 묶어서 사용하는 것이 가독성이 더 좋다.
  • 의미 전달력의 향상
    • 일급 컬렉션을 사용하면, 컬렉션의 용도와 의미를 명확하게 전달할 수 있다.
  • 불변성의 보장
    • 일급 컬렉션에 포함된 값 객체들은 불변 객체이기 때문에, 컬렉션 내의 값이 변경되는 것을 방지할 수 있다.

class의 역할이 무거워 지고, 중복코드가 많아진다. 이를 일급 컬렉션을 통해 해결하면 각각이 상태와 행위를 관리할 수 있기 때문에 좋아진다.

 

개인적으로 느낀 장점

private final List<Car> cars;

public Car getCar(int index){
	return cars.get(index).getCar();
}

라는 코드가 있을때 우리는 cars.get(index).getCar() 라는 방법으로 Car 객체를 가져올 수 도 있을 것이다. 근데 Car 라는것은 Cars에서만 사용할 수 있게 추상화를 하여 cars.getCar(index)를 통해 간단화 할 수 있다고 생각한다.

 

일급 컬렉션 구현 방법

일급 컬렉션은 다음과 같은 방법으로 구현할 수 있다.

public class FirstClassCollection {
  private final List<ValueObject> values;

  public FirstClassCollection(List<ValueObject> values) {
    this.values = Collections.unmodifiableList(values);
  }

  public List<ValueObject> getValues() {
    return values;
  }
}

위의 코드에서 List 대신 Set 또는 Map 등의 컬렉션을 사용할 수도 있다.

이처럼 일급 컬렉션은 값 객체들을 모아서 하나의 객체로 다루는 것을 의미하며, 가독성, 의미 전달력, 불변성 보장 등의 장점이 있다.