Home [Java] List와 ArrayList 차이
Post
Cancel

[Java] List와 ArrayList 차이

자료구조를 공부하다가 리스트 선언에 대한 의문을 가지고 정리하게 되었습니다.

1️⃣ List vs ArrayList

  • List : 인터페이스
    • ArrayList, LinkedList, Vector 등 여러 구현체(클래스)의 공통 규약을 정의합니다.
    • add(), get(), remove() 같은 메서드가 정의되어 있지만 구현은 없습니다.
  • ArrayList : List 인터페이스를 구현한 클래스
    • 내부적으로는 배열로 요소를 관리하며, 요소를 순차적으로 저장합니다.
    • 인덱스로 빠르게 접근할 수 있습니다. - O(1)
    • 중간 삽입/삭제는 느립니다. - O(N)

2️⃣ List<Integer> list = new ArrayList<>(); 의미

  • 인터페이스 타입으로 선언, 구현체로 생성

    • 선언 타입 : List (인터페이스)
    • 실제 객체 : ArrayList (구현체)
  • 장점

    • 나중에 구현체를 쉽게 바꿀 수 있습니다. List<Integer> list = new LinkedList<>();
    • 코드의 유연성(확장성) 증가 : 코드가 인터페이스에만 의존하면, 구현체가 바뀌어도 메서드 변경이 없습니다.
    • 좋은 설계 원칙 : 상위 타입(List)으로 참조 → 구현체 숨김 → OCP(Open-Closed Principle)

3️⃣ ArrayList<Integer> list = new ArrayList<>(); 의미

  • 구현체로 선언, 구현체로 생성

    • 선언 타입 : ArrayList (구현체)
    • 실제 객체 : ArrayList
  • 특징

    • ArrayList에만 있는 특화 메서드를 사용할 수 있습니다.
    • 그러나 대부분의 경우 ArrayList만의 특화 기능은 거의 없습니다.
    • 따라서 불필요하게 구현체에 종속적이 됩니다.

4️⃣ 차이점 : 다형성(polymorphism)

선언 방식다형성구현체 교체유연성
List list = new ArrayList<>();OO유연
ArrayList list = new ArrayList<>();XX덜 유연

언제 ArrayList 타입으로 선언하나?

특별한 이유가 없다면 인터페이스 타입(List)로 선언하는 것이 바람직합니다.
하지만 ArrayList의 고유 메서드를 써야 한다면 ArrayList로 선언해야 합니다.
예: trimToSize(), ensureCapacity()

5️⃣ 전체 비교 정리

구분ListArrayList
타입인터페이스클래스 (구현체)
역할규약만 정의List를 배열 기반으로 구현
구현체 교체유연어려움
This post is licensed under CC BY 4.0 by the author.