ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

List

정의
여러 값을 순서대로 저장하고, 상황에 따라 삽입/삭제가 쉬운 형태로 확장되는 자료구조입니다.

“List”는 보통 두 의미로 쓰입니다. (1) 추상 자료형(ADT)으로서의 List(순서가 있는 컬렉션), (2) 실제 구현체로서의 ArrayList(동적 배열) / LinkedList(연결 리스트) 입니다.

실무에서는 “List를 쓴다” = 대부분 ArrayList 같은 동적 배열 기반 리스트를 의미합니다. 하지만 삽입/삭제가 많은 상황에서는 LinkedList가 유리할 수 있어요(단, 항상 그런 건 아닙니다).

핵심 메시지

“List는 하나가 아니다.
같은 ‘리스트’라도 구현체(ArrayList / LinkedList)에 따라 성능이 달라진다.”

- 자료구조 선택은 ‘기능’이 아니라 ‘패턴’으로 한다 -
핵심 특징
List는 순서가 있는 컬렉션이며, 보통 중복을 허용합니다.

List는 “집합(Set)”과 달리 순서를 유지하고, 같은 값이 여러 번 들어갈 수 있습니다. 또한 인덱스로 접근할 수 있는지(빠른 랜덤 접근)는 구현체에 따라 달라집니다.

💡 TIP / 참고사항

자바에서 List는 인터페이스이고, ArrayList/LinkedList는 구현체입니다.
따라서 변수 타입은 List로 두고, 내부 구현체는 상황에 맞게 선택하는 게 일반적입니다.

 

종류
같은 List라도 내부 구조가 달라서 강점이 다릅니다.

https://develop-enchantment.tistory.com/384

 

 

💡 TIP / 참고사항

“삽입/삭제가 많으니 LinkedList!”는 반쯤만 맞는 말입니다.
LinkedList는 원하는 위치를 찾는 비용이 먼저 O(n)이라서, 실제로는 ArrayList가 더 빠른 경우도 많습니다.
특히 순회/조회가 많으면 ArrayList가 거의 항상 유리합니다.

 

GOOD vs BAD
List 선택은 작업 패턴으로 결정됩니다.

👍 GOOD

  • 조회/순회가 많다 → ArrayList
  • 인덱스 기반 연산(투 포인터/DP)이 필요하다 → ArrayList
  • 중간 삽입/삭제가 많고, 삽입 위치를 이미 알고 있다 → LinkedList 가능

👎 BAD

  • “연결 리스트가 삽입 빠르다”만 믿고 무조건 LinkedList 선택
  • 랜덤 접근이 많은데 LinkedList로 get(i) 반복
  • 빈번한 중간 삭제 때문에 매번 위치 탐색까지 발생하는 시나리오
실무 관점에서의 결론
대부분의 경우, 기본값은 ArrayList입니다.

실무에서 List는 조회/순회가 압도적으로 많고, 캐시 효율이 중요한 경우가 많아서 ArrayList가 보통 더 잘 맞습니다. LinkedList는 “정말로” 노드 삽입/삭제가 핵심이고, 그 위치를 이미 알고 있는 특수 케이스에서만 이점이 큽니다.

✅ 핵심 요약

  • ✔️ List는 “순서가 있는 컬렉션”이고, ArrayList/LinkedList 같은 구현체가 있다.
  • ✔️ ArrayList는 인덱스 접근 O(1) + 캐시 친화적이라 대부분의 상황에서 기본 선택이다.
  • ✔️ LinkedList는 “삽입/삭제 위치를 이미 알고 있는” 특정 패턴에서만 강점이 크다.
728x90