연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법입니다. 배열을 이용하면 하나의 변수에 여러 정보를 담을 수 있고, 반복문과 결합하면 많은 정보도 효율적으로 처리할 수 있습니다.
출처: https://chanyeong.com/blog/post/49
Array는 실제 메모리 상에서, 즉 물리적으로 데이터가 순차적으로 저장됩니다. 따라서 어느 자리에 있는지 번호로 지정할 수 있으며, 이 번호를 index라고 합니다.
Index를 가지고 있기 때문에 데이터에 바로 접근이 가능합니다.
→ 시간 복잡도를 O(1)로 갖게 되며 자료구조의 크기가 클수록 효율적입니다.
삽입과 삭제가 오래 걸립니다.
순차적으로 데이터를 저장하는 것은 Array의 특징이자 단점이 될 수 있습니다.
출처: https://beginnersbook.com/2013/12/java-arraylist/
Array의 중간 요소를 삭제할 경우, 뒤에 있는 데이터를 삭제한 요소 수 만큼 앞으로 이동시켜줘야 합니다.
배열의 크기가 정적입니다.
데이터를 새로 추가할 때 Resizing 문제가 생길 수 있습니다. Resizing이란 메모리의 사이즈를 다시 조정한다는 뜻입니다.
배열은 메모리를 순차적으로 채우며, 처음 생성될 때 메모리를 미리 할당(pre-allocation)합니다.
메모리를 미리 할당하면서 새로 추가되는 요소들도 순차적으로 메모리에 저장 될 수 있습니다. 하지만 처음 할당한 사이즈보다 많아진다면 resizing이 필요합니다.
배열 특성상 추가적으로 할당 된 메모리 또한 순차적으로 들어가야 하기 때문에 상대적으로 오래걸립니다.
따라서 배열의 데이터를 삭제하고 추가할 때 실제 메모리 상에서 이루어지는 작업이 커서, 보통 정보가 자주 삭제/추가 되는 데이터일 경우 배열을 사용하지 않습니다.