List 인터페이스에서 List.of 의 오버로드 vs 가변인수
- Coding/Java
- 2021. 8. 1.
반응형
728x90
반응형
List.of 오버로드
List 인터페이스의 of 메소드를 보면 아래와 같이 다양한 오버로드 버전이 있다.
static <E> List<E> of() {
return ImmutableCollections.emptyList();
}
static <E> List<E> of(E e1) {
return new ImmutableCollections.List12<>(e1);
}
static <E> List<E> of(E e1, E e2) {
return new ImmutableCollections.List12<>(e1, e2);
}
static <E> List<E> of(E e1, E e2, E e3) {
return new ImmutableCollections.ListN<>(e1, e2, e3);
}
...
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
e6, e7, e8, e9, e10);
}
가변인수
static <E> List<E> of (E... elements)
가변인수 사용시, 추가 배열을 할당해서 리스트로 감싼다. 배열을 할당하고 초기화하며 나중에 가비지 컬렉션을 하는 비용을 지불해야한다. 하지만 위의 코드처럼 고정된 숫자의 요소를 API로 정의하여 이런 비용을 제거할 수 있다. 위에서 봤듯이, List.of 메소드는 인수 10개의 요소를 가진 리스트까지만 만들수 있고 그 이상의 요소는 가변인수를 이용하는 메소드가 사용된다.
static <E> List<E> of(E... elements) {
switch (elements.length) { // implicit null check of elements
case 0:
return ImmutableCollections.emptyList();
case 1:
return new ImmutableCollections.List12<>(elements[0]);
case 2:
return new ImmutableCollections.List12<>(elements[0], elements[1]);
default:
return new ImmutableCollections.ListN<>(elements);
}
}
반응형
'Coding > Java' 카테고리의 다른 글
[Java8] Map의 key 가 null 일 경우 처리 방법 (0) | 2021.08.02 |
---|---|
[Java8] Map의 forEach, Sort, Remove (0) | 2021.08.02 |
Java8 컬렉션 팩토리 생성 (List, Map, Set) (0) | 2021.08.01 |
[Java8] Stream counting 개수 얻기 (0) | 2021.07.27 |
[Java] List<String>의 각 원소 고유문자 리턴하기 - Stream 평면화 과정 (flatMap 사용) (0) | 2021.07.26 |