1. 일급 컬렉션이란 ?

: 컬렉션을 감싸는 래퍼 클래스

사람들이 블로그에 적어놓는 부분은 굉장히 정의가 심플하다. 정말 이걸로 끝일까?

2. 일급 컬렉션을 사용했을 때 이점 4가지

식당 클래스를 다시 보도록하자

// first case
class Food{
    private String name;

    public Food(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Food{" +
                "name='" + name + '\\'' +
                '}';
    }
}

public class Restaurant{
    private List<Food> menu;
    public Restaurant(List<Food> menu){
        this.menu = menu;
    }

    public List<Food> getAllFoodByCondition(Predicate<Food> predicate){
        return menu.stream().filter(predicate).collect(Collectors.toList());
    }

    public static void main(String[] args){

        List<Food> list = List.of(new Food("1"),new Food("2"),new Food("tomato"),new Food("3"));

        Restaurant restaurant = new Restaurant(list);
        System.out.println(restaurant
                .getAllFoodByCondition(
                        food->!food.getName().equals("tomato"))
        );
    }
}

식당 객체에 안에 있는 list가 변경될 수 있는지 확인해보아라.

변경될 수 없다는 것을 알 수 있다. 즉 불변하다.

이러한 불변한다는 점은 어떠한 요청이 들어오더라도 어느정도 일정한 퀄리티의 반환을 할 수 있게 만드는 안정성을 보장한다.

일급 컬렉션은 정보를 가지고 있는 컬랙션(데이터 컬랙션이라고 지칭하겠다.)이 래퍼 클래스에 들어가 있고 데이타 컬랙션에 대한 모든 메소드와 로직을 일급 컬랙션 안에서 관리를 하는 형태이다.

  1. 따라서 구현 로직을 숨길 수 있고
  2. 유지 보수가 쉬워지며
  3. 가독성이 높아진다.

기존의 데이터 컬렉션이 여러개 있다면 그 컬렉션은 변수명으로 각각의 컬렉션을 구분할 수 밖에 없었다.