728x90
1급 커넥션이란?
1급 컬렉션 (First-class Collection)은 소프트웨어 설계 원칙 중 하나로, 특정 도메인 객체를 관리할 때 컬렉션을 포장(wrapper)한 클래스를 사용하는 것을 의미합니다. 객체지향 설계의 응집도와 책임의 단일화(Single Responsibility Principle)를 강화하는 데 도움이 됩니다.
1급 컬렉션의 특징
- 컬렉션 외에 다른 멤버 변수를 가지지 않음
- 1급 컬렉션 클래스는 내부에 단일 컬렉션(리스트, 셋 등)만을 멤버 변수로 가지며, 불필요한 다른 필드를 포함하지 않습니다.
- 불변 객체(Immutable)
- 컬렉션 내부의 데이터는 외부에서 수정할 수 없도록 보장합니다. 따라서 읽기 전용으로 제공하며, 추가/삭제 작업은 새로운 객체를 반환합니다.
- 컬렉션과 관련된 로직을 캡슐화
- 컬렉션과 관련된 비즈니스 로직(필터링, 정렬 등)을 1급 컬렉션 내부에서 수행합니다. 이렇게 하면 컬렉션을 사용하는 외부 코드의 복잡성을 줄일 수 있습니다.
- getter 사용 지양
- 컬렉션을 외부에 직접 노출하지 않고, 필요한 작업을 수행하는 메서드를 제공해 내부 구현을 감춥니다.
왜 1급 컬렉션을 사용할까?
- 응집도를 높임: 관련된 데이터를 하나의 클래스로 묶어 의미를 명확하게 만듭니다.
- 변경에 유연: 컬렉션이 직접 노출되지 않아 내부 구현을 변경해도 외부 코드에 영향을 주지 않습니다.
- 중복 코드 제거: 컬렉션 조작 로직을 캡슐화해 재사용 가능성을 높입니다.
예제: 1급 컬렉션 적용
public class OrderItems {
private final List<Item> items;
public OrderItems(List<Item> items) {
this.items = Collections.unmodifiableList(new ArrayList<>(items));
}
// 총 가격 계산
public int totalPrice() {
return items.stream()
.mapToInt(Item::getPrice)
.sum();
}
// 특정 조건으로 필터링된 아이템 반환
public List<Item> filterByCategory(String category) {
return items.stream()
.filter(item -> item.getCategory().equals(category))
.collect(Collectors.toList());
}
}
설명
- OrderItems 클래스는 List<Item> 컬렉션을 관리하는 1급 컬렉션입니다.
- 총 가격 계산과 필터링 같은 로직이 내부에 캡슐화되어 외부에서 컬렉션을 직접 조작하지 않습니다.
- Collections.unmodifiableList를 사용해 불변성을 보장합니다.
정리
- 컬렉션에 대한 책임 명확화
- 변경에 유연한 코드
- 외부 코드의 복잡성 감소
- 테스트 용이성 증가: 컬렉션의 내부 로직을 한 곳에 모아두면 테스트가 간편해집니다.
1급 컬렉션은 특히 Clean Code와 DDD(Domain-Driven Design) 같은 객체지향 설계 철학에서 권장되는 패턴입니다.
728x90
'Java' 카테고리의 다른 글
[Java] Arrays, Array 메소드 정리 (0) | 2024.08.14 |
---|---|
[Java] String 메소드 정리 (0) | 2024.08.13 |
[Java] 예외 Exception와 예외 처리 (0) | 2024.07.30 |
[Java] OOP 객체 지향 프로그래밍 (0) | 2024.07.15 |
[Java] 배열 (0) | 2024.07.09 |