ArrayList 와 LinkedList 같이 JAVA 에서는 List 인터페이스를 구현한 구현체의 객체를 생성할 수 있는데 이번에는
ArrayList 와 LinkedList 메소드로도 생성할 수 있다.
List 생성하기
List<String> asList = Arrays.asList("a","b","c");
List<String> listof = List.of("a","b","c");
Arrays.asList() 와 List.of() 로 각각 List 를 생성
Arrays.asList()
가변인자를 받는다.리턴값은 ArrayList이 아닌 Arrays 클래스의 내부 클래스 ArrayList 이다. 도한 AbstractList 추상클래스의 메서드를 오버라이딩한 목록이 있는데, 그중 add() 와 remove() 오버라이딩 하지 않고 set() 오버라이딩한걸 확인할 수 있다. 그러므로 Arrays.asList() 에 의해 생성되는 ArrayList는 삽입, 삭제로 이뤄지는 구조적인 변경을 허용하지 않고 내부 원소들의 값을 변경하는건 허용하는걸 알 수 있다.
List.of()
인자값이 하나 또는 두개를 받는 List와 세개 이상을 받는 List가 다르다.
List 이름에서도 알 수 있다시피 List12는 리스트 원소가 1개 또는 2개만을 관리하고, ListN은 N개의 리스트를 관리하는걸 알 수 있고 그 목적에 맞게 메서드가 오버라이딩 된 걸 확인할 수 있습니다.
AbstractImmutableList라는 추상클래스를 상속받은걸로 보아 List.of() 메서드에 리턴되는 List는 불변하다는걸 알 수 있으며 376, 377, 423 Line을 보게되면 생성자 인자로 들어오는 값들을 하나씩 Null 체크를 하는걸보니 Null값이 오면 NPE가 발생되는걸 확인할 수 있습니다.
그리고 add(), remove(), set(), replace()처럼 삽입, 삭제, 변경작업을 하게 될시 UnsupportedOperationException 예외가 발생됩니다. 즉, 이름 그대로 Immutable한 Collection 입니다.
정리
기능 // Arrays.asList // List.of
삽입(add) // 불가능 // 불가능
삭제(remove) / 불가능 // 불가능
변경(set,replace) // 가능 // 가능
Null 허용여부 // 허용x // 허용x
각 원소에 대한 Null 허용여부 // 허용 // 허용x