일급 컬렉션 (First Class Collection)

By | 2021년 9월 9일
Table of Content

일급 컬렉션 (First Class Collection)

참조

정의

Collection 을 Wrapping 한 클래스를 말합니다.
Collection 이외 다른 맴버 변수는 없어야 합니다.
Collection 을 외부에 제공하는 맴버 함수도 없어야 합니다.

public class GameRanking {

    private Map<String, String> ranks;

    public GameRanking(Map<String, String> ranks) {
        this.ranks = ranks;
    }
}

Collection 을 Wrapping 한 클래스가 왜 좋을까?

장점

비지니스 특화 자료구조

List<Long> lottoNumbers 라는 로또 번호를 저장한 컬랙션이 있다고 가정하자.

List 는 단순한 컬랙션이기에, 로또 번호의 특성(6개의 번호만 존재, 중복 숫자가 없음)을 보장하지 않는다.

public class LottoTicket {

    private List<Long> lottoNumbers;

    public LottoTicket(List<Long> lottoNumbers) {
        validateSize(lottoNumbers);
        validateDupilcate(lottoNumbers);
        this.lottoNumbers = lottoNumbers;
    }
}

위와 같이 일급 컬렉션 으로 만들게 되면, 로또 번호의 특성을 반복 검증할 필요없이 사용할 수 있게 된다.

불변 데이타

일급 컬렉션 은 내부 데이타를 변경할 수 있는 메소드를 제공하지 않으므로,
불변 데이타가 됩니다.

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

내부 데이타를 접근할 수 있는 유일한 장소가 일급 컬렉션 내부 뿐이므로,
내부 데이타와 관련된 비즈니스 로직이 클래스 안으로 모이게 됩니다.

이름이 있는 컬렉션

List<Long> lottoNumbers 상태에서는 이 컬랙션이 로또번호라는 구분은 변수명 뿐입니다.

public class LottoTicket 행태로 일급 컬랙션 을 만들게 되면,
클래스 타입 자체가 LottoTicket 이 되고,
명확히 이 컬랙션이 로또번호임을 인지할 수 있습니다.

답글 남기기