배열 (Array):
배열은 고정된 크기의 요소 집합을 나타내는 데이터 구조.
배열을 생성할 때 크기를 지정하고, 그 크기만큼의 요소를 저장할 수 있음.
요소의 인덱스를 통해 특정 요소에 접근하거나 값을 변경할 수 있음.
배열의 크기는 변경할 수 없으며, 요소를 추가하거나 삭제하기가 어려울 수 있음.
배열은 연속적으로 메모리를 할당.
리스트 (List):
리스트는 동적 크기의 요소 집합을 나타내는 데이터 구조.
크기를 동적으로 조절할 수 있으며, 요소를 추가하거나 삭제하는 것이 쉬움.
리스트는 배열보다 유연하며, 동적으로 크기를 조절할 수 있으므로 요소를 동적으로 관리하기에 적합.
유니티에서는 C#의 List 클래스를 주로 사용합니다.
연결 리스트 (Linked List):
연결 리스트는 데이터 요소가 노드로 구성된 데이터 구조로, 각 노드는 데이터와 다음 노드를 가리키는 포인터(또는 참조)를 포함.
연결 리스트는 메모리가 연속적으로 할당되지 않으며, 요소에 접근하기 위해서는 노드를 순차적으로 따라가야 함.
연결 리스트는 요소의 추가 및 삭제가 효율적이지만, 특정 요소에 직접 접근하는 데는 시간이 더 걸릴 수 있음.
성능 차이:
배열은 빠른 요소 접근을 제공하지만 크기가 고정되어 있어 변경이 어려움.
리스트는 크기를 동적으로 조절할 수 있으며 요소 추가 및 삭제가 용이하나 배열에 비해 조금 느릴 수 있음.
연결 리스트는 요소 추가 및 삭제가 효율적이지만 순차적 접근이 필요하며 메모리 효율성이 낮음.
메모리 할당:
배열은 연속 메모리 할당을 사용하며 큰 데이터 집합을 다루는 데 유용할 수 있음.
리스트는 크기가 동적으로 조절되며 메모리 관리 측면에서 배열보다 효율적.
연결 리스트는 비연속 메모리 할당을 사용하며 대규모 데이터 집합 처리에는 비효율적.
데이터 구조 선택:
요소의 동적 추가/삭제가 빈번한 경우 리스트를 고려하고, 빠른 요소 접근이 필요한 경우 배열을 추천.
Unity에서의 활용:
Unity에서는 주로 C#의 List 클래스를 활용하며 배열과 리스트가 일반적으로 사용되며, 연결 리스트는 특수한 경우에만 필요할 수 있음.
코드 안정성:
리스트와 연결 리스트는 크기가 동적으로 조절되므로 인덱스 오버플로우나 언더플로우에 대한 주의가 필요.
적절한 예외 처리와 범위 체크 중요함.