라벨이 제네릭 컬렉션인 게시물 표시

C# Queue·Stack·Dictionary 차이와 선택 기준, 예제로 이해하기

이미지
C#에서 임시 데이터를 담는다고 모두 List<T> 를 사용할 필요는 없어요. 먼저 들어온 작업부터 처리하려면 Queue<T> , 가장 최근 작업부터 되돌리려면 Stack<T> , 고유한 키로 값을 찾으려면 Dictionary<TKey,TValue> 가 목적을 더 분명하게 드러냅니다. 한 문장 선택 기준 대기열처럼 먼저 들어온 순서가 중요하면 Queue, 실행 취소처럼 마지막 항목이 먼저 필요하면 Stack, 사용자 ID처럼 키로 값을 조회해야 하면 Dictionary를 선택하세요. Queue<T>는 먼저 들어온 항목부터 처리합니다 Queue는 FIFO, 즉 First In First Out 구조입니다. 매표소 대기 줄처럼 먼저 등록된 항목이 먼저 나와요. Enqueue 는 뒤에 추가하고, Dequeue 는 가장 앞의 항목을 꺼내면서 제거합니다. Peek 는 제거하지 않고 다음 항목만 확인합니다. Queue<string> jobs = new(); jobs.Enqueue("주문 101 처리"); jobs.Enqueue("주문 102 처리"); string next = jobs.Peek(); Console.WriteLine(next); // 주문 101 처리 string completed = jobs.Dequeue(); Console.WriteLine(jobs.Count); // 1 빈 Queue에서 Dequeue 나 Peek 를 호출하면 예외가 발생합니다. 외부 입력이나 비동기 처리로 비어 있을 가능성이 있다면 Count 를 확인하거나 TryDequeue , TryPeek 처럼 성공 여부를 반환하는 메서드를 사용하세요. 기존 글의 Queue<T> 입력·출력 예제입니다. Stack<T>은 마지막에 넣은 항목부터 꺼냅니다 Stack은 LIFO, 즉 Last In First Out 구조예요. 접시를 쌓아 두고...

C# List 사용법: Add·Remove·Insert와 배열 차이 정리

이미지
C#에서 순서가 있는 데이터를 담고 실행 중 항목을 추가하거나 삭제해야 한다면 List<T> 가 가장 먼저 떠올릴 수 있는 컬렉션이에요. T 자리에 int , string , 사용자 정의 클래스 같은 실제 형식을 지정하므로 잘못된 값은 컴파일 단계에서 걸러지고, 꺼낼 때마다 형 변환할 필요도 없습니다. 빠른 선택 기준 크기가 고정된 데이터는 배열, 크기가 변하는 순차 데이터는 List<T> , 키로 값을 자주 찾는 데이터는 Dictionary<TKey,TValue> 가 어울립니다. List<T> 는 인덱스 접근과 순회가 편하지만 목록 앞이나 중간의 잦은 삽입·삭제에는 비용이 생겨요. List<T>에서 T는 무엇을 뜻할까요? T 는 나중에 실제 형식으로 바뀌는 형식 매개변수입니다. List<int> 는 정수만, List<string> 은 문자열만 보관해요. 예전의 ArrayList 는 여러 형식을 한 목록에 넣을 수 있어 값을 꺼낼 때 캐스팅이 필요했고, 값 형식은 boxing과 unboxing이 발생할 수 있었습니다. 현재 .NET 코드에서는 특별한 이유가 없다면 형식 안전성이 있는 제네릭 컬렉션을 사용하는 편이 좋습니다. using System.Collections.Generic; List<string> tasks = new(); tasks.Add("로그 확인"); tasks.Add("백업 검증"); string firstTask = tasks[0]; Console.WriteLine(firstTask); 최신 C# 프로젝트에서는 암시적 전역 using 설정에 따라 using System.Collections.Generic; 이 없어도 컴파일될 수 있습니다. 하지만 코드 조각을 다른 프로젝트로 옮길 때는 네임스페이스가 필요할 수 있으니, 오류가 난다면 먼저 using 선언과 대상 프레임워크 설정을 확인하세요. 기존 ...