리스트는 배열과 같이 대량의 데이터를 하나로 묶어서 관리할 수 있는 콜렉션중 하나입니다. 배열에서는 데이터의 수정이 번거롭지만 여기서는 수정 및 데이터의 추가 제거, 크기 조절 등이 가능합니다.
1. 장점
동적 배열 : 유니티 리스트는 크기가 동적으로 변하기에 데이터의 추가 및 제거가 빈번한 곳에서 사용하기 용이합니다.
다양한 타입 지원 : 배열은 일반적인 C#의 자료형만을 담지만 유니티의 리스트는 자료형뿐만이 아니라 게임 오브젝트도 담을 수 있습니다.
데이터 수정 : 배열에서는 인덱스에 직접 접근하여 값을 수정해야 했지만 리스트는 관리용 메소드가 있어서 추가, 제거, 변경이 용이합니다.
2. 단점
성능 이슈 : 배열과 다르게 데이터에 따라 크기가 재조정 되는 콜렉션이기에 AddForce때처럼 리스트의 데이터 변경이 과도하게 적용되면 무리한 연산으로 프레임의 저하가 생길 수 있습니다.
오버 헤드 : 동적 배열이기에 기본적으로 메모리를 실사용보다 넉넉하게 할당합니다. 미리 할당한 메모리 공간이 항시 사용되는건 아니므로 메모리 사용의 효율성이 저하됩니다.
3. 예문
List myIntList = new List();
List myStringList = new List {“사과”, “바나나”, “체리”};
myIntList를 새로 생성합니다.(데이터는 없음)
myStringList를 새로 생성하고 그 안에 사과, 바나나, 체리를 넣습니다.
myIntList.Add(1);
myIntList.AddRange(new int[] {2, 3, 4});
myStringList.Insert(1, “오렌지”);
Console.WriteLine(myIntList.Count);
myIntList에 1이란 값을 추가합니다.
myIntList에 2,3,4란 값을 한번에 추가합니다.
myStringList의 인덱스 1번에 오렌지란 값을 추가합니다.
int firstItem = myIntList[0];
myIntList.Remove(1);
myIntList.RemoveAt(0);
myIntList의 인덱스 넘버 0번 값을 호출해서 정수형 변수 firstItem에 그 값을 넣습니다.
myIntList에서 값이 “1”인 항목을 찾아서 삭제합니다. 삭제된 값 이후 인덱스 넘버부터 하나씩 당겨집니다. “1”이 여럿 있다면 인덱스 넘버가 0에 가까운 값을 삭제합니다.
myIntList에서 인덱스 넘버 0번 값을 아예 삭제합니다. 인덱스 넘버 1번부터 하나씩 당겨집니다.