일급 컬렉션(First Class Collection)

일급 컬렉션, 그게 뭐지?

jojoldu님의 블로그arrow-up-right를 보다가 일급 컬렉션에 관한 내용이 있었다. 또, 이 단어는 객체지향 생활체조 규칙arrow-up-right에서도 언급되었다.

그래서 이게 뭘까?

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

public class PlayerBaseBall {
    private List<Ball> balls;

    public PlayerBaseBall(List<Ball> balls) {
        this.balls = balls;
    }
}

장점

블로그에서 소개된 장점은 다음과 같다.

  1. 비지니스에 종속적인 자료구조

  • 즉, 유효성 검증과 같은 로직을 서비스에서 처리하는 것이 아닌 이러한 클래스 내부에서 처리하고 인스턴스를 생성할 수 있다.

  1. 불변성 보장

Object Calisthenicsarrow-up-rightRule:4의 내용에는 불변성을 언급하지는 않았다.

위와 같은 코드가 있을 때, 외부에서 getBalls()로 컬렉션의 값을 가져올 경우, 아래 로직이 수행된다.

?? 이렇게 하면 객체가 가지고있는 컬렉션에 수정이 되겠네요.

  • 맞다. playerbaseball가 가지고있는 컬렉션에 삽입이 발생한다.

그럼 final로 막을까요?

  • 안된다. balls는 단순히 ArrayList의 객체를 참조하는 주소를 가지고 있는것이다.

그러면 외부에서 수정이 될텐데 어떻게 불변으로 막을까.

unmodifiableList()로 감싸서 반환해버리면 add()나 remove()를 수행할 시 바로 exception을 던져버린다.

  1. 상태와 행위를 한 곳에서 관리

검증의 책임을 일급 컬렉션에서 위임하여, 일급 컬렉션이 상태와 로직을 관리할 것이다. 그렇게 되면 다른 책임을 가진 클래스에서는 부담을 줄일 수 있고 중복 코드또한 줄일 수 있을것이다.

Last updated