배열
연속된 공간에 같은 종류의 데이터를 저장하는 선형적 자료구조
index: 전체 집단에서 그 데이터를 식별해주는 식별자 역할. 배열은 index를 통해 특정 데이터에 접근할 수 있으며 이를 통해 값을 가져오거나 해당 위치에 값을 삽입하고 삭제할 수 있다.
데이터들이 연속된 메모리 공간에 저장되어 있고 인덱스를 통해 순차적으로 접근할 수 있다.
반복문을 이용하면 배열의 모든 요소에 순차적으로 접근할 수 있어 데이터를 처리하거나 수정하는 작업이 간편해진다.
배열은 데이터의 삽입과 삭제가 비효율적일 수 있다.
배열은 메모리 공간에 연속적으로 데이터를 저장하기 때문에 중간에새로운 데이터를 삽입하거나 기존 데이터를 삭제할 때 많은 요소를 이동시켜야 한다. 따라서 배열은 데이터의 삽입과 삭제가 자주 일어나는 경우 적합하지 않을 수 있다.
배열은 생성시 크기가 고정되기 때문에 이후에는 크기를 변경할 수 없다.
만약 배열을 생성할 때 예상보다 더 많은 데이터가 필요해지면 기존 배열을 더 큰 크기로 확장할 수 없고 새로운 배열을 만들어 데이터를 복사해야 한다. 반대로 배열을 너무 크게 생성하면 메모리 공간이 낭비될 수 있다.
정적 배열은 데이터의 크기를 정확히 예측할 수 없거나 크기가 동적으로 변하는 상황에서는 유연하지 못하다.
List
순서가 있는 자료구조로 만들어진 경우는 List Interface를 구현한다.
데이터를 순서대로 저장할 수 있고, 인덱스를 통해 원하는 데이터에 접근할 수 있으며, 삽입과 삭제가 가능하다.
ArrayList
ArrayList는 가변 배열이다. 내부 구현체는 배열을 이용하여 만들어졌다.
ArrayList 인스턴스가 생성되면 기본값 또는 사이즈(직접 지정 가능)에 맞게 배열을 생성한다.
최초 생성 시 물리적인 배열 크기의 기본값은 10이다. (크기 미지정시)
새로운 배열을 만들어서 기존의 값을 Copy하는 단순한 방식으로 이루어져 있다.

만약 ArrayList의 데이터가 삭제될 경우 다음과 같은 작업이 발생한다.

장점
- 배열로 만들어졌기 때문에 인덱스를 통해서 특정 데이터에 빠르게 접근할 수 있다.
단점
- 생성된 배열의 공간이 꽉 찰 때마다 새로운 배열을 생성하고 copy하는 방식이기 때문에 그 과정에서 지연이 발생한다.
- 배열의 데이터를 삭제 시 copy하는 방식이기 때문에 그 과정에서 지연이 발생한다.
- 데이터가 많아질수록 copy에 따른 지연 시간이 늘어난다.
사용 용도
- 데이터의 양이 일관적이고 삽입, 삭제가 빈번하지 않은 경우에 사용한다.
- 데이터의 접근 속도가 중요할 때 사용한다.
ArrayList의 생성

ArrayList에 저장된 논리적 공간의 크기

set(index, value)메서드에서 배열로 생성된 물리적인 공간의 크기는 10이라고 하더라도, 논리적인 공간(size)은 3이기 때문에 인덱스 값이 논리적인 공간을 넘어서 접근할 수 없다.
논리적인 공간을 넘어 접근할 경우 IndexOutOfBoundsException이 발생한다.

ArrayList의 특정 값에 접근

배열처럼 인덱스는 0부터 시작한다.
ArrayList의 값 삭제

* ArrayList는 배열 기반이므로 remove(index) 메서드를 이용한 삭제는 빠르지만, remove(value)메서드를 통해 저장된 값을 찾아 삭제하는 방식은 index 0번부터 순차적으로 찾아 삭제하기 때문에 효율이 좋지 않다.
ArrayList의 논리적인 공간 늘리기

null값으로 채워 논리적인 공간을 늘린다.
ArrayList를 활용한 List 인터페이스 구현

다형성의 특징으로 ArrayList의 참조값을 List 자료형에 저장할 수 있다.
List의 공통적인 인터페이스만 선언되어 있기 때문에 ArrayList의 모든 메서드를 사용할 수는 없다.
참고 : https://www.codelatte.io/courses/java_programming_basic/5N27027VT1DBUAX0
[자바 무료 강의] Collection - List
www.codelatte.io
2. 배열과 리스트 | 자료구조와 알고리즘 기초 (Data Structure and Algorithms)
2. 배열과 리스트
www.inflearn.com
'Back-end > 자료구조' 카테고리의 다른 글
| Stack (0) | 2025.09.09 |
|---|---|
| Graph (3) | 2025.08.29 |
| Vector (0) | 2024.04.18 |
| Collection (List, Set, Map) (0) | 2024.04.17 |
| LinkedList (0) | 2024.04.17 |