
— 왜 실무에서는 List를 더 많이 사용할까?
자바를 처음 배우면 가장 먼저 배우는 자료구조는 배열(Array) 이다.
int[] arr = new int[5];
배열은 빠르고 단순하다.
하지만 실제 개발을 하다 보면 곧 한계를 느끼게 된다.
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;
👉 코드가 길어지고 실수 가능성 증가.
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(2, 25); // 인덱스 2에 삽입
끝.
👉 내부에서 배열 복사, 길이 증가 등을 자동으로 처리한다.
배열:
// 특정 값 삭제 → 새 배열 생성 후 복사 필요
List:
list.remove(Integer.valueOf(20));
또는
list.remove(1); // 인덱스 삭제
ArrayList는 내부적으로 배열을 사용하지만,
그래서 성능도 나쁘지 않다.
int[] arr = {1, 2, 3, 4};
ArrayList<Integer> list = new ArrayList<>();
for(int num : arr) {
list.add(num);
}
String[] arr = {"A", "B", "C"};
List<String> list = Arrays.asList(arr);
⚠ 단, 이 경우는 고정 크기 리스트라서 add/remove 불가.
완전한 ArrayList로 만들려면:
List<String> list = new ArrayList<>(Arrays.asList(arr));
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);
}
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
String[] arr = list.toArray(new String[0]);
| 상황 | 배열 | List |
|---|---|---|
| 길이가 고정 | ✅ | 가능 |
| 동적 추가/삭제 | ❌ | ✅ |
| 단순 반복 | ✅ | ✅ |
| 실무 CRUD | ❌ | ✅ |
배열은
정적인 구조
List는
동적인 구조
배열만 사용하던 시절에는
가 매우 번거로웠다.
하지만 List를 사용하면
"데이터 관리"에 집중할 수 있다.
내부 구현은 자바가 대신 해준다.
배열은 저장 공간
List는 데이터 관리 도구