Arrays.asList() / List.of
자바에서 Array를 List으로 변환하기 위해서는 Arrays.asList(array)를 사용한다.
Java 9 버전 부터는 List.of(array)라는 새로운 팩토리 메소드를 도입했다.
그럼 차이점에는 무엇이 있을까?
Arrays.asList()로 반환된 list는 변경이 가능합니다. 하지만, List.of()에서 반환된 메서드는 변경이 불가능합니다.
이유는 Arrays.asList()는 ArrayList를 반환하고, set등이 구현되었습니다. (Arrays 내부 클래스 ArrayList)
반면, List.of()는 ListN이라는 타입의 객체를 반환하는데, 이는 불변 객체(Immutable object)입니다. 따라서 수정할 수 없습니다.
Arrays.asList()는 List.of()보다 힙에 더 많은 개체를 생성하기 때문에 더 많은 오버헤드 공간을 차지합니다. 따라서, 단지 값 요소가 필요한 경우라면 List.of()가 적합합니다.
변환
예를 들어, Array를 ArrayList 또는 HashSet 등으로 변환하기 위해서는, 참조나 변경 가능 여부는 상관없고 요소만 알면 됩니다. 이 때는 List.of()가 적합합니다.
Array.asList()는 null을 허용합니다. List.of()는 반환 객체가 생성될 때, 내부적으로 파라미터들에 대한 null체크를 하고 null을 허용하지 않습니다.
List.of()로 반환된 객체의 contains의 경우 파라미터로 null이 들어오면 NPE(Null pointer exception)이 발생합니다.