컬렉션 (Collection) 이란?
컬렉션(Collection)은 데이터를 묶어서 관리할 수 있게 해주는 데이터 구조를 말합니다.
자바에서 컬렉션은 List, Map, Set, Queue, Stack이 있습니다.
일급 컬렉션 (First Class Collection) 이란?
일급 컬렉션(First Class Collection)은 컬렉션이 단순히 데이터를 저장하는 것에서 끝나는 것이 아닌
컬렉션과 관련된 비즈니스 로직도 포함해서
컬렉션 객체가 데이터와 관련된모든 작업을 책임지도록 만드는 방식입니다.
일급 컬렉션은 클래스에 컬렉션 외에 다른 변수를 가지지 않는 클래스입니다.
일급 컬렉션의 규칙 (소트웍스 앤솔러지의 객체지향 생활체조 - 규칙 8. 일급 컬렉션 사용)
규칙 8 : 일급 컬렉션 사용
이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.
각 콜렉션은 그 자체로 포장되어 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이다.
필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 없다.
새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙을 적용하는 등의 동작을 처리할 수 있다.
이는 인스턴스 변수에 대한 규칙의 확실한 확장이지만 그 자체를 위해서도 중요하다.
컬렉션은 실로 매우 유용한 원시 타입이다. 많은 동작이 있지만 후임 프로그래머나 유지보수 담당자에 의미적 의도나 단초는 거의 없다.
예시
일급 컬렉션을 사용한 코드
public class Mart {
private List<Item> items;
public Mart(List<Item> items) {
this.items = items;
}
// 컬렉션과 관련된 메서드 (검증, 조회 등)
}
일급 컬렉션의 장점
1. 중복된 코드를 줄일 수 있다.
public class Mart {
private final List<Item> items;
public Mart(List<Item> items) {
this.items = items;
}
// 전체 아이템 조회
public List<Item> getItems() {
return items;
}
// 특정 카테고리의 아이템 조회
public List<Item> getItemsByCategory(String category) {
return items.stream()
.filter(item -> item.getCategory().equals(category))
.collect(Collectors.toList());
}
// 모든 아이템의 총 가격 계산
public double getTotalPrice() {
return items.stream()
.mapToDouble(Item::getPrice)
.sum();
}
}
컬렉션에 대한 로직을 Mart 클래스에 포함하게 되면,
같은 로직을 다른 곳에서 중복해서 작성할 필요가 없게 되기 때문에
중복된 코드를 줄일 수 있습니다.
2. 컬렉션 객체의 변경을 제한할 수 있다.
public class Mart {
private final List<Item> items;
public Mart(List<Item> items) {
this.items = Collections.unmodifiableList(items);
}
}
Collections.unmodifiableList()를 사용하면 리스의 변경을 제한할 수 있습니다.
Collections.unmodifiableList()로 반환된 리스트는 읽기 전용 리스트이지만
원본 리스트가 변경되면 읽기 전용 리스트에 반영되기 때문에 완전한 불변 리스트는 아닙니다.
그렇기 때문에 원본 데이터에 대한 참조가 필요하지 않고, 완전한 불변 리스트를 만들기 위해서는
Java 9 이상의 List.of() 메서드나 Guava의 ImmutableList와 같은 불변 컬렉션을 사용하는 것이 좋습니다.
Guava의 ImmutableList
public class Example {
public static void main(String[] args) {
ImmutableList<String> immutableList = ImmutableList.of("Apple", "Banana");
// immutableList.add("Cherry"); // UnsupportedOperationException 발생
System.out.println(immutableList);
}
}
3. 코드의 유지보수성을 향상할 수 있다.
일급 컬렉션을 사용하면 데이터(상태)와 그 데이터에 대한 처리(행위)를 하나의 클래스에서 관리하게 됩니다.
상태와 행위를 한 클래스에서 관리할 수 있기 때문에 코드의 유지보수성을 향상시킬 수 있습니다.
참조
https://developerfarm.wordpress.com/2012/02/01/object_calisthenics_/
더 나은 소프트웨어를 향한 9단계: 객체지향 생활 체조(9)
규칙 8: 일급 콜렉션 사용 이 규칙의 적용은 간단하다. 콜렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 콜렉션과 관련된 동작은
developerfarm.wordpress.com
https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection/
일급 컬렉션을 사용하는 이유
일급 컬렉션이란? 본 글은 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유를 참고 했다. 일급 컬렉션이란 단어는 소트웍스 앤솔로지의 객체지향 생활체조 규칙 8. 일급 콜렉션 사용에서 언
tecoble.techcourse.co.kr
'Java' 카테고리의 다른 글
JAVA의 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2024.07.26 |
---|---|
JAVA 소수점 반올림 (0) | 2024.07.08 |