[JAVA] Arrays.asList 와 List.of 차이

yeonjoo913·2023년 8월 4일

JAVA

목록 보기
10/19

Arrays.asList 와 List.of를 사용할 일은 많이 없지만 종종 생각날때가 있다.
ArrayList를 사용해야 할때 쓸까...하다가 여러이유로 안쓰게되는데 이 두가지 리스트에 대해 이 기회에 정리를 좀 해보고자한다.

자바에서 리스트를 만드는 방법

  • 생성자로 직접 리스트 객체를 인스턴스화
  • Arrays.List() - 배열을 리스트로 변환하는 메소드
  • List.of() - List 인터페이스의 디폴트 메소드인 정적 팩토리 메소드

Arrays.asList 와 List.of 차이

  1. 리스트 변경 가능 여부
  • 메소드를 통해 리스트를 만들 경우 반환되는 리스트들은 불변 리스트이므로 요소를 리스트에 추가,삭제가 불가능하다

  • Arrays.asList는 변경이 가능하기 때문에 Thread-Safe 하지 않고, List.of는 완전 불변하기 때문에 쓰레드에 안전하다.

원소 추가/삭제set사용
new ArrayList()OO
Arrays.asList()XO
List.of()XX
  • Arrays.asList의 반환 리스트는 java.util.ArrayList가 아니다.
    Arrays.asList를 까보면 컬렉션 프레임워크 클래스가 아닌 Arrays클래스 내부에 있는 static inner class 이므로 완전 다른놈이다.

  • List.of의 반환 리스트도 ArrayList가 아니다.
    까보면 ImmutableCollections 객체의 내부 클래스인 List12 객체를 생성하는 것을 볼 수 있다
  1. 리스트 내부 배열 참조 여부
  • Arrays.asList()는 참초한 원본 배열의 값이 바뀌면 리스트의 값도 바뀌고, 반대로 List의 값을 수정해도 원본 배열의 값도 바뀐다.
  • List.of()는 참조한 원본 배열의 값이 바뀌어도 리스트의 값은 바뀌지 않는다.
  1. Null 값을 가질 수 있는지 여부
  • Arrays.asList()는 원소에 NUll을 가질 수 있다.
  • List.of()는 원소에 Null을 가질 수 없다.
profile
주니어 백엔드 개발자. 까먹는다 기록하자!

1개의 댓글

comment-user-thumbnail
2023년 8월 4일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기