ArrayList와 List는 Java에서 자주 사용되는 컬렉션이다.
하지만 ArrayList와 List를 각각 언제 어디서 어떻게 사용하는 것이 적합한지, 그 차이는 무엇인지 궁금해져서 찾아보게 되었다.
List 인터페이스
List는 순서가 있는 요소의 컬렉션을 나타내며, 중복을 허용하는 Java의 인터페이스이다.
Java에서는 List 인터페이스를 구현한 다양한 클래스가 존재하며, 그 중 대표적인 것이 ArrayList인 것이다.
List 인터페이스를 사용함으로써, 다양한 리스트 구현체를 유연하게 사용할 수 있게 된다.
즉, List 타입을 사용하면, 이후에 필요에 따라 다른 리스트 구현체(LinkedList, Vector 등)로 쉽게 전환이 가능해진다.
List<Integer> myList = new ArrayList<>();
위와 같이 선언된 myList는 ArrayList 구현체를 참조하고 있지만, 필요시 아래와 같이 LinkedList로 변경할 수 있다.
List<Integer> myList = new LinkedList<>();
ArrayList 클래스
ArrayList는 List 인터페이스를 구현한 구체적인 클래스이다.
ArrayList는 내부적으로 배열을 사용하여 요소를 관리하므로, 인덱스를 통한 빠른 접근이 가능하지만,
요소를 추가하거나 제거하는 작업에는 비교적 높은 비용이 소요될 수 있다.
따라서, ArrayList는 리스트의 내용을 자주 수정하지 않고, 인덱스를 통해 요소에 빠르게 접근해야 할 때 적합한 선택이라고 한다.
ArrayList<Integer> myList = new ArrayList<>();
위와 같이 선언된 myList는 ArrayList의 구체적인 구현체를 참조하고 있다.
그러나, 이 경우 리스트의 구현체를 변경하려면 코드 전체에서 ArrayList를 다른 구현체로 직접 수정이 필요하다.
차이점
- 유연성: List를 사용하면 다양한 리스트 구현체로 전환할 수 있는 유연성을 제공하지만, ArrayList는 특정 구현체를 직접 사용하는 것이므로 유연성이 상대적으로 떨어짐
- 구체적 구현: ArrayList는 특정 구현체이므로, 이를 직접 사용할 경우 해당 구현체의 성능 특성을 잘 이해하고 있어야 함. 예를 들어, ArrayList는 대량의 데이터를 삽입하거나 삭제할 때 성능 저하가 발생할 수 있음.
- 타입 안정성: List는 인터페이스이기 때문에, 다른 구현체로의 변경이 용이. 반면에, ArrayList는 고정된 구현체이므로 변경 시 코드 수정이 필요.
- 리스트의 구현체를 나중에 변경할 가능성이 있거나, 다양한 리스트 타입을 다루어야 하는 상황에서는 List 를 사용하는 것이 좋음
- 구현체를 고정할 수 있고, ArrayList의 성능 특성이 요구에 부합하는 경우에는 ArrayList를 사용하는 것이 적합
따라서, 대부분의 경우 유연성을 위해 List 인터페이스를 사용하여 변수를 선언하고, 필요에 따라 적절한 구현체(ArrayList, LinkedList 등)를 선택하는 것이 베스트인 셈이다.
'개발 공부 > [java]' 카테고리의 다른 글
| [CS] Java의 원시 타입(Primitive Type)과 참조 타입(Reference Type) (1) | 2025.09.10 |
|---|---|
| [Java]Enum과 final상수 (1) | 2024.11.15 |
| 컬렉션 프레임워크(Collection Framework) (0) | 2024.08.07 |
| 예외(Exception) (0) | 2024.08.07 |
| 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2024.07.31 |