Java 프로그래밍을 하다 보면 List와 ArrayList를 자주 접하게 됩니다. 두 용어는 비슷해 보이지만 서로 다른 개념이며, 각각의 역할과 특징이 분명히 존재합니다. 이 글에서는 List와 ArrayList의 차이점을 명확하게 정리해 드립니다.
List란 무엇인가?
List는 Java 컬렉션 프레임워크(Collection Framework)에 속한 인터페이스(Interface)입니다. 인터페이스이기 때문에 직접 객체로 생성(인스턴스화)할 수 없으며, 이를 구현한 클래스를 통해서만 사용할 수 있습니다.
인터페이스(Interface)입니다.
Collection 프레임워크를 확장(extends)합니다.
직접 인스턴스화(객체 생성)할 수 없습니다.
요소나 객체들의 목록(list)을 만들 때 사용됩니다.
목록에 저장된 객체들은 각각의 인덱스(index) 번호와 연결됩니다.
순서(sequence)대로 저장되는 요소들의 컬렉션을 생성합니다.
저장된 요소는 인덱스를 통해 식별하고 접근할 수 있습니다.
ArrayList란 무엇인가?
ArrayList는 클래스(Class)로, 실제로 객체를 생성하여 사용할 수 있는 구현체입니다. 내부적으로 동적 배열(dynamic array) 방식으로 동작하며, List 인터페이스를 구현하고 있기 때문에 List 타입의 변수에 할당하여 사용하는 것이 일반적입니다.
클래스(Class)입니다.
'AbstractList' 클래스를 확장(extends)합니다.
'List' 인터페이스를 구현(implements)합니다.
직접 인스턴스화(객체 생성)할 수 있습니다.
객체들을 담는 동적 배열(dynamic array)을 생성하는 데 사용됩니다.
객체 배열(object array)을 만듭니다.
배열의 크기를 필요에 따라 동적으로 늘리거나 줄일 수 있습니다.
핵심 차이점 요약
정리하자면, List는 데이터 목록을 다루기 위한 설계도(인터페이스) 역할을 하는 반면, ArrayList는 그 설계도를 바탕으로 실제 구현된 클래스입니다. 따라서 일반적으로 아래와 같은 형태로 선언하여 사용하는 것이 권장됩니다.
List<String> list = new ArrayList<>();이처럼 인터페이스 타입으로 선언하면, 나중에 LinkedList 등 다른 List 구현체로 손쉽게 교체할 수 있어 코드의 유연성과 유지보수성이 향상됩니다.