본문 바로가기
C#/C# 문법

C# Dictionary HashTable List HashSet

by TcTT 2018. 12. 21.
반응형

프로그래밍시, 다수의 데이터를 하나의 변수에 담아두고,

필요 시, 특정 키별 매칭되는 데이터를 찾아와 사용하는경우가 종종있다.


그동안 List를 사용해왔지만, Dictionary사용 후, 퍼포먼스, 사용방법이 간단하여 앞으론 Dictionary를 사용할 예정이다.



Dictionary란 사전을 의미한다.

위 사진과같이 사전은 Key와 Value로 구성되어있다.

pop-up이란 Key에 다양한 value가있다.


Dictionary는 System.Collections.Generic 네임 스페이스에 정의되어 있다.


Dictionary에 값을 추가 할 때마다 값과 관련 키가 있어야하며,

빠른 검색을 통해 키에서 값을 가져옵니다.




그렇다면 왜!? List로도 데이터 모음을 저장하는데 전혀 문제가없는데..

List를 사용하지않고, Dictionary를 사용할까? 아래 그래프를 참고하자!

출처 : http://net-informations.com/faq/general/dictionary-list.htm



List와 Dictionary는 데이터 모음을 저장하는데 사용한다는점은 같다.

하지만, Dictionary는 List와 달리 해시테이블을 기반으로한다.

즉 대량 데이터중 특정값을 조회 시, List에비해 효율적인 알고리즘으로 찾아간다.




그렇다면 HashTable과 Dictionary를 비교 안할 수 없다..

퍼포먼스 비교 소스 :  HashSet-vs-List-vs-Dictionary-master.zip


HashSet / List / Dictionary 비교 : https://theburningmonk.com/2011/03/hashset-vs-list-vs-dictionary/



가장큰 차이점을 본다면


Dictionary :

Dictionary는모든 데이터 유형에 사용할 수 있음 (제너릭 유형)
- public static 멤버의 스레드로 만 안전합니다. 
- 존재하지 않는 키를 찾으면 에러(Execption)를 반환합니다. 


HashTable :

- Hashtable은 제네릭 유형이 아닙니다. 

- Hashtable의 모든 멤버는 스레드로부터 안전합니다. 
- 존재하지 않는 키를 찾으려고하면 null을 반환합니다. 



결론 :

사용 목적에따라 List, HashTable, Dictionary를 적절히 사용하면된다.

단, 하드웨어 발전으로  HashTable, Dictionary의 성능 차이는 일반 사용자가 느끼기 어려울정도로 사소함.

HashTable, Dictionary중 고민이라면 아래 특성을 고려해서, 프로젝트에 적합한 유형을 선택하면 된다.


1. HashTable은 Add() 사용시 동일한 내용이 있으면, 동일한 것으로 간주되고 false를 반환하면 새 항목을 건너 뜁니다.

2. Dictionary는 Add() 사용 시추가되는 새 키가 기존 키 중 하나와 동일한 것으로 간주되는 경우 예외를 throw합니다.

3. List의 Add() 는 동일한 내용이 존재해도, 동일한 항목을 추가합니다.

반응형

'C# > C# 문법' 카테고리의 다른 글

C# Image To PPM  (0) 2018.10.10
C# MessageBox  (0) 2018.09.17
C# Split  (0) 2018.08.20