개발꿈나무
[C# 교과서] 10. C# 활용(4) - 컬렉션 사용하기 본문
반응형
컬렉션 사용하기
C#의 컬렉션
- 배열: 일반적으로 숫자처럼 간단한 데이터 형식 저장
- 리스트: 간단한 데이터 형식을 포함한 개체들을 저장
- 사전(dictionary): 키와 값의 쌍으로 관리되는 개체들을 저장
일반적으로 기본형 그룹을 배열로 보고, 새로운 타입(클래스)의 그룹을 컬렉션으로 비교하기도 한다.
- 배열: 정수형, 문자열 등 집합
- 컬렉션: 개체의 집합 ex) 리스트, 집합, 맵, 사전
데이터를 그룹으로 묶어 관리한 때는 일반적으로 배열로 관리하는데 배열은 크기가 고정되어 있어 새로운 데이터를 추가할 수 없다. 이러한 단점을 제거한 것이 바로 컬렉션이다.
- 컬렉션은 반복하여 사용할 수 있는 형식 안정성으로 크기를 동적으로 변경할 수 있는 장점이 있다.
- 컬렉션은 데이터를 조회, 정렬, 중복 제거, 이름과 값을 쌍으로 관리하는 등 여러 장점이 있다.
Array 클래스
- Array.Sort(): 배열 정렬
- Array.Reverse(): 배열 역순으로 정렬
- Array.ConvertAll(): 배열 특정 값으로 변환
int[] arr = { 3, 2, 1, 4, 5 };
var sortArr = Array.Sort(arr); // 오름차순 정렬: 1, 2, 3 순서
var reverseArr = Array.Reverse(arr); // 배열 역순으로 변환 5, 4, 3, 2, 1
string[] strArr = { "10", "20", "30" };
int[] intArr = Array.ConvertAll(strArr, int.Parse); // 문자열 배열을 정수형 배열로 변경
컬렉션 클래스
- Stack 클래스
- Queue 클래스
- ArrayList 클래스
- Hashtable 클래스
Stack 클래스
- Stack 클래스는 단어 그대로 음식을 답는 접시처럼 아래에서 위로 데이터를 쌓는 형태의 자료구조이다.
- Stack 클래스는 LIFO(Last In First Out) 특성을 보이는데, 나중에 들어온 데이터가 먼저 출력된다.
- 스택이 꽉 차면 스택 오버플로(Stack Overflow)가 발생한다.
Stack 클래스의 주요 속성 및 메소드
- Count: 스택의 데이터 개수 조회
- Push(): 스택에 데이터 저장
- Pop(): 스택에서 데이터 꺼내기
using System;
using System.Collections;
class StackClass
{
static void Main()
{
Stack stack = new Stack();
stack.Push("First");
stack.Push("Second");
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
// Console.WriteLine(stack.Pop()); //error 발생: Stack이 비었음
}
}
/*
<result>
Second
First
*/
Queue 클래스
Queue 클래스는 Stack 클래스와 달리 먼저 들어온 데이터가 먼저 나온다.(FIFO: First In First Out)
- Enqueue(): 큐에 데이터 저장
- Dequeue(): 큐에서 데이터 출력
using System;
using System.Collections;
class QueueDemo
{
static void Main()
{
//[1] Queue 클래스의 인스턴스 생성
var queue = new Queue();
//[2] 큐(대기행렬)에 데이터 입력: Enqueue()
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
//[3] 큐에서 데이터 출력: Dequeue()
Console.WriteLine(queue.Dequeue()); // 10
Console.WriteLine(queue.Dequeue()); // 20
Console.WriteLine(queue.Dequeue()); // 30
}
}
ArrayList 클래스
ArrayList 클래스는 컬렉션 형태의 데이터를 저장하고 관리하는 여러 편리한 API 제공
using System;
using System.Collections;
class ArrayListNote
{
static void Main()
{
ArrayList list = new ArrayList();
list.Add("C#");
list.Add("TypeScript");
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i].ToString());
}
}
}
- ArrayList 클래스의 인스턴스인 list를 새성한 후 Add() 메서드로 문자열 등을 저장한 후 for 문 등으로 값을 읽어 사용
- ArrayList의 Add() 메서드는 매개변수로 object 형식을 받기에 C#의 모든 데이터 형식을 저장하고 사용할 수 있음
- Add()로 추가된 항목은 Remove() 같은 메서드로 제거할 수 있다.
Hashtable 클래스
Hashtable 클래스는 정수 인덱스 및 문자열 인덱스 사용 가능
using System;
using System.Collections;
class HashtableDemo
{
static void Main()
{
//[1] Hashtable의 인스턴스 생성
Hashtable hash = new Hashtable();
//[2] 배열형 인덱서를 사용 가능한 구조 및 문자열 인덱스 사용 가능
hash[0] = "닷넷코리아"; //[A] 배열과 같은 n번째 형태 사용 가능
hash["닉네임"] = "레드플러스"; //[B] 문자열 인덱스 사용 가능
hash["사이트"] = "비주얼아카데미";
//[3] 직접 출력
Console.WriteLine(hash[0]);
Console.WriteLine(hash["닉네임"]);
Console.WriteLine(hash["사이트"]);
//[4] key와 value 쌍으로 출력 가능
foreach (object o in hash.Keys)
{
Console.WriteLine(hash[o]);
}
}
}
<Reference>
반응형
'C# 기초' 카테고리의 다른 글
[C# 교과서] 13. C# 활용(7) - LINQ (0) | 2022.01.18 |
---|---|
[C# 교과서] 12. C# 활용(6) - 널(null) 다루기 (0) | 2022.01.18 |
[C# 교과서] 9. C# 활용(3) - 예외 처리하기 (0) | 2022.01.17 |
[C# 교과서] 8. C# 활용(2) - 문자열 다루기 (0) | 2022.01.14 |
[C# 교과서] 7. C# 활용(1) - 닷넷 API(구조체, 열거형, 클래스) (1) | 2022.01.14 |
Comments