Java 의 배열 vs List

scminy0527·2026년 2월 28일
post-thumbnail

— 왜 실무에서는 List를 더 많이 사용할까?

자바를 처음 배우면 가장 먼저 배우는 자료구조는 배열(Array) 이다.

int[] arr = new int[5];

배열은 빠르고 단순하다.
하지만 실제 개발을 하다 보면 곧 한계를 느끼게 된다.


1. 배열의 한계

길이가 고정되어 있다

int[] arr = new int[3];
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;

// 여기서 하나 더 추가하고 싶다면?

길이를 늘릴 수 없다.


원소 추가/삭제가 번거롭다

예를 들어,
중간에 값을 삽입하려면?

int[] arr = {10, 20, 30, 40};

20 뒤에 25를 넣고 싶다면:

int[] newArr = new int[arr.length + 1];

for(int i = 0; i < arr.length; i++) {
    if(i < 2) {
        newArr[i] = arr[i];
    } else {
        newArr[i + 1] = arr[i];
    }
}

newArr[2] = 25;

👉 코드가 길어지고 실수 가능성 증가.


2. List를 사용하면?

ArrayList<Integer> list = new ArrayList<>();

list.add(10);
list.add(20);
list.add(30);
list.add(40);

list.add(2, 25); // 인덱스 2에 삽입

끝.

👉 내부에서 배열 복사, 길이 증가 등을 자동으로 처리한다.


3. 삭제도 훨씬 간단

배열:

// 특정 값 삭제 → 새 배열 생성 후 복사 필요

List:

list.remove(Integer.valueOf(20));

또는

list.remove(1); // 인덱스 삭제

4. 동적 크기 증가의 장점

ArrayList는 내부적으로 배열을 사용하지만,

  • 공간이 부족하면
  • 보통 1.5배~2배 크기로 자동 증가

그래서 성능도 나쁘지 않다.


5. 배열을 List로 변환하기

1) 기본 배열 → List

int[] arr = {1, 2, 3, 4};

ArrayList<Integer> list = new ArrayList<>();

for(int num : arr) {
    list.add(num);
}

2) String 배열 → List (간단 버전)

String[] arr = {"A", "B", "C"};

List<String> list = Arrays.asList(arr);

⚠ 단, 이 경우는 고정 크기 리스트라서 add/remove 불가.

완전한 ArrayList로 만들려면:

List<String> list = new ArrayList<>(Arrays.asList(arr));

6. List를 배열로 변환하기

1) List → int 배열

ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);

int[] arr = new int[list.size()];

for(int i = 0; i < list.size(); i++) {
    arr[i] = list.get(i);
}

2) List → String 배열

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");

String[] arr = list.toArray(new String[0]);

7. 언제 배열을 쓰고, 언제 List를 쓸까?

상황배열List
길이가 고정가능
동적 추가/삭제
단순 반복
실무 CRUD

8. 핵심 정리

배열은

정적인 구조

List는

동적인 구조


느낀 점

배열만 사용하던 시절에는

  • 길이 조절
  • 삽입
  • 삭제

가 매우 번거로웠다.

하지만 List를 사용하면

"데이터 관리"에 집중할 수 있다.

내부 구현은 자바가 대신 해준다.


한 줄 정리

배열은 저장 공간
List는 데이터 관리 도구

profile
비전공자에서 시작해 Flutter로 실서비스를 만들었고, 더 깊은 개발을 향해 계속 성장 중인 개발자

0개의 댓글