[매일CS]

[Back] 일급 컬렉션에 대해 설명해주세요

whatezlife 2025. 2. 14. 10:00

“일급 컬렉션에 대해 설명해 주세요”
“일급 컬렉션을 사용하는 이유가 무엇인가요?”


예시 답변:

“일급 컬렉션은 단순 컬렉션(List, Map 등)을 감싸는 객체로, 컬렉션에 관련된 비즈니스 로직(예를 들어, 데이터 검증, 계산, 상태 보호 등)을 해당 객체 내부에 포함시켜 관리하는 패턴입니다. 이를 통해 다음과 같은 장점을 얻을 수 있습니다.

  1. 캡슐화와 응집도 향상:
  2. 컬렉션에 관련된 모든 검증과 처리를 한 곳에 모아두면, 외부에서는 단순히 일급 컬렉션 객체의 메서드만 호출하면 되므로, 내부 구현이 숨겨지고 응집도가 높아집니다.
  3. 불변성 보장:
  4. 컬렉션을 외부에 직접 노출하지 않고, 읽기 전용 메서드만 제공함으로써 의도치 않은 데이터 변경을 막을 수 있습니다. 단순히 final 키워드를 사용하는 것보다 훨씬 강력한 불변성을 보장합니다.
  5. 비즈니스 로직 집중:
  6. 예를 들어 로또 번호처럼 특정 조건(숫자의 개수, 중복 제거 등)이 요구되는 경우, 이러한 비즈니스 규칙을 일급 컬렉션 내부에 구현함으로써, 다른 부분에서 검증 로직이 중복되거나 누락되는 문제를 방지할 수 있습니다.
  7. 명확한 도메인 표현:
  8. 일급 컬렉션은 단순한 변수명이 아니라, 도메인 모델의 한 부분으로 이름을 부여할 수 있기 때문에, 코드만 봐도 해당 컬렉션이 어떤 역할을 하는지 명확하게 알 수 있습니다.

따라서, 일급 컬렉션을 사용하면 객체지향 설계 원칙에 맞게 코드의 유지보수성과 가독성을 높일 수 있습니다.”



1. 일급 컬렉션의 정의

  • 일급 컬렉션은 단순 자료구조(List, Map 등)를 감싸는 별도의 래퍼 클래스로, 컬렉션과 관련된 검증, 계산, 상태 보호 등 비지니스 로직을 한 곳에서 관리할 수 있도록 설계됨
  • 소트웍스 앤솔로지 객체지향 생활체조의 규칙 8(일급 콜렉션 사용)에서 언급된 개념임

2. 일급 컬렉션의 주요 장점

2.1 비지니스에 종속적인 자료구조

  • 예를 들어 로또 복권 게임에서는 6개의 번호가 있어야 하고 중복이 없어야 하는 조건이 있음
  • 단순히 List를 사용할 경우, 각 서비스 메소드에서 검증 로직을 추가해야 하여 실수가 발생할 가능성이 높음
  • 조건을 강제하는 별도의 일급 컬렉션 클래스를 만들면, 비지니스 로직을 한 곳에 모아 관리할 수 있음

2.2 불변성 보장

  • 자바의 final 키워드는 재할당을 막을 뿐, 내부 값 변경은 막지 못함
  • 일급 컬렉션은 생성 시에만 값을 할당하고, 변경할 수 있는 메소드 없이 오직 조회만 가능하게 설계하여 컬렉션 자체의 불변성을 보장함

2.3 상태와 행위를 한 곳에서 관리

  • 예를 들어 결제 수단(Pay)들의 목록이 있을 때, 네이버페이 금액 합계와 같은 계산 로직이 분산되어 있으면 관리가 어려움
  • 일급 컬렉션 클래스(PayGroups 등)를 사용하면, 데이터(상태)와 관련 계산(행위)을 한 곳에 포함시켜 중복 및 오류를 줄일 수 있음

2.4 이름이 있는 컬렉션

  • 단순 변수명만으로 구분할 경우, 코드 검색이나 의사소통에서 명확한 의미 전달이 어려움 있음
  • 별도의 일급 컬렉션 클래스로 네이버페이 그룹, 카카오페이 그룹 등 명확한 이름을 부여하면, 팀 내외에서 용어의 통일성과 검색이 용이해짐

3. 결론

  • 일급 컬렉션은 객체지향 원칙에 따라 캡슐화, 불변성 보장, 응집력 강화, 유지보수성 개선 등의 효과를 제공함
  • 객체지향적으로 리팩토링하기 쉬운 코드를 작성하기 위한 필수적인 방법 중 하나임