반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발꿈나무

[C# 교과서] 10. C# 활용(4) - 컬렉션 사용하기 본문

C# 기초

[C# 교과서] 10. C# 활용(4) - 컬렉션 사용하기

HYOKYE0NG 2022. 1. 17. 14:22
반응형
컬렉션 사용하기

 

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>

 

반응형
Comments