본문 바로가기
개발

일급 컬렉션

by 상5c 2020. 3. 28.

jojoldu님의 블로그 글을 참고하여 일부 재작성함.

컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다.

일급 컬렉션 예

public class Position {

    private final Map<String, String> positions;

    public Position(Map<String, String> positions) {
            this.positions = positions;
    }
}
    @Test
    void test() {
            Map<String, String> carPositionMap = new HashMap<>();
            map.put("1", "A");
            map.put("2", "B");

            Position carPosition = new Position(carPositionMap);   // 이후로 carPosition의 positions는 불변이 유지된다.
    }

Wrapping으로 인해 얻는 것

  • 비즈니스에 종속적인 자료구조
  • Collection의 불변성
    • 생성자를 통해 Collection을 생성하고 이후 컬렉션 변경 기능을 하는 메소드를 만들지 않는다.
    • 이로 인해 positions는 final이기 때문에 재할당이 불가능 하고 put을 할 수 없기 때문에 내부 값의 변경이 불가능하다.
  • 상태와 행위를 한 곳에서 관리 (!!)
    • 클래스 내부에 각각 목적에 맞는 로직을 갖게 된다.
  • 이름을 지어줄 수 있다.
    • 변수명이 아닌 클래스를 만들게되면

final이 불변이 아닌 재할당 불가임을 보여주는 예

    final Map<String, String> map = new HashMap<>();
    map.put("1", "asd");               // final 이지만 객체가 변한다.
    System.out.println(map.get("1"));  // asd가 출력된다.

    map = new HashMap<>();             // 컴파일 단계에서 에러가 발생한다.

참조