컬렉션 API 개선

컬렉션 팩토리

리스트 팩토리

[오버로딩 vs 가변 인수]

List.of() 구현은 다양한 오버로드 버전이 있다.

왜 그럼 다중 요소를 받을 수 있도록 자바 API를 만들지 않을 것일까?

static <E> List<E> of<E... elements)

→ 내부적으로 가변 인수 버전은 추가 배열을 할당해서 리스트로 감싼다.

→ 가변 인수는 컴파일 시 배열로 처리된다.

따라서 배열을 할당하고 초기화하면서 나중에 가비지 컬렉션하는 비용을 지불해야 한다

이펙티브 자바에도 나와 있는 내용인데, 가변 인자는 메서드 호출시마다 배열 새로 하나 할당하고 초기화하기에 성능에 민감한 상황에서는 마이너스 요소가 될 수 있다.

List.of()로 열 개 이상의 요소를 가진 리스트를 만들 수도 있지만 이 때는 가변 인수 이용하는 메서드 사용된다.

그럼 언제 Stream API로 리스트를 만들고, 언제 컬렉션 팩토리 메서드로 리스트 만드냐