학습
C# 컬렉션의 성능 최적화
C# 컬렉션의 성능 최적화 — 중급
컬렉션의 성능 최적화
1. 도입 (왜 배워야 하는가)
컬렉션은 프로그램에서 데이터를 저장하고 관리하는 기본적인 도구입니다. 특히 C#에서는 List, Dictionary, HashSet과 같은 다양한 컬렉션을 제공하여 개발자가 효율적으로 데이터를 다룰 수 있도록 합니다. 하지만, 이러한 컬렉션을 비효율적으로 사용할 경우, 성능 저하와 함께 메모리 낭비라는 문제를 초래할 수 있습니다.
실무에서는 데이터의 양이 많아질수록 성능 최적화가 더욱 중요해집니다. 예를 들어, 대규모 웹 애플리케이션에서 사용자의 요청을 처리할 때, 컬렉션의 성능이 떨어지면 전체 시스템의 응답 속도가 느려질 수 있습니다. 따라서, 적절한 컬렉션 선택과 성능 최적화는 필수입니다.
2. 핵심 개념 설명
컬렉션의 성능 최적화에 있어 중요한 개념은 다음과 같습니다:
- List<T>: 순차적으로 데이터를 저장하는 동적 배열입니다. 인덱스 기반 접근이 가능하여 빠른 조회가 가능합니다.
- Dictionary<TKey, TValue>: 키와 값의 쌍으로 데이터를 저장합니다. 해시 테이블을 사용하여 빠른 검색을 지원합니다.
- HashSet<T>: 중복을 허용하지 않는 데이터 집합으로, 빠른 검색과 추가가 필요할 때 유용합니다.
| 용어 | 설명 | 비유 |
|---|---|---|
| List<T> | 순서가 있는 데이터의 집합 | 책장에 정리된 책들 |
| Dictionary<TKey, TValue> | 키-값 쌍으로 구성된 데이터 집합 | 전화번호부: 이름(키)과 전화번호(값) |
| HashSet<T> | 중복을 허용하지 않는 데이터 집합 | 유니크한 스티커 모음 |
3. 기본 코드 예제
가장 기본적인 List<T> 사용법을 보여드리겠습니다.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// List 생성
List<int> numbers = new List<int>();
// 값 추가
numbers.Add(1); // 리스트에 1 추가
numbers.Add(2); // 리스트에 2 추가
numbers.Add(3); // 리스트에 3 추가
// 값 출력
foreach (var number in numbers)
{
Console.WriteLine(number); // 리스트의 각 값 출력
}
}
}
실행 결과:
1
2
3
List<int> numbers = new List<int>();: 정수형 List를 생성합니다.numbers.Add(1);: List에 1을 추가합니다.foreach (var number in numbers): List의 각 요소를 반복문을 통해 순회합니다.Console.WriteLine(number);: 현재 순회 중인 값을 출력합니다.4. 실전 활용 예제
쇼핑몰에서 장바구니를 구현할 때
장바구니에 담긴 상품을 관리하기 위해 List<T>를 사용합니다.
using System;
using System.Collections.Generic;
class ShoppingCart
{
private List<string> items = new List<string>();
public void AddItem(string item)
{
items.Add(item);
Console.WriteLine($"{item}이 장바구니에 추가되었습니다.");
}
public void ShowItems()
{
Console.WriteLine("장바구니의 상품 목록:");
foreach (var item in items)
{
Console.WriteLine(item);
}
}
}
class Program
{
static void Main()
{
ShoppingCart cart = new ShoppingCart();
cart.AddItem("티셔츠");
cart.AddItem("바지");
cart.ShowItems();
}
}
실행 결과:
티셔츠이 장바구니에 추가되었습니다.
바지이 장바구니에 추가되었습니다.
장바구니의 상품 목록:
티셔츠
바지
대규모 데이터 처리
Dictionary<TKey, TValue>는 대량의 데이터를 관리할 때 유용합니다. 예를 들어, 사용자의 정보를 관리할 때 키를 사용자 ID로 하고 값을 사용자 객체로 설정할 수 있습니다.
using System;
using System.Collections.Generic;
class User
{
public string Name { get; set; }
}
class Program
{
static void Main()
{
Dictionary<int, User> users = new Dictionary<int, User>();
// 사용자 추가
users.Add(1, new User() { Name = "Alice" });
users.Add(2, new User() { Name = "Bob" });
// 사용자 조회
Console.WriteLine(users[1].Name); // Alice 출력
}
}
실행 결과:
Alice
5. 흔한 실수와 주의사항
1. List<T>의 인덱스 초과
잘못된 인덱스를 사용하여 List<T>에 접근하면 ArgumentOutOfRangeException이 발생합니다.
var numbers = new List<int> { 1, 2, 3 };
// Console.WriteLine(numbers[5]); // 잘못된 인덱스 사용
2. Dictionary<TKey, TValue>에 중복 키 추가
Dictionary에 이미 존재하는 키로 값을 추가하려 하면 ArgumentException이 발생합니다.
var users = new Dictionary<int, string>();
users.Add(1, "Alice");
users.Add(1, "Bob"); // 중복된 키 사용