자바 Array와 ArrayList의 차이?

·2023년 10월 25일
0

자바에서는 연속된 데이터를 배열로 나타낼 때 Array 또는 ArrayList 를 사용할 수 있다. 둘은 무슨 차이가 있고, 왜 ArrayList 사용을 권장할까?


Array, 배열이란 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여해놓은 자료구조이다.
배열의 각 인덱스는 각 항목의 데이터를 읽거나 저장하는데 사용되며, 아래와 같이 배열 이름 옆에 있는 대괄호 [ ]에 기입된다. 인덱스는 0부터 시작한다.

String[] weeks = new String[7]; // 길이가 7인 array 생성

weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";

ArrayList, 리스트란 자바의 List 인터페이스를 상속받은 여러 클래스 중 하나이다. 배열과 동일하게 연속된 메모리 공간을 사용하며 인덱스는 0부터 시작한다.

import java.util.ArrayList;

ArrayList weeks = new ArrayList();

weeks.add("월");
weeks.add("화");
weeks.add("수");

Array와 ArrayList의 가장 큰 차이점은 '크기'이다.
Array는 배열의 크기가 고정되어 있는 반면 ArrayList는 배열의 크기가 가변적이다.

ArrayList를 권장하는 이유도 아마 ArrayList가 가변적이기 때문이지 않을까 생각된다....


출처 :
https://hongong.hanbit.co.kr/java-%EC%9E%90%EB%B0%94-%EB%B0%B0%EC%97%B4array-%EC%84%A0%EC%96%B8%ED%95%98%EA%B3%A0-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0/, https://psychoria.tistory.com/765

1개의 댓글

comment-user-thumbnail
2023년 10월 26일

안녕하세요, 릴리 님. 팀 201의 민트입니다!
Array와 ArrayList의 차이점에 대해서 잘 정리하셨네요.
피드백 남기겠습니다!

Array는 배열의 크기가 고정되어 있는 반면 ArrayList는 배열의 크기가 가변적이다.

ArrayList는 고정적인 크기를 가지지 않고, 크기가 동적으로 늘어날 수 있다는 점을 잘 작성하신 것 같아요.
그렇다면 ArrayList의 크기는 어느 시점에, 어느정도의 크기를 늘릴까요??

(프리코스 진행하시느라 바쁘실 테니 미리 답을 남기겠습니다.)
ArrayList는 원소를 추가하여 size가 capacity(ArrayList의 크기)와 같아지는 시점에, capacity를 (capacity + capacity/2) 만큼의 크기로 늘립니다.
잘 정리된 내용이 있어서 블로그 링크 남깁니다.

추가로 말씀드리고 싶은 내용은, ArrayList는 Collection의 API를 사용할 수 있다는 점입니다.
이게 무슨 말인지 Array와 ArrayList에 각각 원소를 추가하는 예시를 통해 살펴보죠.

// Array 원소 추가
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;

// ArrayList 원소 추가
List<Integer> arrayList = new ArrayList<>();
arrayList.addAll(List.of(1, 2, 3));

위와 같이, ArrayList는 addAll() 이라는 메서드를 통해 원소를 추가할 수 있습니다.
Array의 원소 추가 방식에 비해 훨씬 깔끔하죠?

그리고, 다른 List 구현체 중 하나인 LinkedList도 예시를 통해 살펴봅시다!

List<String> linkedList = new LinkedList<>();
linkedList.addAll(List.of("이것도", "addAll", "되네"));

LinkedList 역시 addAll() 이라는 메서드를 사용하고 있죠.

이는 ArrayList와 LinkedList가 모두 Collection을 상속하고 있기 때문입니다.
addAll() 메서드는 Collection에 정의되어 있기 때문에 이를 상속하는 ArrayList, LinkedList가 모두 같은 메서드를 사용할 수 있는 것이죠.
이에 대한 내용을 더 공부하고 싶다면, Java의 Collection에 대해 알아보시면 좋을 것 같습니다.
해당 키워드 관련 블로그도 남깁니다. 프리코스 진행하시느라 매우 바쁘겠지만, 시간적 여유가 되신다면 가볍게 훑어보셔도 좋습니다 ㅎㅎ

이번 주차 피드백은 이정도로 마무리하겠습니다.
더 궁금한 내용이 있거나, 물어보고 싶은 것이 있다면 언제든 201 앱을 통해서 채팅 남겨주세요! 함께 고민해보겠습니다.
프리코스로 바쁜 와중에도 스터디 활동하느라 고생 많으셨습니다. 남은 프리코스도 파이팅입니다👏
다음 주차 스터디에서 봬요!!

답글 달기