본문 바로가기

Java

[Java] 1급 커넥션

728x90

1급 커넥션이란?

1급 컬렉션 (First-class Collection)은 소프트웨어 설계 원칙 중 하나로, 특정 도메인 객체를 관리할 때 컬렉션을 포장(wrapper)한 클래스를 사용하는 것을 의미합니다. 객체지향 설계의 응집도책임의 단일화(Single Responsibility Principle)를 강화하는 데 도움이 됩니다.

 

 

1급 컬렉션의 특징

  1. 컬렉션 외에 다른 멤버 변수를 가지지 않음
    • 1급 컬렉션 클래스는 내부에 단일 컬렉션(리스트, 셋 등)만을 멤버 변수로 가지며, 불필요한 다른 필드를 포함하지 않습니다.
  2. 불변 객체(Immutable)
    • 컬렉션 내부의 데이터는 외부에서 수정할 수 없도록 보장합니다. 따라서 읽기 전용으로 제공하며, 추가/삭제 작업은 새로운 객체를 반환합니다.
  3. 컬렉션과 관련된 로직을 캡슐화
    • 컬렉션과 관련된 비즈니스 로직(필터링, 정렬 등)을 1급 컬렉션 내부에서 수행합니다. 이렇게 하면 컬렉션을 사용하는 외부 코드의 복잡성을 줄일 수 있습니다.
  4. 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());
    }
}

설명

  1. OrderItems 클래스는 List<Item> 컬렉션을 관리하는 1급 컬렉션입니다.
  2. 총 가격 계산필터링 같은 로직이 내부에 캡슐화되어 외부에서 컬렉션을 직접 조작하지 않습니다.
  3. Collections.unmodifiableList를 사용해 불변성을 보장합니다.

 

정리

  • 컬렉션에 대한 책임 명확화
  • 변경에 유연한 코드
  • 외부 코드의 복잡성 감소
  • 테스트 용이성 증가: 컬렉션의 내부 로직을 한 곳에 모아두면 테스트가 간편해집니다.

1급 컬렉션은 특히 Clean CodeDDD(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