Table of Contents
일급 컬렉션 (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
이 되고,
명확히 이 컬랙션이 로또번호임을 인지할 수 있습니다.