일급 컬렉션은 Collection객체를 매핑하면서 다른 필드가 없는 클래스를 의미한다.
특정 Collection 객체를 가지고 있을때 하나의 클래스를 만들어서 사용하는 것이다
일급 컬렉션은 하나의 클래스 즉 단일 책임 원칙
을 지키면서 객체지향적 설계를 위해 사용하라는 것 같으며, 각 클래스 즉 객체는 유연성이 강해야 유지보수성도 뛰어나기 때문인 것 같다. 또한 하나의 클래스에서의 역할이 무거워지면 중복코드가 많이 발생해주고 그것을 해결해주는것이 일급 컬렉션이다.
public class Subway {
// 멤버 변수는 컬렉션 하위 객체들 !
private List<Station> stations;
public Subway(List<Station> stations) {
this.stations = stations;
}
...
}
java의 final
은 불변이 아닌 재할당을 금지해야한다. final로 만들 수 없는 불변 객체는 일급 컬렉션과 래퍼 클래스로 해결해야한다.
public class Subway {
// 멤버 변수가 하나밖에 없다는게 중요!!
private List<Station> stations;
public Cars(List<Station> stations) {
this.stations = stations;
}
public int getStationsSize() {
return stations.size();
}
or
public List<Stations> getStation() {
return Collections.unmodifiableList(stations);
}}
하지만 setter
를 구현하지 않으면 불변 컬렉션이 될 수 있다. 일급 컬렉션을 만들땐 컬렉션 값을 그대로 반환하지 않고 계산된 값을 반환해야하며, unmodifiableList
를 통해 불변을 보장해야한다.
일급 컬렉션을 통해 값과 로직이 함께 존재해서 중복된 메서드의 생성
문제를 해결 합니다. 여러군데에서 사용하는 로직,검증 등 중복되는 코드가 있을시에는 상태와 행위를 각각 관리 할 수 있도록 어떤 기능의 주요 객체에서 비지니스로직을 구현하자!
List<Apart> 래미안 = ...
List<Apart> 자이 = ...
List<Apart> 쌍용 = ...
예를들어 아파트 같은 경우 여러 브랜드가 있을 수 있습니다. 하지만 각 해당 하는 아파트가 만들어질때 건물이 만들어지는 원리,몇층까지 만들어질 것 인지 이것저것 다 다를 수 있으며 여러 브랜드 있는 아파트가 엄청나게 많아질 경우 문제가 발생할 수 있다.
위 문제를 해결하기 위해선 컬렉션 기반으로 용어사용 및 검색을 하면 된다 .
Raemian 래미안 = new Raemian(...
XI 자이 = new XI(...
Ssangyong 쌍용 = new Ssangyong(...
각각 브랜드 있는 아파트를 일급 컬렉션으로 만들어 관리하게된다면 해당 컬렉션 기반으로 검색할 수 있기때문에 해결할 수 있다.