채워가는 지식/Java

Arrays.asList()와 List.of() 차이

daco 2024. 2. 20. 10:13

자바에서 리스트를 만드는 방법은 new ArrayList<>(), Arrays.asList(), List.of()가 있는데, 저는 List.of()는 불변이고 나머지는 가변 정도로만 이해하고 있었습니다.

 

어느날 팀원이 알려주신 자바 리스트에 대한 블로그 글을 보니 좀 더 세밀한 차이점이 있었고, 잘 알고 적재적소에 사용한다면 좋을 것 같다는 생각이 들어서 글을 쓰게 되었습니다.

각 리스트 비교 표

  add/remove 가능 set 가능 원소 null 허용 참조 배열 복사 깊이
new ArrayList<>() o o o -
Arrays.asList() x o o 얕은 복사
List.of() x x x 깊은 복사

 

표에 나타나 듯이 add/remove, set이 불가능한 List.of()는 완전 불변이고, add/remove만 불가능한 Arrays.asList()는 반만 불변입니다.

 

그렇다면 불변의 이점은 무엇일까요?

  • 스레드 안정성: 불변 객체는 추가, 삭제가 안되기 때문에 동기화 없이도 여러 스레드에서 안전하게 공유하고 액세스할 수 있습니다.
  • 코드 간소화: 불변 객체는 동시성을 위해 설계할 필요가 없으므로 코드가 간소화되고 버그 가능성이 낮습니다.
  • 향상된 성능: 변경 불가능한 객체는 항상 동일한 상태를 유지하므로 캐시하고 재사용할 수 있습니다.

    ※ 변경 불가능한 컬렉션은 JVM 내에서 캐싱될 수 있다고 합니다.

 

참고 블로그

https://inpa.tistory.com/entry/JAVA-%E2%98%95-ArraysasList-%EC%99%80-Listof-%EC%B0%A8%EC%9D%B4-%ED%95%9C%EB%B0%A9-%EC%A0%95%EB%A6%AC

 

🧱 Arrays.asList() 와 List.of() 차이 한방 정리

자바에서 리스트를 만드는 방법 자바에서 리스트를 만드는 방식은 대표적으로 3가지 정도 존재한다. 하나는 생성자로 직접 리스트 객체를 인스턴화 시키는 것이고, 좀 더 간편하게 원소가 들은

inpa.tistory.com