[Java] 일급 컬렉션

✔️ 일급 컬렉션?

우아한테크코스 6기 1주차를 하면서 클린 코드에 대해 처음 접해보게 되었다.

클린 코드 규칙을 살펴보며 어느정도 이해가 갔지만 의문점이 생기는 단어가 있었다.

클린 코드 규칙 5. 컬렉션에 대해 일급 컬렉션을 적용했는가?

 

일급 컬렉션이라는 것이 무엇일까? 이는 아래에서 자세히 살펴볼 예정이다. 우아한테크코스의 클린코드 규칙은 다음 링크에 나와있다.

https://jihyun-devstory.tistory.com/10

 

[우아한테크코스] 우아한테크코스 온보딩 1주차에 앞서

목차 1. 프리코스 목표와 구현 우선순위 2. 우아한테크코스 클린 코드 규칙 3. 우아한테크코스 자바 컨벤션 4. Git 커밋 컨벤션 설정 오늘 오후 3시, 우아한테크코스 6기 프리코스가 시작된다. 본격

jihyun-devstory.tistory.com

 


 

✔️ 객체지향 생활 체조 9가지 원칙

일급컬렉션에 대해 본격적으로 알아보기에 앞서 위 단어가 언급된 소트웍스 앤솔로지의 객체지향 생활 체조 9가지 원칙에 대해 얘기해보자.

규칙 1. 한 메서드에 오직 한 단계의 들여쓰기만 한다.
규칙 2. else 예약어를 쓰지 않는다.
규칙 3. 모든 원시값과 문자열을 포장한다.
규칙 4. 한 줄에 점을 하나만 찍는다.
규칙 5. 줄여쓰지 않는다.(축약 금지)
규칙 6. 모든 엔티티를 작게 유지한다.
규칙 7. 3개 이상의 인스턴스 변수를 가진 클래스를 사용하지 않는다.
규칙 8. 일급 컬렉션을 쓴다.
규칙 9. getter/setter/property를 쓰지 않는다.

규칙 8에서 일급 컬렉션이 언급된 것을 확인할 수 있다. 이건 나의 개인적인 생각이지만 아마 객체지향 생활 체조 원칙이 클린 코드 규칙보다 상위 개념인 것 같다.

 


 

✔️  규칙 8. 일급 컬렉션 사용

이 규칙의 적용은 간단하다.
컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.
각 컬렉션은 그 자체로 포장되어 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이다.
필터가 이 새 클래스의 일부가 됨을 알 수 있다.
필터는 또한 스스로 함수 객체가 될 수 있다.
또한 새 클래스는 두 그룹을 같이 묶거나 그룹의 각 원소에 규칙을 적용하는 등의 동작을 처리할 수 있다.
이는 인스턴스 변수에 대한 규칙의 확실한 확장이지만 그 자체를 위해서도 중요하다.
컬렉션은 실로 매우 유용한 원시 타입이다.
많은 동작이 있지만 후임 프로그래머나 유지보수 담담장에 의미적 의도나 단초는 거의 없다.

- 소트웍스 앤솔로지 객체지향 생활체조 편-

일급컬렉션에 대한 내용은 다음 블로그를 참고하였다. 

https://jojoldu.tistory.com/412

 

일급 컬렉션 (First Class Collection)의 소개와 써야할 이유

최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코

jojoldu.tistory.com

 


 

코드로 예시를 들어보자.

Map<String, String> map = new HashMap<>();
map.put("국어", "90");
map.put("수학", "88");
map.put("영어", "96");

위 코드를 아래와 같이 Wrapping 하는 것이 일급컬렉션이다.

즉, Collection을 Wrapping하면서 그 외 다른 멤버 변수가 없는 상태를 말한다.

public class SubjectGrade {
	private Map<String, String> grade;
    
    public SubjectGrade(Map<String, String> grade) {
    	this.grade = grade;
    }
}

 

Wrapping을 이용함으로써 다음과 같은 장점을 얻을 수 있다.

1. 비즈니스에 종속적인 자료구조
2. Collection의 불변성 보장
3. 상태와 행위 한 곳에서 관리
4. 이름이 있는 컬렉션

'Language > Java' 카테고리의 다른 글

[Java] JVM 동작 과정  (0) 2024.12.04
[Java] enum  (0) 2023.11.10
[Java] Stream  (4) 2023.11.09