이 시리즈는 유니티에서 제공하는 튜토리얼을 정리해서 올린 것입니다.


-----------------------------------------------------------------------------------


리스트


리스트는 제네릭 컬렉션이다.

이 컬렉션은 배열과 유사하게 작동하지만 몇가지 중요한 차이점을 가지고 있다.


리스트는 동적으로 크기가 조절되는 배열과 같다.

따라서 미리 크기를 알 필요없이 편하게 요소를 추가하거나 제거할 수 있다.


-----------------------------------------------------------------------------------


리스트 실습


리스트를 선언하는 문법은 다음과 같다.


24b0d121e09c28a8699fe8b115ef046b6f6f9833



먼저 리스트는 System.Collections.Generic 네임스페이스에 속해있기 때문에 사용을 위해 using을 써주어야 한다.

<>안에는 원하는 타입을 적어준다. 우리는 SampleClass로 이루어진 리스트를 원하기 때문에 SampleClass를 적어주었다.

그리고 리스트는 클래스이기 때문에 클래스를 만들때 처럼 new List<SampleClass>();를 적어준다.

우리는 성공적으로 리스트를 만들었다.

-----------------------------------------------------------------------------------

리스트에 요소를 추가하는 방법으로 Add();가 있다

Add는 리스트에 가장 마지막에 요소를 추가하는 메서드이다.



24b0d121e09c28a8699fe8b115ef04699038f1b5

리스트에 3개의 요소를 add해주었고

foreach문으로 list를 순회하며 level과 power를 출력해보자.



24b0d121e09c28a8699fe8b115ef046f5d4e999a

Add한 순서대로 출력이 되었다.


다른 기능으로는 RemoveAt(index);와 Insert(index, element);가 있다

removeat은 인덱스 위치에 있는 리스트의 요소를 제거하는 것이고

insert는 인덱스 위치에 요소를 추가하는 것이다.

두 메소드 역시 리스트의 길이를 자동으로 조절해준다.

-----------------------------------------------------------------------------------

리스트의 가장 강력한 기능 중 하나는 정렬이다.

이는 특정 타입의 리스트를 특정 타입의 특정 변수를 기준으로 정렬하는데 사용된다.


Sort()메서드를 사용하려면 해당 타입이 IComparable 인터페이스를 구현해야 한다.


IComparable 인터페이스를 구현하기 위해 SampleClass를 수정해보자.

먼저 IComparable을 사용하기위해 System 네임스페이스를 using 해준다



24b0d121e09c28a8699fe8b115ef046a7e6aea



인터페이스를 구현하기 위해 클래스 뒷 부분에 : IComparable<SampleClass>를 추가한다.


해당 클래스 내에서

CompareTo()메서드를 구현한다




24b0d121e09c28a8699fe8b115ef04699338febf



CompareTo()메서드는 int를 반환하고 제네릭 타입을 매개변수로 받는 메서드이다


CompareTo()의 기본 아이디어는 이렇다

메서드를 호출한 객체가 매개변수로 전달된 객체보다 크면 양수를 반환한다.


작으면 음수를 반환한다.


같으면 0을 반환한다.


후에 sort()메서드에서 양수, 0, 음수 값을 기준으로 두 값을 바꿀지 말지를 결정한다.


객체의 크고 작음은 프로그래머가 정의 한다.


만약 this.level - other.level; 대신 순서를 바꾸어주면

레벨이 가장 높은 요소가 가장 앞으로 오게 정렬될것이다.

오름차순이냐 내림차순이냐를 결정할 수 있다는 뜻이다.

(아니면 간단하게 괄호로 묶고 -값을 붙여주어도 된다)

-----------------------------------------------------------------------------------

우리는 SampleClass에서 level값을 기준으로 비교를 해보겠다.


이후 리스트를 정렬해보자.




24b0d121e09c28a8699fe8b115ef046b6f669537




24b0d121e09c28a8699fe8b115ef046ecd41ccff


깔끔하게 정렬되었다.

-----------------------------------------------------------------------------------

이처럼 리스트는 정렬 기능을 포함하여

엄청난 유용성을 제공하는 메서드들로 무장된

컬렉션이다.


이외에도 다양한 기능이 많으니 따로 둘러보는 걸 추천한다.