유니티 버전 - 2022.3.44f1
들어가며
오늘은 배열에 대하여 알아보겠습니다
데이터를 효율적으로 관리하고 처리하기위한 다양한 데이터 구조가 존재합니다
그 중에서도 자주 사용되는 세 가지는 배열, 리스트, 딕셔너리입니다
이 세가지가 중 배열과 Array. 메서드에 대하여도 알아보겠습니다
목차
- 배열
- 정의 및 특징
- 선언 및 사용
- Array 클래스
배열
배열의 정의와 특징
배열을 정의하자면 배열은 같은 타입의 데이터를 연속된 메모리 공간에 저장하는 자료 구조입니다, 배열을 이용하면 여러 개의 값을 하나의 변수로 관리할 수 있기에 반복적인 데이터 처리에 유용합니다
배열은 선언 시 배열의 크기를 지정해주어야 하며, 이후에는 크기를 변경할 수 없습니다
배열은 각 요소에 인덱스를 이용하여 접근합니다, 인덱스는 0부터 시작합니다
배열은 메모리 상에서 연속적으로 저장되기 때문에, 인덱스를 통한 접근이 빠릅니다
배열의 선언과 사용
배열을 선언할때는 타입 뒤에 대괄호 [ ]를 써줘야 합니다 선언과 동시에 값을 넣을 수 도 있지만, 크기만 설정해 줄 수 있습니다
전자의 경우 배열의 크기는 중괄호안에있는 데이터의 개수에 따라 자동적으로 정해집니다, = 뒤의 new int[]를 생략할 수 도 있습니다
후자의 경우 배열의 크기만 명시하고 값은 할당하지 않았습니다
배열의 데이터에 접근하기 위해서는 인덱스를 이용해서 값을 꺼내와야 합니다
배열의 0번째 인덱스를 이용하여 값을 출력해보니 200이 출력되었음을 알 수 있었습니다
배열의 크기만 설정하고 값은 넣지 않았습니다, 디버그를 찍어보면 배열의 각 요소에 int의 기본값인 0이 들어가있습니다
활용해보겠습니다, 아래에 playerLv라는 6칸의 크기를 가진 배열이 있습니다
각 항목에 어떤 레벨을 표시할지는 임의로 정했습니다
여기서 만약에 낚시의 레벨을 10 올려주고 싶다면 낚시의 인덱스 [2] 를 이용하여 접근하여 값을 수정합니다
이로써 플레이어의 레벨을 나누어 6개의 변수를 선언하지 않고 효율적으로 배열을 이용하여 저장시키고, 인덱스를 이용하여 값을 수정, 참조해보았습니다
하지만 직접 인덱스를 넣어서 내용을 참조하려고하는것은 매우 위험합니다, 다른사람이 봤을때 레벨에 대한사전 지식이 없다면 2라는 숫자가 어떤 값인지 알기 어렵고 인수로 준 숫자가 배열의 크기와 일치하지 않으면 아래와 같이 오류를 발생시킵니다
내용을 수정할때 숫자를 직접주는것 보다는 상수, enum등을 이용하는 것이 좋습니다
enum을 이용하여 배열에 접근해보았습니다, enum의 마지막은 Livestock으로 5로 고정되어있어서 배열의 인덱스를 벗어날 일이 없기에 좀 더 안전하다고 할 수 있겠습니다
또 위에서 발생한 IndexOutOfRangeException을 방지하기위해 playerLV.Length 속성을 이용하여 배열의 크기만큼만 for문을 반복하여 배열의 값을 수정, 참조하였습니다, 여기서 Length는 배열의 크기를 의미합니다
배열은 int 뿐만 아니라 여러가지 타입을 이용하여 선언할 수 있습니다, 아래는 Slot이라는 클래스를 이용하는 예시입니다
먼저 ScriptableObject을 이용하여 아이템 하나를 만들어주었습니다
그리고 Slot을 만들었습니다, Slot은 현재 가지고 있는 아이템과 개수를 나타내줍니다
그리고 플레이어의 인벤토리가 있다고 가정하겠습니다, 인벤토리에는 Slot이 10개가 있습니다
slots는 Slot클래스를 이용하여 만들어졌고 Slot 클래스에는 item과 itemCount가 있습니다, 아래 Start에서 slots의 첫번째 Slot에 접근하여 아이템을 넣어주고 아이템 카운트를 1 올려주었습니다
인스펙터를 확인해보니 slots 배열의 첫번째 Slot에 아이템과 아이템 카운트가 잘 반영되었음을 확인할 수 있었습니다
Array 클래스
Arrar 클래스는 데이터를 나열하여 배열을 만들고 그 배열을 활용하는데 있어서 유용한 도구입니다
Arrar의 메서드를 통해 배열을 활용해보겠습니다
1. Array.Sort()
배열을 정렬하는 데 사용됩니다, 기본적으로 오름차순으로 정렬됩니다
int 배열과 items배열이 있습니다, 이 둘을 오름차순으로 정리하기위해서는 Array.Sort();를이용합니다
items는 람다식을 이용하여 매개변수로 (x, y) = 배열의 첫번째, 두번째요소를 받았고, 아이템의 itemCode를 CompareTo를 이용하여 대소를 비교하였습니다 (실제로는 ScriptableObject 에셋을 바로 끌어다놓으면 안됩니다 )
2. Array.ForEach
배열의 요소를 반복하고, 각 요소에 대하여 지정한 작업을 실행합니다
items배열을 정렬한뒤 각 요소에 10을 더해주겠습니다
디버그를 보니 잘 실행되었음을 확인할 수 있었습니다
3. Array.Exists();
배열의 요소중에 조건과 일치는 요소가 있다면 True를 반환합니다
배열의 요소중 하나인 Item1의 아이템 코드입니다, 그 값이 100임을 알 수 있습니다
결과입니다, True를 반환하였습니다
4. Array.Find();
배열의 요소 중 조건과 일치하는 요소가 있을 경우, 해당 요소의 itemName을 출력합니다.
결과입니다, itemName을 반환하였습니다, 이용한 Item은 위의 Item1과 동일합니다
마치며
오늘은 배열과 Array 클래스에 대하여 알아보았습니다
Array의 매서드로 위에서 설명한 것 말고 더 많이 있지만 모두 다루지는 않았습니다, 복사에대하여 더 공부하면 좋을 것 같습니다, 더 궁금하시다면 아래를 참고바랍니다
이상입니다.
'코드 및 공부 > 기타' 카테고리의 다른 글
TagManager.preset을 이용한 태그 및 레이어 관리 (0) | 2024.10.11 |
---|---|
c# - 프로퍼티 (0) | 2024.09.27 |
c# - 변수의 종류와 접근 제한자, 키워드 (0) | 2024.09.24 |
c# - 변수와 자료형 (0) | 2024.09.23 |
속성(Attributes) (1) (0) | 2024.09.19 |