예제가 포함된 C# 컬렉션 튜토리얼
⚡ 스마트 요약
C#의 컬렉션은 객체 그룹을 저장하고 관리하는 유연한 방법을 제공합니다. 배열과 달리 컬렉션은 런타임에 크기가 커지거나 작아지며, System.Collections 및 System.Collections.Generic 네임스페이스는 리스트, 딕셔너리, 스택, 큐에 대한 기성 형식을 제공합니다.

이전 튜토리얼에서는 C#에서 배열을 사용하는 방법에 대해 배웠습니다. 이에 대한 간략한 개요를 살펴보겠습니다. 프로그래밍에서 배열은 관련 개체 집합을 그룹화하는 데 사용됩니다. 따라서 하나의 변수 이름을 통해 액세스할 수 있는 배열이나 정수 집합을 만들 수 있습니다.
C#의 컬렉션이란 무엇입니까?
컬렉션은 다음과 유사합니다. 배열, 개체 그룹으로 작업하는 보다 유연한 방법을 제공합니다.
배열에서는 배열의 요소 수를 미리 정의해야 한다는 점을 알아차렸을 것입니다. 이는 배열이 선언될 때 수행되어야 했습니다.
그러나 컬렉션에서는 컬렉션의 크기를 미리 정의할 필요가 없습니다. 언제든지 컬렉션에서 요소를 추가하거나 제거할 수도 있습니다. 이 장에서는 C#에서 사용할 수 있는 다양한 컬렉션을 사용하여 작업하는 방법에 중점을 둘 것입니다.
System.Collections 클래스
.NET 프레임워크는 기존의 비제네릭 컬렉션 클래스들을 System.Collections 네임스페이스에 그룹화합니다. 아래 표는 바로 사용할 수 있는 주요 형식을 요약한 것입니다.
| 수집 | 기술설명 |
| ArrayList | ArrayList 컬렉션은 Arrays 컬렉션과 유사합니다. C#의 데이터 유형. 가장 큰 차이점은 배열 목록 컬렉션의 동적 특성입니다. |
| 스택 | 스택은 후입선출(LIFO) 개념을 나타내는 특별한 유형의 컬렉션입니다. |
| 큐 | 큐는 선입선출(FIFO) 개념을 나타내는 특별한 유형의 컬렉션입니다. |
| 해시 테이블 | 해시 테이블은 키-값 관계를 저장하는 데 사용되는 특별한 모음입니다. |
| 정렬된 목록 | SortedList는 기본적으로 키의 오름차순으로 키-값 쌍을 저장하는 컬렉션입니다. |
| 비트어레이 | 비트 배열은 비트를 저장하는 데이터 구조의 배열입니다. |
C#에서의 제네릭 컬렉션
위의 제네릭이 아닌 클래스들은 모든 요소를 일반 객체로 저장하기 때문에 컴파일러가 형식을 검사할 수 없고, 프로그램은 값 박싱에 약간의 비용을 지불하게 됩니다. 이러한 문제를 해결하기 위해 C#에서는 System.Collections.Generic 네임스페이스를 추가했으며, 이 네임스페이스에서 각 컬렉션은 선언된 하나의 형식에 바인딩됩니다.
List와 같은 일반적인 컬렉션 문자열만 허용하므로 컴파일 시간에 오류가 감지되고 항목을 다시 읽을 때 형변환이 필요하지 않습니다. 이러한 특징 덕분에 제네릭 컬렉션은 더 안전하고 빠르며 읽기 쉽습니다. 이것이 바로 현대 C# 코드에서 기본적으로 사용되는 이유입니다.
가장 일반적인 일반 컬렉션은 다음과 같습니다.
- 목록 : 크기 조절이 가능하고 인덱스를 기반으로 하는 리스트로, ArrayList를 대체하는 일반적인 클래스입니다.
- 사전 : 키-값 쌍을 저장하고 해시 기반 조회를 통해 빠르게 데이터를 가져옵니다.
- 해시셋 : 고유한 값만 저장하며 합집합과 같은 집합 연산을 지원합니다.
- 대기줄 : 선입선출 방식의 데이터 수집으로, 큐의 일반적인 버전입니다.
- 스택 : 후입선출 방식의 컬렉션으로, Stack의 일반적인 버전입니다.
- 정렬된 목록 : 키-값 쌍을 키를 기준으로 오름차순으로 정렬하여 유지합니다.
C# 리스트 컬렉션 예제
List는 동적 배열처럼 동작하기 때문에 가장 널리 사용되는 제네릭 컬렉션입니다. 아래 예제는 문자열 리스트를 생성하고, 항목을 추가 및 제거하고, 리스트의 크기를 읽은 후, 남은 값을 출력합니다. 모든 코드는 Program.cs 파일에 작성되어 있습니다.
단계 1) System.Collections.Generic 네임스페이스를 가져오고 문자열 목록을 선언합니다.
단계 2) Add 메서드를 사용하여 항목을 추가하고 Remove 메서드를 사용하여 항목을 삭제합니다.
단계 3) Count 속성을 읽은 다음 foreach 문을 사용하여 목록을 순회합니다.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code 설명:-
- System.Collections.Generic 네임스페이스를 가져와서 프로그램에서 List 형식을 사용할 수 있게 되었습니다.
- 새로운 목록 tutorials라는 이름의 객체가 생성되고, Add 메서드를 사용하여 세 개의 이름이 추가됩니다.
- Remove 메서드는 " 값을 삭제합니다.Python그러면 목록에는 두 개의 항목이 남습니다.
- Count 속성은 항목 수를 반환하고, foreach 루프는 나머지 값을 순서대로 출력합니다.
프로그램이 실행되면 먼저 개수를 출력합니다. 2, 다음 Java 코 틀린 각 줄에 따로 표시됩니다. 이는 컬렉션이 런타임에 크기를 변경하는 방식을 보여주는데, 고정 배열은 이러한 기능을 제공하지 못합니다.
C#에서 배열과 컬렉션의 차이점
둘 다 정렬 컬렉션은 관련 항목들을 하나의 이름으로 묶지만, 프로그램이 실행되면 서로 다르게 동작합니다. 각각을 언제 사용해야 하는지 알면 더 깔끔하고 효율적인 코드를 작성하는 데 도움이 됩니다.
주요 차이점은 다음과 같습니다.
- 크기 : 배열은 선언 시 길이가 고정되는 반면, 컬렉션은 언제든지 크기가 커지거나 작아질 수 있습니다.
- 타입 처리: 배열은 단일 유형의 객체를 저장하는 반면, 컬렉션은 제네릭을 사용하면 유형 안전성을 보장할 수 있고, 제네릭을 사용하지 않을 경우 여러 유형의 객체를 혼합하여 저장할 수 있습니다.
- 위치: 배열은 언어 자체에 내장되어 있으며, 컬렉션 클래스는 System.Collections 및 System.Collections.Generic 네임스페이스에 있습니다.
- 내장 기능: 컬렉션은 항목을 추가, 제거, 검색 및 정렬하는 간편한 방법을 제공하는 반면, 배열은 기본적인 인덱스 접근만 제공합니다.
- 최고의 사용: 항목 수가 알려져 있고 고정되어 있을 때는 배열을 선택하고, 프로그램 실행 중에 항목 수가 변경될 때는 컬렉션을 선택하십시오.
요약하자면, 배열은 고정 크기 데이터에 가장 적합하고, 컬렉션은 대부분의 실제 응용 프로그램에 필요한 유연성을 제공합니다.
