티스토리 뷰

반응형

 

 

 

안녕하세요. Base Of Coding입니다.

 

이번에 배워볼 내용은, 제네릭 컬렉션이라는 .Net에서 제공해주는 흔히들 알고 계시는 자료구조 모음이라고 생각하시면 될 것 같습니다.

 

지금까지 배운 내용들입니다.

 

...더보기

 

유니티 작업을 하면서 흔히 많이 사용하는, 제네릭 컬렉션 중, Dictionary와 List에 대해서 알아보도록 하겠습니다.

 

1. List ( 리스트 )

- List는 int, string, char, float, double, long 과 같은 흔히 사용하는 자료형,

유니티에서 사용하는 게임오브젝트, 또는 구조체, 클래스를 여러개 추가가 가능하고

이걸 배열처럼 사용이 가능합니다. 넣고 빼기가 배열에 비해서 굉장히 간편하며, 배열은 크기를 정해줘야 하는 반면에

List는 크기를 지정하지 않고, 동적으로 늘어나게 되어 있습니다.

 

2. 리스트 만들기

- 리스트는 만들면서 초기화를 해주거나, 사용하기 전에 초기화를 해주셔야 합니다.

만들면서 초기화를 해주는 것이 좋습니다.

대부분 제네릭을 사용하면서 흔히 발생하는 실수가 초기화를 해주지 않고 사용했기 때문이죠.

밑에 코드처럼 생성 및 초기화를 해주세요^^

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public List<int> integerList = new List<int>();		// 생성 및 초기화( 쉽죠?! )
public List<string> strList;						// 생성

private void Awake()
{
	strList = new List<string>();					// 초기화
}

 

유니티에서, Awake함수 또는 Start함수는 스크립트가 실행하는 동시에 안에 있는 코드를 실행해주는 함수이기 때문에

Awake 또는, Start 함수에서 초기화를 해주어도 상관없습니다.

하지만 보기 편하게, 생성을 하자마자 바로 초기화를 해주는 습관이 더 좋다고 생각합니다.

3. 리스트 사용하기

- 리스트를 사용하는 방법은 여러가지가 있습니다. List에 있는 속성 또는 메서드를 이용하여 사용하는데, 한 번 알아보도록 하겠습니다.

