C# - List(tuple) vs Dictionary

Dev_Jen
|2025. 7. 8. 15:07
반응형

한참 리스트의 튜플로 코드로 장난치고 있었는데 그럼 딕셔너리와의 엄청난 치이점이 뭘까.. 싶었다

물론 리스트와 딕셔너리도 비슷하게 사용할 수 있다.

List<(int itemNum, string name)> items = new List<(int, string)>
{
    (0, "나무칼"),
    (1, "나무도끼"),
    (2, "나무창"),
    ...
};

이런식으로 리스트 튜플을 만들어서 만들다가 이렇게 되면 딕셔너리와 차이점이 뭐지? 싶었다

하지만 뭐 다들 아시다싶이 리스트 튜플로는 키와 값 으로 있는게 아니라 여러개를 더 넣을 수 있다.

List<(int itemNum, string name, string info)> items = new List<(int itemNum, string name, string info)>();


items.Add((0, "나무칼", "나무칼이다"));
items.Add((1, "돌칼", "돌로 만든 칼이다"));
items.Add((2, "철칼", "철로 만든 칼이다"));
items.Add((3, "금칼", "금으로 만든 칼이다"));


for(int i=0; i<items.Count; i++)
{
    (int a, string b, string info) item = items[i];

    if (item.a == 0)
    {
        Console.WriteLine($"아이템 이름 : {item.b},  아이템 정보 : {item.info}");
    }
}

뭐..이런식으로 아이템에 대한 정보를 더 넣을 수 있다.

✅ Dictionary<int, string>로 바꾸면?

Dictionary<int, string> items = new Dictionary<int, string>
{
    { 0, "나무칼" },
    { 1, "나무도끼" },
    { 2, "나무창" },
    ...
};

→ **key(아이템 번호)**로 빠르게 **name(아이템 이름)**을 찾아야 할 때 적합하다.

이런식으로 딕셔너리가 더 빠르다고 한다. 왜냐하면 키 값을 이용해서 아이템의 이름이나 정보를 찾아주기때문.

 

📊 리스트(튜플) vs 딕셔너리 차이점 정리

항목 List<(int, string)> (튜플 리스트) Dictionary<int, string> (딕셔너리)
✅ 구조 튜플의 나열 (Key, Value) 형태의 리스트 Key → Value로 직접 연결된 자료구조
✅ 순서 순서 유지 (0번, 1번, 2번...) 순서 없음 (Key 중심 접근)
✅ 키 중복 허용됨 (같은 키 여러 개 가능) 허용되지 않음 (같은 키 추가 시 예외)
✅ 접근 방식 반복문이나 조건문으로 탐색 Key를 직접 지정해 빠르게 접근
✅ 검색 속도 느림 (순차 탐색) 빠름 (Key 기반 해시 탐색)
✅ 사용 목적 - 순서대로 출력  

 

  • 조건 필터링
  • 중복 허용
    | - 특정 키로 빠르게 검색
  • 중복 없이 고유한 키 사용 |
    | ✅ 코드 예 | items[i].Item1 == 3 | items[3] |
    | ✅ 메모리 | 상대적으로 단순 | 키 해시 맵을 위해 조금 더 복잡 |

🧠 예를 들어 이런 상황이라면?

📌 리스트(튜플)를 쓰는 경우

List<(int id, string name)> items = new List<(int, string)>
{
    (0, "나무칼"),
    (1, "나무도끼"),
    (2, "나무창"),
    (2, "예비 나무창") // 같은 ID 중복 허용
};
  • 순서대로 출력하거나
  • 조건(if)으로 찾을 때 유리
  • 같은 아이템 여러 개 저장 가능

📌 딕셔너리를 쓰는 경우

Dictionary<int, string> items = new Dictionary<int, string>
{
    { 0, "나무칼" },
    { 1, "나무도끼" },
    { 2, "나무창" }
};

// 빠르게 이름 얻기
Console.WriteLine(items[2]); // "나무창"
  • 키로 빠르게 접근할 때 유리
  • id → name 관계가 고정일 때 적합
  • 키는 반드시 고유

🎯 한 줄 요약

리스트(튜플)는 순서와 조건 검색에 강하고,
딕셔너리는 빠른 검색과 고유한 키 관리에 강하다.

 

확실히 두개는 명확한 차이가 있는 듯 하다. 흠.. 그럼 만약 아이템에 대한 정보나 그런걸 빨리 찾고싶다면

당연히 딕셔너리를 써야곘지만?... 키, 값으로만 이루어져 있으니 아이템은 여러 정보가 있을텐데 예를 든다면

아이템 번호, 이름, 정보, 능력치 등등 이렇다면 리스트 튜플을 쓰는게 좋을듯 하다!

반응형