본문 바로가기
자바

일급컬렉션을 쓰는 이유

by 순원이 2023. 11. 2.

일급컬렉션

Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 합니다.

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

  • 6개의 숫자로만 이루어져야만 하고
  • 6개의 숫자는 서로 중복되지 않아야만 하는

이런 자료구조가 없을까요?

없으니 저희가 직접 만들면 됩니다.

타인이 읽었을 때 자료형을 만들고 계산하는 로직을 본다면 어떤 비지니스 요구사항에 의해서 만든지 직관적으로 이해하기 힘듭니다. 일급컬렉션을 이용한다면 비지니스 요구사항중 관련되 것들을 한 곳에서 관리할 수 있어 타인이 이해하기 편합니다.

2. 불변

불변이 중요한 이유는?

⇒ 규모가 커질 수록 객체가 절대 값이 바뀔일이 없다는 게 보장되면 코드를 수정하는데 사이드 이펙트가 최소화 되기 때문입니다.

@Test
    public void final도_값변경이_가능하다() {
        //given
        final Map<String, Boolean> collection = new HashMap<>();

        //when
        collection.put("1", true);
        collection.put("2", true);
        collection.put("3", true);
        collection.put("4", true);

        //then
        assertThat(collection.size()).isEqualTo(4);
    }

테스트 결과: final인데도 불구하고 컬렉션에 값이 들어가집니다.

@Test
    public void final은_재할당이_불가능하다() {
        //given
        final Map<String, Boolean> collection = new HashMap<>();

        //when
        collection = new HashMap<>();

        //then
        assertThat(collection.size()).isEqualTo(4);
    }

테스트 결과: final일 경우 값이 들어가지지만 새로 메모리를 할당하는 건 안됩니다.

일급컬렉션

setter, add 메소드를 따로 만들어주지 않는다면 컬렉션에 접근할 수 있는 방법이 없기 때문에 값을 변경/추가가 안됩니다. 생성자에 의해서만 값이 결정됩니다.

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

저는 이 장점이 가장 와닿았습니다!
상태와 행위를 한 곳에서 관리 = 객체지향

저희는 결국 코드를 잘 짜기 위해서 객체지향을 추구합니다. 상태와 행위를 한 곳에서 관리한다면 계산로직이 아니라 글을 읽듯 코드를 이해할 수 있기 때문입니다.