📚 Chapter 1.4: 배열, 리스트, 딕셔너리 – C# 컬렉션 제대로 잡기
✅ 이 챕터에서 배울 것
C#에서 데이터를 여러 개 묶어 관리하려면?
그럴 땐 배열, List, Dictionary가 핵심이다!
- 배열(Array)의 구조와 한계
List<T>
의 유연함
Dictionary<TKey, TValue>
– Key-Value 매핑
- 언제 뭘 써야 하는지 실무 기준으로 비교
📦 1. 배열(Array) – 고정 크기의 연속된 저장소
string[] fruits = new string[3]; // 3칸짜리 문자열 배열 선언
fruits[0] = "사과";
fruits[1] = "바나나";
fruits[2] = "귤";
// 출력
for (int i = 0; i < fruits.Length; i++)
{
Console.WriteLine("과일 " + i + ": " + fruits[i]);
}
✅ 요약
특징 | 설명 |
고정 길이 | 한 번 선언하면 크기 못 바꿈 |
빠름 | 연속된 메모리 덩어리 → 성능 좋음 |
단점 | 크기 변경 불가, 유연성 부족 |
🧺 2. 리스트(List) – 배열보다 유연한 컬렉션
using System.Collections.Generic;
List<string> animals = new List<string>();
animals.Add("고양이");
animals.Add("강아지");
animals.Add("호랑이");
foreach (string a in animals)
{
Console.WriteLine("동물: " + a);
}
✅ 실무에서는 배열보다 무조건 List가 더 많이 쓰인다!
✨ 꿀팁 기능들
animals.Insert(1, "펭귄"); // 중간에 끼워넣기
animals.Remove("강아지"); // 값으로 삭제
animals.RemoveAt(0); // 인덱스로 삭제
bool exists = animals.Contains("호랑이"); // 존재 확인
🔑 3. 딕셔너리(Dictionary) – Key로 바로 찾기
Dictionary<string, int> scores = new Dictionary<string, int>();
scores["철수"] = 95;
scores["영희"] = 87;
Console.WriteLine("영희 점수: " + scores["영희"]);
✅ 키(Key)로 바로 접근 가능하니까
학생 이름, 상품 코드 등 식별자 기반으로 쓰기 딱 좋음!
🚨 주의
- 존재하지 않는 키에 접근하면
KeyNotFoundException
터진다!
- 항상
.ContainsKey()
로 확인하고 접근하자
if (scores.ContainsKey("민수"))
Console.WriteLine("민수 점수: " + scores["민수"]);
else
Console.WriteLine("민수 데이터 없음!");
⚖️ 실무 기준 비교표
항목 | 배열 (Array) | List | Dictionary<TKey, TValue> |
크기 변경 | ❌ 고정 | ✅ 동적 가능 | ✅ 동적 가능 |
접근 방식 | 인덱스 | 인덱스 | 키(Key) |
삽입/삭제 | 어려움 | 쉬움 | 쉬움 (단, 키 중복 X) |
정렬 | 수동 | .Sort() 가능 | 수동 정렬 or LINQ |
용도 | 성능 위주 고정형 데이터 | 대부분 일반 컬렉션 | ID 매핑, 검색 빠르게 할 때 |
💥 장선생의 실전 꿀팁
- 배열은 성능 최적화에만 → 나머진 List 써라!
- Dictionary 쓸 땐 Key 중복되면 예외 터진다
- List 안에 Dictionary 넣거나,
Dictionary 값에 List 넣는 중첩 컬렉션도 자주 쓴다!
Dictionary<string, List<string>> studentSubjects = new();
studentSubjects["철수"] = new List<string> { "수학", "과학" };
✅ 요약 정리
타입 | 특징 |
배열 | 고정 크기, 빠름, 유연성 부족 |
List | 동적 크기, 가장 자주 쓰임 |
Dictionary<TKey, TValue> | Key 기반 조회, 빠름, 검색 최적 |
📘 다음 챕터 예고 🎓
Chapter 1.5: 메서드 오버로딩, params, optional parameter!
함수 호출할 때 인자 여러 개 받을 수 있는 방법들,
이걸 알아야 진짜 유연한 API 만들 수 있다!