“List”는 보통 두 의미로 쓰입니다. (1) 추상 자료형(ADT)으로서의 List(순서가 있는 컬렉션), (2) 실제 구현체로서의 ArrayList(동적 배열) / LinkedList(연결 리스트) 입니다.
실무에서는 “List를 쓴다” = 대부분 ArrayList 같은 동적 배열 기반 리스트를 의미합니다. 하지만 삽입/삭제가 많은 상황에서는 LinkedList가 유리할 수 있어요(단, 항상 그런 건 아닙니다).
“List는 하나가 아니다.
같은 ‘리스트’라도 구현체(ArrayList / LinkedList)에 따라 성능이 달라진다.”
List는 “집합(Set)”과 달리 순서를 유지하고, 같은 값이 여러 번 들어갈 수 있습니다. 또한 인덱스로 접근할 수 있는지(빠른 랜덤 접근)는 구현체에 따라 달라집니다.
💡 TIP / 참고사항
자바에서 List는 인터페이스이고, ArrayList/LinkedList는 구현체입니다.
따라서 변수 타입은 List로 두고, 내부 구현체는 상황에 맞게 선택하는 게 일반적입니다.
https://develop-enchantment.tistory.com/384
💡 TIP / 참고사항
“삽입/삭제가 많으니 LinkedList!”는 반쯤만 맞는 말입니다.
LinkedList는 원하는 위치를 찾는 비용이 먼저 O(n)이라서, 실제로는 ArrayList가 더 빠른 경우도 많습니다.
특히 순회/조회가 많으면 ArrayList가 거의 항상 유리합니다.
👍 GOOD
- 조회/순회가 많다 → ArrayList
- 인덱스 기반 연산(투 포인터/DP)이 필요하다 → ArrayList
- 중간 삽입/삭제가 많고, 삽입 위치를 이미 알고 있다 → LinkedList 가능
👎 BAD
- “연결 리스트가 삽입 빠르다”만 믿고 무조건 LinkedList 선택
- 랜덤 접근이 많은데 LinkedList로 get(i) 반복
- 빈번한 중간 삭제 때문에 매번 위치 탐색까지 발생하는 시나리오
실무에서 List는 조회/순회가 압도적으로 많고, 캐시 효율이 중요한 경우가 많아서 ArrayList가 보통 더 잘 맞습니다. LinkedList는 “정말로” 노드 삽입/삭제가 핵심이고, 그 위치를 이미 알고 있는 특수 케이스에서만 이점이 큽니다.
✅ 핵심 요약
- ✔️ List는 “순서가 있는 컬렉션”이고, ArrayList/LinkedList 같은 구현체가 있다.
- ✔️ ArrayList는 인덱스 접근 O(1) + 캐시 친화적이라 대부분의 상황에서 기본 선택이다.
- ✔️ LinkedList는 “삽입/삭제 위치를 이미 알고 있는” 특정 패턴에서만 강점이 크다.