어제 딕셔너리(Dictionary)에 대해 배웠는데 리스트(List), 배열(Array)와 차이가 궁금하여 구글링도 하고 ChatGPT에 물어보기도하고 김재경 튜터님에게도 물어 보았다.
김재경 튜터님의 말씀으로 딕셔너리를 이해를 하려면 리스트와 배열을 알아야한다. 리스트와 배열에서 필요한 A데이터를 찾는다면 리스트와 배열 내부에 있는 데이터들을 순차적으로 비교를 하면서 A데이터를 찾기 때문에 시간이 오래 걸릴 수 있다. 하지만 딕셔너리는 Key값과 Value값이 1대1 대응하기 때문에 Key 값으로 바로바로 필요한 데이터를 빠르게 찾을 수 있다고 하셨다.
리스트 (List <T>)
- 특징
- 저장 공간 크기가 가변적
- 내부적으로 배열을 사용하지만, 데이터가 추가되면 자동으로 크기를 늘려 관리
- 순서를 유지하며 데이터에 접근 가능
- 장점
- 저장 공간 크기 가변성 : 데이터 추가/삭제가 자유롭고, 자동으로 크기 조정.
- 순서 유지 : 데이터 삽입 순서를 보존
- 유연성 : 검색, 정렬 등 다양한 메서드 제공
- 단점
- 중간 삽입/삭제 성능 저하 : 요소를 이동 해야 하므로 O(n)의 시간 소모
- 탐색 기능 저하 : 특정 값을 찾으려면 순차적으로 탐색 O(n)의 시간 소모
- 메모리 재할당 비용 : 내부 배열의 크기를 늘릴 때, 새 배열로 복사
- 사용 예시
- 대기열 : 사이트에 접속을 위해 대기열을 기다리는 상황 사람들은 순서대로 대기하며, 새로 온 사람은 뒤에 서고 기존 사람은 앞에서 차례대로 접속
- 장바구니 : 온라인 쇼핑몰에서 장바구니에 상품을 추가/제거 하는 경우 물건
배열 (Array)
- 특징
- 고정된 저장 공간 크기 구조로, 메모리를 효율적으로 사용
- 요소를 순서대로 저장하며, 빠른 인덱스 접근을 제공
- 장점
- 빠른 인덱스 접근 : 특정 위치의 데이터를 즉시 읽고 쓸 수 있음 O(1)의 시간 소모
- 메모리 효율성 : 고정된 크기로 생성되어 추가 메모리를 사용하지 않음
- 성능 우수 : 단순 구조로 반복 작업이나 연산에서 빠름.
- 단점
- 저장 공간 크기 고정 : 생성 시 크기를 지정해야 하며, 이후 변경 불가
- 데이터 추가/삭제 불편 : 크기를 변경하려면 새로운 배열을 생성하고 데이터를 복사해야 함
- 택색 성능 저하 : 특정 값을 찾을려면 순차 탐색이 필요 O(n)의 시간 소모
- 사용 예시
- 좌석 배치 : 대형 공연장이나 영화과에서 좌석 배치는 고정된 배열로 설정. 한 번 설정된 좌석 수는 변경 되지 않으며, 각 좌석은 고유한 번호로 접근 가능
- 날씨 데이터 : 7일간의 날씨 데이터를 저장할 때. 한 주 동안의 날씨 예보를 배열로 저장하고, 날짜별 날씨 데이터를 빠르게 찾음
딕셔너리 (Dictionary <Tkey, Tvalue>)
- 특징
- 키-값 쌍으로 데이터를 저장하며, 키를 통해 값을 빠르게 검색
- 키는 고유해야 하며 중복 키를 허용하지 않음
- 장점
- 빠른 검색 속도 : 키를 사용해 평균 O(1)의 시간 소모
- 키 기반 데이터 관리 : 데이터의 고유성을 보장하며 관리 용이
- 유연성 : 다양한 키와 값 타입 지원
- 단점
- 메모리 사용량 증가 : 해시 테이블 구조로 인해 추가 메모리 소모
- 값 기반 검색 비효율 : 값을 통해 키를 찾으려면 순차 탐색 필요 O(n)의 시간 소모
- 순서 보장 없음 : 기본적으로 삽입 순서가 유지되지 않음(C# 7.3 이하 버)
- 사용 예시
- 전화번호부 : 사람들의 이름(키)과 전화번호(값)을 매칭하여 빠르게 찾음. 이름을 검색하면 해당 전화번호가 즉시 나옴
- 도서관 책 관리 시스템 : 책의 ISBN(국제 표준 도서 번호)번호를 키로 사용하고 책의 제목, 저자, 출판사 등의 정보를 값으로 저장하여 빠르게 책을 검색 가능
비교
데이터 구조 | 특징 | 장점 | 단점 |
리스트 | 가변적인 크기, 순서 유지 | -데이터 추가/삭제 용이 -데이터 삽입 순서 보존 -유연한 메서드 제공 |
-탐색/삽입 시 성능 저하 -메모리 재할당 발생 가능 |
배열 | 고정된 크기, 빠른 인덱스 접근 | -고정된 크기로 메모리 효율적 -빠른 인덱스 접근 -단순 구조로 반복 작업이나 연산 빠름 |
-크기 변경 불가 -데이터 추가/삭제 불편 -탐색 성능 저하 |
딕셔너리 | 키-값 쌍으로 저장, 빠른 검색 | -데이터 고유성 보장 -관계 표현 용이 -키 기반으로 빠른 검색 |
-해시 테이블 구조로 인해 추가 메모리 소모 -값 기반 검색 비효율 |
사용 예시 및 추천 사용처
데이터 구조 | 사용 예시 | 추천 사용처 |
리스트 | 온라인 쇼핑몰 장바구니, 대기열 | -동적으로 데이터 추가/삭제가 필요한 경우 -순서가 중요한 경우 |
배열 | 좌석 배치, 날씨 데이터 | -고정 크기 데이터 -빠른 인덱스 기반 접근이 필요한 경우 |
딕셔너리 | 전화번호부, 도서관 책 관리 시스템 | -고유 식별자를 통해 빠르게 데이터를 검색해야 하는 경우 -데이터 관계 관리 |
'내일배움캠프 > TIL' 카테고리의 다른 글
TEXT RPG 만들기2 (인벤토리 만들기, 장착 관리) (0) | 2025.02.04 |
---|---|
TEXT RPG 만들기(기본 틀 다지기, 상태창 만들기) (0) | 2025.02.03 |
2025-01-23 Slider(슬라이더)로 오디오 볼륨 조절 (0) | 2025.01.23 |
2025-01-21 Dictionary(딕셔너리) (0) | 2025.01.21 |
2025-01-20 GitHub 사용일지 (0) | 2025.01.20 |