Computer Science

딕셔너리(Dictionary)

Nomad Lee 2025. 1. 19. 18:49

딕셔너리(Dictionary)

딕셔너리의 정의

딕셔너리는 '키(key)'와 '값(value)'의 쌍으로 구성된 데이터 구조입니다. 각 키는 고유해야 하며, 이를 통해 값에 빠르게 접근할 수 있습니다. 이 데이터 구조는 해시 테이블을 기반으로 구현되며, 평균적으로 O(1)의 시간 복잡도를 가집니다. 이는 고속 데이터 검색과 추가, 삭제가 가능함을 의미합니다.

딕셔너리의 특징

  • 키와 값의 쌍: 각 키에 대해 하나의 값이 존재하며, 이를 통해 데이터를 효율적으로 관리할 수 있습니다.
  • 변경 가능성: 딕셔너리는 생성 후에도 데이터를 추가하거나 수정할 수 있습니다.
  • 자동 해시: 대부분의 프로그래밍 언어에서 제공하는 딕셔너리는 자동으로 해시를 생성하여 키를 관리합니다.
  • 유연한 데이터 저장: 딕셔너리의 값은 문자열, 숫자, 리스트, 심지어 다른 딕셔너리까지 다양하게 사용할 수 있습니다.

딕셔너리의 활용 사례

1. 데이터 저장 및 조회

딕셔너리는 데이터를 저장하고 조회하는데 매우 유용합니다.

예를 들어, 학생의 성적을 관리하는 프로그램에서 사용될 수 있습니다.

student_scores = {
    "Alice": 85,
    "Bob": 92,
    "Charlie": 78
}

# 점수 조회
print(student_scores["Alice"])  # 출력: 85

2. 데이터 집계 및 카운팅

딕셔너리를 사용하여 데이터를 집계하거나 카운트할 수 있습니다.

예를 들어, 과일의 출현 빈도를 카운트하는 프로그램을 작성할 수 있습니다.

fruits = ["apple", "banana", "apple", "orange", "banana", "apple"]
fruit_count = {}

for fruit in fruits:
    if fruit in fruit_count:
        fruit_count[fruit] += 1
    else:
        fruit_count[fruit] = 1

print(fruit_count)  # 출력: {'apple': 3, 'banana': 2, 'orange': 1}

3. 구성 데이터 전처리

딕셔너리는 데이터를 전처리하는 과정에서도 유용하게 사용될 수 있습니다.

예를 들어, JSON 형식의 데이터를 다룰 때 딕셔너리를 활용하여 손쉽게 변환하고 필터링할 수 있습니다.

import json

# JSON 데이터
json_data = '{"name": "Alice", "age": 30, "city": "Seoul"}'

# JSON을 딕셔너리로 변환
data = json.loads(json_data)
print(data["name"])  # 출력: Alice

4. 설정 및 구성 관리

애플리케이션의 설정을 딕셔너리로 관리하면 유용합니다.

설정 값을 쉽게 읽고 쓸 수 있으며, 유지관리도 용이합니다.

config = {
    "host": "localhost",
    "port": 8080,
    "debug": True
}

print(f"Server running on {config['host']} at port {config['port']}")

딕셔너리의 장단점

장점

  • 빠른 데이터 접근: 딕셔너리는 키를 통해 O(1)의 시간 복잡도로 데이터를 접근할 수 있습니다.
  • 유지관리 용이: 데이터가 구조화되어 있어 읽기 쉽고, 관리하기 편리합니다.
  • 다양한 데이터 유형: 다양한 데이터 유형을 사용할 수 있어 유연성이 뛰어납니다.

단점

  • 메모리 사용: 해시 테이블을 기반으로 하므로 메모리 사용량이 클 수 있습니다.
  • 비순서성: 전통적으로는 순서가 없지만, 최신 프로그래밍 언어에서는 삽입 순서를 유지하기도 합니다.
  • 키 중복 불가: 동일한 키는 한 번만 사용할 수 있어 데이터 중복 관리가 필요

'Computer Science' 카테고리의 다른 글

입력장치와 출력장치  (1) 2025.01.20
픽셀(Pixel)과 해상도(Resolution)  (2) 2025.01.20
배열(Array)  (1) 2025.01.19
객체지향 프로그래밍(Object-Oriented Programming, OOP)  (1) 2025.01.18
변수(Variable)  (0) 2025.01.17