🪟C# | .NET

[C#] Hashtable vs Dictionary

이줭 2023. 6. 23. 11:44
728x90

🐶🦶을 하다보면 Key - Value를 사용하여 자료를 저장해야 하는 경우가 종종 있다.

C#에서 제공되는 타입은 2가지가 있는데 HashtableDictionary이다.

 

이 두가지 타입의 사용법과 장단점에 대해 알아보자!

Hashtable

Hashtable의 경우 Non-Generic 타입으로 Key와 Value 모두 Object를 입력 받는다.

Non-Generic 타입이므로 Boxing과 UnBoxing이 일어난다.

 

즉, Generic을 이용하지 않고 Object를 사용하기 때문에 모든 데이터 타입을 다 받고 처리할 수 있는 장점이 있지만,  자료 입력에 내부적으로 Boxing이 일어나고 사용하는 곳에서 다시 UnBoxing을 해줘야 사용이 가능하다.

Hashtable ht = new Hashtable();

// Boxing
ht.Add("data1", new ExClass() {data = "test1"});
ht.Add("data2", new ExClass() {data = "test2"});

if (ht.ContainsKey("data1").Equals(true))
{
	ExClass ec = ht["data1"] as ExClass; // UnBoxing
    Console.WriteLine(ec.data);
}

// Output
// test1

※ 잠깐! Boxing과 UnBoxing이 뭔데?? 🙋‍♂️ →  https://dev-jy.tistory.com/58

 

[C#] Boxing & UnBoxing (박싱과 언박싱)

일반적으로 Boxing과 UnBoxing에 대해 잘 몰라도 개발은 가능하지만, 메모리의 관리가 필요하다면 필수적으로 알아두면 좋을 내용이다. 자 그럼, Boxing과 UnBoxing에 대해 알아보자. 🤔 Boxing Boxing(박싱)

dev-jy.tistory.com

Dictionary

Dictionary의 경우 Generic 타입으로 Key와 Value 모두 선언 시 타입을 입력해줘야 한다.

따라서, Boxing과 UnBoxing이 일어나지 않는다.

 

즉, 다른 곳에서 이 타입을 사용할 때도 타입이 정의되어 있으니 다른 타입으로 형변환을 시도하다가 실패할 염려가 없다.

그래서?

Hashtable은 여러 타입을 수용할 수 있다는 장점이 있고, Dictionary는 Boxing과 UnBoxing이 일어나지 않기 때문에 속도가 빠르다는 장점이 있다. 위의 Boxing과 UnBoxing 링크에 설명해 놓은 것 처럼 Boxing은 단순 참조 할당에 20배, Unboxing은 할당의 4배에 달하는 시간이 소요된다고 한다.

 

사실 개발하다보면 한 컨테이너에 여러 타입을 수용해야할 일이 많이 없다는 생각이 든다. 따라서 성능적인 측면에서는 Dictionary의 사용이 유리할 것으로 보인다.

 

 

참고 : https://hongjinhyeon.tistory.com/87

https://velog.io/@cedongne/C-Hash-table-Dictionary

728x90

'🪟C# | .NET' 카테고리의 다른 글

[C#] Boxing & UnBoxing (박싱과 언박싱)  (0) 2022.09.14