그룹스터디
일급 컬렉션(First Class Collection)
민초닷컴
2022. 12. 23. 17:35
일급 컬렉션
Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태
아래의 코드를
Map<String, String> map = new HashMap<>();
map.put("1", "A");
map.put("2", "B");
map.put("3", "C");
아래와 같이 Wrapping 하는 것
public class GameRanking {
private Map<String, String> ranks;
public GameRanking(Map<String, String> ranks) {
this.ranks = ranks;
}
}
일급 컬렉션의 이점
- 비즈니스에 종속적인 자료구조
- Collection의 불변성을 보장
- 상태와 행위를 한 곳에서 관리
- 이름이 있는 컬렉션2
1. 비즈니스에 종속적인 자료구조
위 코드의 문제점
- 검증 로직이 필요한 데이터 구분
- 모든 코드와 도메인을 알고 있지 않다면 문제 발생의 가능성
2. 불변
컬렉션의 값을 변경할 수 있는 메소드가 없는 컬렉션을 만들면 불변 컬렉션
불변성 관련 이슈
- 보통 일급컬렉션을 구현할 때 Collections.unmodifiableList를 활용한다.
- 하지만 Collection에 담겨 있는 Item의 속성은 변경이 가능
- Collections.unmodifiableList(new ArrayList<>(값))
- 값.stream().map(값의 item::Clone).collect(toList()) → 깊은 복사
- https://soft.plusblog.co.kr/71 → unmodifialbeList 추가설명 </aside>
3. 상태와 행위를 한 곳에서 관리
public class PayGroups {
private List<Pay> pays;
public PayGroups(List<Pay> pays) {
this.pays = pays;
}
public Long getNaverPaySum() {
return pays.stream()
.filter(pay -> PayType.isNaverPay(pay.getPayType()))
.mapToLong(Pay::getAmount)
.sum();
}
}
4. 이름이 있는 컬렉션
이름이 있는 컬렉션의 장점
- 검색 용이
- 명확한 표현 가능(용어 사용)
참고문헌 : https://jojoldu.tistory.com/412?fbclid=IwAR2o1vtCxGXKaz5F_HETqF04lOdNn1H2zOyxoUppYzCmAcoag8RiQxPqeRk