Array
특징
- 가장 큰 특징은 순차적으로 데이터를 저장한다는 것이다.
- 주로 서로 연결된 데이터들을 순차적으로 저정할때 사용한다.
- 순서가 상관 없더라도 서로 연결된 데이터들을 저장할때 일반적으로 사용된다.
- 이미 생성된 리스트도 수정 가능하다.
- 동일한 값도 여러번 삽입 가능하다.
- Multi-dimensional Array(다중차원 배열)이다.
내부구조
- 순서가 있다보니 당연하 순차적으로 번호를 지정할 수 있다. 이 번호를 index라고 한다.
- index는 0부터 시작되며 마이너스 부호를 가질 수도 있다. 마이너스 index는 맨 마지막 요소부터 시작한다. 예를 들어 맨 마지막 요소의 index는 -1이다.
단점
1. Removing or Adding Elements
중간의 특정 요소를 삭제해야 하는 경우
순차적으로 담겨있는 데이터 중 특정 위치에 있는 중간의 요소가 삭제 되는 경우에, 항상 메모리가 순차적으로 이어져있어야 하기 때문에, 삭제된 요소로부터 뒤에 있는 모든 요소들을 앞으로 한칸씩 이동시켜주어야 한다.
그러므로 배열에서 요소를 삭제하는 것은 다른 자료구조에 비해 느릴 수 있다.
요소를 삭제하는 과정이 코드 상에서는 한 줄 이지만 실제 메모리 상에서 이루어지는 작업은 훨씬 커진다.
중간에 요소가 추가 되는 경우도 마찬가지이다. 특정 위치에 새롭게 요소가 추가되는 경우에는 그 뒤의 요소들이 하나씩 밀리게 된다.
그렇기 때문에 Array는 정보가 자주 삭제 되거나 추가되는 데이터를 담기에는 적절치 않다.
2. Array Resizing
배열은 메모리가 순차적으로 채워지기 때문에 배열이 처음 생성될 때 어느정도 메모리를 미리 할당한다.
메모리를 할당 함으로써 새로 추가되는 요소들도 순차적으로 메모리에 저장될 수 있다.
하지만 요소들이 처음 할당한 메모리 이상으로 많아지면 resizing이 필요하다.
즉 메모리를 추가 할당해야한다. 그리고 추가적으로 할당된 메모리 또한 순차적이어야 하기때문에 resizing은 오래걸리는 작업이다.
그렇기 때문에 Array는 사이즈 예측이 잘 안되는 데이터를 다루기에 적절치 않다.