티스토리 뷰

Dictionary는 '특정 분류에 해당하는 객체를 모아놓은 집합'(이하 '사전')을 작성하기 위한 컬렉션으로, Key와 Value의 조합의 집합체로 구성된다. [리스트와는 다른 방식.]

다만, 본문에서는 C#에서의 Dictionary 기능 보다는 Dictionary로 구현할 수 있는 '사전'이라는 구조 자체에 대해서 작성해 볼까 한다. [사전을 구현한다고 한다면 관련 데이터를 클래스로 묶어 리스트로 만드는 등, 다른 방식도 있기 때문.]

 

그 전에 C#의 Dictionary의 사용법 부터 확인하고 넘어가자면,

C#의 Dictionary 사용법

Dictionary<key, value> dict = new Dictionary<key, value>(); // Dictionary 선언
dict.Add(key1, val1)                                        // Dictionary 내용 추가
dict.Remove(index)                                          // Dictionary 내용 제거

// key값으로 검색하는 함수.
// 존재한다면 true, 없다면 false를 반환한다.
// 그리고 찾아낸 내용은 value2에 저장한다. (out의 역할.)
bool isExist = TryGetValue(key1, out val value2)

bool isExist = ContainsKey(key) // key값이 존재하는지 확인하는 함수.
bool isExist = ContainsValue(value) // value값이 존재하는지 확인하는 함수.

int dictSize = dict.Count // dictionary의 크기(내용의 양)

List와 비교했을 때, 기본적으로 Key값을 통해서 바로 접근하는 방식이라서 탐색이 빠르다는 것이 특징. 추가로 List는 최대 크기가 갱신될 때 성능이 크게 저하하나, Dictionary는 그런 난점이 존재하지 않는다.

대신 자료구조 자체의 index로 관리되는 방식이 아니라서 value를 통해서 탐색한다거나 반복문을 활용한다거나 하는 경우에는 적절하지 않은 편이다.

 

보통 Dictionary로 구성하는 데이터는 일반적으로 key 역할을 하는 ID까지 외부 파일으로 저장한 다음 Excel로 작업하는 편이다 보니 Dictionary가 낭비라고 생각할 수도 있는데, 엄밀히 말하면 그건 아니다.

상술했듯이 List와 Dictionary가 용도가 다르기 때문에, 아이템 사전 같이 정해진 key값을 이용한 탐색이 중요한 경우에는 List보다 Dictionary를 쓰는 것이 더 좋다. 반대로 key값 보다 value가 중요한 경우에는 List를 쓰는 것이 옳다.

 

사전의 용도

상술했듯이, 본문에서 사전은 특정 분류에 해당하는 객체를 모아놓은 집단을 말한다.

그렇기에 사전의 용도 자체는 '어플리케이션 상에서, 해당 분류에 해당하는 객체들을 파악하는 것' 하나로 고정된다. 다만, 이런 용도를 다른 메소드와 결합하게 된다면 유용한 기능들을 제작할 수 있게 된다.

 

1. 원하는 객체 생성

사전 내부의 객체에 복사 함수가 있다는 기반 조건이 필요하다.

이러한 복사함수를 이용해서 외부에서 사전에 있는 원하는 클래스를 복제하여 들고갈 수 있다.

이를 이용하면 아이템 획득이나 몬스터 생성 등, 다양한 기능을 제작할 수 있게 된다.

 

2. 인 게임 검색 기능

간단하게, 사전 내부의 파일들에 비교할 수 있는 함수를 제작했다고 가정하면 가능하다.

이를 이용해서 상점 시스템의 단편화나 습득한 아이템을 명시한다거나 하는 것도 가능.

사실 사전 자체의 용도이기도 해서 활용법이라기 보다는 사용법에 가까운 항목이다.

 

3. 절차적 생성

절차적 생성은 무에서 유를 창조하는 게 아니라, 범용성 높은 유를 조합하여 하나의 집성체를 만들어내는 것이다.

그렇기 때문에 각각의 파츠를 저장할 수 있는 공간이 필요한데, 이를 사전으로 구현할 수 있다.

참고로, 절차적 생성은 레벨 뿐만 아니라, 아이템 랜덤 옵션이나 적 랜덤 특성 같은 경우에도 사용하는 개념이다.

사실상 현대 게임에서는 거의 빠질 수 없는 요소.

 

이외에도 배경음악 조절도 용량 구성(다른 말로는 '압축' 내지는 '예외처리')만 잘하면 사전으로 구성할 수 있고, 대화문도 사전으로 구성이 가능하다.

 

상술했듯이, 사전의 역할은 요약하면 '객체들을 미리 저장했다가 필요한 것을 필요할 때에 꺼낼 수 있다'로 정리되나, 이 단일 역할으로 할 수 있는 일이 크게 늘어나는 케이스다. 그렇기에 사실상 어플리케이션을 제작할 때에는 필수라고 생각해도 되는 요소로, 반드시 알아둬야 할 부분이라고 해도 무방하다.

다만, 코딩에 익숙하다면 딱 아쉬울 요소가 사전이기 때문에, 이에 대한 지식 없이도 기초적인 형태로라도 구현을 했을 가능성이 높다. [물론, 그게 사전으로서 제대로 작동할지는 의문이긴 하지만...]

그러한 만큼, 조금 더 넓은 범위로 알아본다면 더더욱 유용한 기능이 되리라고 생각한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함