
동일한 데이터 타입의 요소들을 순차적으로 저장할 수 있는 선형 데이터 구조이다. 각 요소는 인덱스(index)라고 불리는 숫자로 접근할 수 있다.
① 고정된 크기 : 배열은 생성할 때 크기를 지정하며, 그 크기는 일반적으로 변경할 수 없다.
② 인덱스 기반 접근 : 배열의 각 요소는 0부터 시작하는 인덱스를 통해 접근할 수 있다.
③ 동일한 데이터 타입 : 배열은 한가지 데이터 타입으로 이루어져야하며, int/double/boolean이나 참조 모두 배열의 요소가 될 수 있다.
④ 메모리 상 연속적인 할당 : 배열은 메모리 상에 연속적으로 요소들이 할당된다. 이는 인덱스를 통한 빠른 접근을 가능하게 한다.
⑤ 정적인 구조 : 배열의 크기는 생성할 때 결정되며, 실행 중에는 크기를 동적으로 변경할 수 없다. 필요한 경우 새로운 배열을 생성하고 데이터를 복사해야 한다.
데이터 요소들을 순서대로 저장하는 선형 데이터 구조이다. 리스트는 배열과 비슷하지만 차이점이 있다.
① 동적 크기 : 리스트는 크기가 동적으로 조절될 수 있다. 즉, 요소를 추가하거나 삭제할 때마다 크기가 자동으로 조절된다. 이는 배열과 달리 초기에 크기를 지정할 필요가 없다는 뜻
② 원소 타입 자유로움 : 일반적으로 리스트는 같은 데이터 타입의 요소들을 저장하지만, 몇몇 프로그래밍 언어에서는 서로 다른 타입의 요소를 저장할 수 있는 리스트도 지원된다.
③ 인덱스 기반 접근 : 리스트의 각 요소는 인덱스를 사용하여 접근할 수 있다. 일반적으로 0부터 시작하는 인덱스를 사용하며, 리스트의 특정 위치에 있는 요소를 빠르게 접근할 수 있다.
④ Linked List와 Array List : 리스트는 구현 방식에 따라 다양할 수 있다. 연결 리스트는 각 요소가 자신의 다음 요소를 가리키는 포인터를 가지며, 배열 리스트는 내부적으로 배열을 사용하여 요소를 저장
① 메모리 할당 : 배열은 연속적인 메모리 공간에 할당되고, 리스트는 비연속적인 메모리 공간에 할당된다.
② 크기 : 배열은 크기가 고정되어있으며, 리스트는 가변적이다.
③ 삽입과 삭제 : 배열은 삽입과 삭제가 번거롭고 시간이 오래 걸리지만, 리스트는 삽입과 삭제가 빠르다.
벡터(Vector)는 동적 배열로, 배열의 단점을 보완한 자료구조이다.
크기가 가변적이며, 빠른 인덱스 접근이 가능하다. 리스트와의 차이점은 메모리 할당 방식과 접근 방법이다.
① 메모리 할당 : 벡터는 연속적인 메모리 공간에 할당되고, 리스트는 비연속적인 메모리 공간에 할당된다.
② 삽입과 삭제 : 벡터는 중간에 원소를 삽입하거나 삭제할때 원소들을 이동해야하므로 시간이 오래걸릴 수 있지만, 리스트는 삽입과 삭제가 빠르다.
③ 메모리 효율 : 벡터는 메모리를 미리 할당하여 사용하지 않는 공간이 발생할 수 있으나, 리스트는 필요한 만큼의 메모리만 사용한다.
배열을 사용할 예시
① 데이터의 크기가 고정되어 있고, 변경될 일이 없는 경우 : 배열의 크기가 고정되어 있으므로, 변경되지 않는 크기의 데이터를 다룰 때 적합
② 빠른 인덱스 기반 접근이 필요한 경우 : 배열은 연속적인 메모리 공간에 저장되어 있어 인덱스를 통한 접근이 빠르다. 따라서, 특정 위치의 데이터에 빠르게 접근해야 할 때 유용
리스트(List)를 사용할 상황 예시
① 데이터의 크기가 불확실하거나 가변적인 경우 : 리스트는 크기가 가변적이기 때문에, 크기가 불확실하거나 자주 변경되는 데이터를 다룰 때 적합
② 데이터의 삽입과 삭제가 빈번한 경우 : 리스트는 삽입과 삭제가 빠르기 때문에, 데이터를 자주 추가하거나 삭제해야 하는 경우 유용
벡터(Vector)를 사용할 상황 예시
① 데이터의 크기가 가변적이면서 빠른 인덱스 기반 접근이 필요한 경우 : 벡터는 동적 배열로서 크기가 가변적이면서 인덱스 기반 접근이 빠르다. 따라서, 이러한 요구 사항이 있는 경우에 적합
② 데이터의 삽입과 삭제가 빈번하지 않은 경우 : 벡터는 중간에 원소를 삽입하거나 삭제할 때 원소들을 이동해야 하므로 시간이 오래 걸릴 수 있다. 그러나, 삽입과 삭제가 빈번하지 않은 경우에는 벡터의 사용이 적절