내용의 모든 출처는 부트캠프 위코드입니다.
https://wecode.co.kr/
가장 기초적이고 단순하면서도 가장 자주 사용되는 자료 구조.
순차적으로 데이터를 저장하는 자료 구조
자료구조에 저장하는 데이터는 일반적으로 요소라고 함
실제 메모리 상에서, 즉 물리적으로 데이터가 순차적으로 저장되기 때문
(데이터에 순서가 있기 때문에...)
인덱스가 존재하며 인덱스를 통해 특정 요소를 어레이에서 읽어들일 수 있고,
요소의 특정 부분, 즉 n번째 인덱스부터 m번째 인덱스까지 분리하여 조작이 가능하다(slicing)
순차적으로 담겨있는 데이터 중 특정 위치에 있는 중간의 요소가 삭제되는 경우에,
항상 메모리가 순차적으로 있어야해서 삭제 요소의 뒤 요소들은 앞으로 한칸씩 이동해야한다.
이는 배열에서 요소를 삭제하는 것이 다른 자료 구조에 비해 느릴 수 있다는 뜻이다
중간에 요소가 추가되는 경우도 마찬가지. (추가되는 요소의 뒷 요소들이 하나씩 밀리게됨)
따라서, Array는 정보가 자주 삭제되거나 추가되는 데이터를 담기에는 적절치 않다.
느리기 떄문. 수정에 따라 곁(뒤)에 있는 데이터들이 이동해야 하며, 한줄의 코드지만
실제 메모리 상에서 이루어지는 작업은 커짐(복잡해짐? 이라기 보단 일을 한 번 더 해야함)
Resizing이란, 사이즈를 다시 조정한다는 뜻.
배열은 메모리가 순차적으로 채워지기 때문에 배열이 처음 생성될 때 어느 정도 메모리를 미리 할당한다. (이를 전문 용어로, pre-allocation이라고 함)
메모리를 pre-allocaiont 함으로써 새로 추가되는 요소들도 순차적으로 메모리에 저장될 수 있다.
하지만 요소들이 처음 할당한 메모리 이상으로 많아진다면 resizing이 필요함
(즉, 메모리를 더 할당해야 함)
그리고 추가적으로 할당된 메모리 또한 순차적이어야한다
그럼으로 배열의 resizing은 상대적으로 오래 걸리는 operation이다.
100개의 메모리 공간이 다 차서 100개를 추가해야 되는경우, 200개 크기의 메모리를 생성,
기존 100개를 복사하고 그 다음 101번부터 데이터가 순차적으로 추가된다.(단순하다)
따라서 어레이는 사이즈 예측이 잘 안 되는 데이터를 다루기에는 적절치 않다.
사이즈가 급격하게 자주 늘어날 확률이 있는 데이터는 array 말고 더 적합한 자료구조를 선택해야한다는 것