• 이 장의 내용
    • 컬렉션 팩토리 사용하기
    • 리스트 및 집합과 사용할 새로운 관용 패턴 배우기
    • 맴과 사용할 새로운 관용 패턴 배우기
  • 컬렉션 팩토리
    • Java 9에서는 작은 컬렉션 객체를 쉽게 만들 수 있는 몇 가지 방법 제공

    • 아래의 코드와 같은 이유료 작은 컬렉션에 대한 팩토리 세머드를 제공함

    • 예시 코드(컬렉션 팩토리 코드가 아닌 예시)

      // 3개의 문자열 List를 만드는데 많은 코드를 사용
      List<String> friends = new ArrayList<>();
      friends.add("Raphael");
      friends.add("Olivia");
      friends.add("Thibaut");
      
      // 위 같은 결과물을 내는 코드 단순화
      // 하지만 배열을 사용하는 코드이므로 고정 크기의 가지므로 추가/삭제 불가능
      // 추가/삭제를 시도하는 경우 UnsupportedOperationException 발생
      // 내부적으로 고정된 크기의 변할 수 없는 배열로 구성되었을 때 방생하는 예외
      List<String> friends = Arrays.asList("Raphael", "Olivia", "Thibaut");
      
    • 리스트 팩토리

      • List.of()를 이용해서 간단하게 리스트를 만들 수 있음
      • 하지만 리스트에 요소를 추가/삭제하는 것은 불가능(변경할 수 없는 리스트를 생성)
      • 추가/삭제를 막아서 컬렉션이 의도치 않게 변하는 것을 막고 있으나 요소 자체가 변하는 것은 막을 수 없음
      • 리스트를 바꿔야 하는 상황이라면 직접 리스트를 만들어 사용
      • 또한 null요소는 금지하고 있으므로 의도치 않은 버그를 방지할 수 있음
      • 오버 로딩 가변 인수
        • List.of()는 다양한 오버로드 버전을 가짐
        • 이유는 내부적으로 가변 인수 버전은 추가 배열을 할당해서 리스트로 감싸는데, 따라서 배열을 할당하고 초기화하며 나중에 가비지 컬렉션을 하는 비용을 지불해야함
        • 즉 개수만큼 배열이 생성이 되는 것!!!!!
        • 고정된 숫자의 요소(최대 10)를 API로 정의하므로 이런 비용을 제거
        • 10개 인수를 초과하는 리스트를 만들 때는 가변 인수를 이용하는 메서드 사용됨
        • 277P