[매일CS]
[Back] 일급 컬렉션에 대해 설명해주세요
whatezlife
2025. 2. 14. 10:00
“일급 컬렉션에 대해 설명해 주세요”
“일급 컬렉션을 사용하는 이유가 무엇인가요?”
예시 답변:
“일급 컬렉션은 단순 컬렉션(List, Map 등)을 감싸는 객체로, 컬렉션에 관련된 비즈니스 로직(예를 들어, 데이터 검증, 계산, 상태 보호 등)을 해당 객체 내부에 포함시켜 관리하는 패턴입니다. 이를 통해 다음과 같은 장점을 얻을 수 있습니다.
- 캡슐화와 응집도 향상:
- 컬렉션에 관련된 모든 검증과 처리를 한 곳에 모아두면, 외부에서는 단순히 일급 컬렉션 객체의 메서드만 호출하면 되므로, 내부 구현이 숨겨지고 응집도가 높아집니다.
- 불변성 보장:
- 컬렉션을 외부에 직접 노출하지 않고, 읽기 전용 메서드만 제공함으로써 의도치 않은 데이터 변경을 막을 수 있습니다. 단순히 final 키워드를 사용하는 것보다 훨씬 강력한 불변성을 보장합니다.
- 비즈니스 로직 집중:
- 예를 들어 로또 번호처럼 특정 조건(숫자의 개수, 중복 제거 등)이 요구되는 경우, 이러한 비즈니스 규칙을 일급 컬렉션 내부에 구현함으로써, 다른 부분에서 검증 로직이 중복되거나 누락되는 문제를 방지할 수 있습니다.
- 명확한 도메인 표현:
- 일급 컬렉션은 단순한 변수명이 아니라, 도메인 모델의 한 부분으로 이름을 부여할 수 있기 때문에, 코드만 봐도 해당 컬렉션이 어떤 역할을 하는지 명확하게 알 수 있습니다.
따라서, 일급 컬렉션을 사용하면 객체지향 설계 원칙에 맞게 코드의 유지보수성과 가독성을 높일 수 있습니다.”
1. 일급 컬렉션의 정의
- 일급 컬렉션은 단순 자료구조(List, Map 등)를 감싸는 별도의 래퍼 클래스로, 컬렉션과 관련된 검증, 계산, 상태 보호 등 비지니스 로직을 한 곳에서 관리할 수 있도록 설계됨
- 소트웍스 앤솔로지 객체지향 생활체조의 규칙 8(일급 콜렉션 사용)에서 언급된 개념임
2. 일급 컬렉션의 주요 장점
2.1 비지니스에 종속적인 자료구조
- 예를 들어 로또 복권 게임에서는 6개의 번호가 있어야 하고 중복이 없어야 하는 조건이 있음
- 단순히 List를 사용할 경우, 각 서비스 메소드에서 검증 로직을 추가해야 하여 실수가 발생할 가능성이 높음
- 조건을 강제하는 별도의 일급 컬렉션 클래스를 만들면, 비지니스 로직을 한 곳에 모아 관리할 수 있음
2.2 불변성 보장
- 자바의 final 키워드는 재할당을 막을 뿐, 내부 값 변경은 막지 못함
- 일급 컬렉션은 생성 시에만 값을 할당하고, 변경할 수 있는 메소드 없이 오직 조회만 가능하게 설계하여 컬렉션 자체의 불변성을 보장함
2.3 상태와 행위를 한 곳에서 관리
- 예를 들어 결제 수단(Pay)들의 목록이 있을 때, 네이버페이 금액 합계와 같은 계산 로직이 분산되어 있으면 관리가 어려움
- 일급 컬렉션 클래스(PayGroups 등)를 사용하면, 데이터(상태)와 관련 계산(행위)을 한 곳에 포함시켜 중복 및 오류를 줄일 수 있음
2.4 이름이 있는 컬렉션
- 단순 변수명만으로 구분할 경우, 코드 검색이나 의사소통에서 명확한 의미 전달이 어려움 있음
- 별도의 일급 컬렉션 클래스로 네이버페이 그룹, 카카오페이 그룹 등 명확한 이름을 부여하면, 팀 내외에서 용어의 통일성과 검색이 용이해짐
3. 결론
- 일급 컬렉션은 객체지향 원칙에 따라 캡슐화, 불변성 보장, 응집력 강화, 유지보수성 개선 등의 효과를 제공함
- 객체지향적으로 리팩토링하기 쉬운 코드를 작성하기 위한 필수적인 방법 중 하나임