/*
* Copyright(c) Base Of Coding All Right Reserved.
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ListTest : MonoBehaviour
{
	public List<string> strList = new List<string>();

    private void Awake()
    {
		strList.Add("Base Of Coding");			// Base Of Coding 추가
		strList.Add("베이스 오브 코딩");			// 베이스 오브 코딩 추가
		strList.Add("List를 배워봅시다.");			// List를 배워봅시다 추가

		Debug.Log(strList.Count);				// 리스트 안에 있는 요소 출력. 3

		// List안에, Base Of Coding이란 값이 있는가?
		if(strList.Contains("Base Of Coding"))
		{
			Debug.Log("Base Of Coding ( O ) ");		// 있으면, 왼쪽 로그 출력
		}
		else
		{
			Debug.Log("Base Of Coding ( X ) ");		// 없으면 왼쪽 로그 출력
		}

		strList.Reverse();							// 리스트의 요소를 반대로 변경한다. 0 , 1 , 2 -> 2 , 1 , 0으로.
		
		for(int i=0; i<strList.Count; i++)			// for문을 이용해, 0번부터, List안에 있는 요소 갯수 보다 작을 때 까지, 총 3번을 반복
		{
			Debug.Log(strList[i]);					// 모든 리스트에 있는 요소를 출력해본다.
		}

		strList.Remove("베이스 오브 코딩");				// 베이스 오브 코딩이란 값을 지워봅시다.

		strList.Clear();							// 리스트 안에 있는 모든 요소를 지웁니다.
		Debug.Log(strList.Count);					// 리스트 안에 있는 모든 요소를 지웠기 떄문에, 0이 출력
    }
}

리스트는, 일단 기본적으로 이 정도를 많이 사용합니다. Sort함수를 이용해서, 리스트 안에 있는 요소를 정렬하는 방법이 있는데

이건 어떤 형식으로 정렬을 할 것인지에 달라지기 때문에, 나중에 따로 글을 하나 올려놓도록 하겠습니다.

 

4. Dictionary

- 딕셔너리, 즉 번역으로는 사전입니다. 사전도 보시면 아시겠지만, 단어가 있고, 그 밑에 단어에 관련 된 의미가 있습니다.

이 딕셔너리 또한, Key와 Value로 이루어져 있습니다. Key가 단어, Value가 단어의 의미 라고 보시면 될 것 같습니다.

그리고 Dictionary를 사용하는 이유는, 자료구조 상 빠른 구조일 수 밖에 없기 떄문입니다.

C++ STL에서는, Map 또는 HashMap이라고도 합니다. 이게 왜 빠른 구조냐면,

찾을 Key만 입력하면 바로 그 Key에 관련 된 해당 Value값을 출력해주기 때문이죠.

그래서 빅오 표기법으로, 이 구조는 O(1) 구조를 가질 수 밖에 없습니다.

자 그럼 딕셔너리에 대해서 한 번 알아보도록 하겠습니다.

 

5. 딕셔너리 사용하기

- 생성 및 초기화는 리스트와 똑같은 방식이기 때문에 적지 않겠습니다. 단 한가지 리스트와 다른 점은, key와 value값으로 <>안에 넣어줘야 한다는 것입니다. 밑에 코드를 잘 봐주세요.

 

/*
* Copyright(c) Base Of Coding All Right Reserved.
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DictionaryTest : MonoBehaviour
{
    private Dictionary<int,string> numDic = new Dictionary<int,string>();       // key는 숫자, value는 문자열을 가지는 딕셔너리 생성 및 초기화
    private string [] dicStr = { "Base", "Of", "Coding", "과", "딕", "셔", "너", "리", "에", 
                                 "대", "해", "서", "배", "워", "봐", "요" };
    // 딕셔너리에 저장할 문자열을 배열로 미리 초기화 및 생성을 했습니다.

    private void Awake()
    {
        // 문자열 배열에 저장되어 있는 갯수만큼 저장된 값을 딕셔너리에 추가합니다.
        for(int i=0; i<dicStr.Length; i++)
        {
            numDic.Add(i,dicStr[i]);
        }
        Debug.Log(numDic[0]);           // 이건 0번의 인덱스가 아닌, Key가 0인 딕셔너리의 Value값을 출력합니다.
        Debug.Log(numDic.Count);        // 딕셔너리에 저장되어 있는 요소들의 갯수를 출력합니다.

        numDic.Add(99,"Test");          // 99라는 Key에 Test라는 문자열을 가지게 합니다.
        Debug.Log(numDic[99]);          // Test 출력
        
        // Value로 저장된 값중에, 딕이란 값이 있는 지 없는 지를 확인합니다.
        if(numDic.ContainsValue("딕"))
        {
            Debug.Log("딕이란 값이 있네요.");
        }
        else
        {
            Debug.Log("딕이란 단어가 없습니다.");
        }

        // 40이란 Key값이 있는 지 없는 지 확인합니다.
        if(numDic.ContainsKey(40))
        {
            Debug.Log("40란 키값이 있네요.");
        }
        else
        {
            Debug.Log("40란 키값이 없네요.");
        }

        numDic.Remove(99);              // 99란 키값이 있으면, 키 값과 그 키에 해당하는 짝인 값을 삭제합니다.

        // 저는, 배열에 저장된 갯수에 따라, Key값을 지정했기 때문에, for문을 돌린겁니다. ( 절대 이렇게 하시면 안되요! 배열에 키값이 따로 저장되어 있으시다면 상관은 없습니다. )
        for(int i=0; i<numDic.Count; i++)
        {
            Debug.Log(numDic[i]);               // 키값에 따라, 값을 출력한다. 합하면, Base Of Coding과 딕셔너리에 대해서 배워봐요 입니다^^
        }

        // 끝!
    }
}

딕셔너리는, Key에 해당되는 자료형 Value에 해당되는 자료형에 따라 잘 사용해주시기만 하면 됩니다.

꼭 int,string으로 한 이유는 편하게 알아보기 위함이며, 배열에 미리 저장한 것도 이런 방법을 사용하기도 한다라는 것을 보여드린 것입니다.

그리고, for문을 사용하는 경우는 잘 생각하셔서 사용하셔야 함을 알려드립니다! 어떻게 짜느냐에 따라 for문을 사용할 수도 없을 수도 있기 때문이죠.

 

이렇게 List와 Dictionary에 대해서 알아봤습니다. 잘 쓰면 아주 유용한 .net에서 제공하는 자료구조 중 2가지입니다.

Stack과 Queue도 잘 쓰면 유용하지만, Microsoft Docs에서 한 번 찾아보시면 될 것 같습니다.

 

지금까지 Base Of Coding이였습니다. 다음에는 프로퍼티 대해서 알아보도록 하겠습니다. 감사합니다^^

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함