Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 컬렉션(Collection) 클래스 완벽 가이드: 주요 클래스 종류와 BitArray 활용 예제

C#의 컬렉션(Collection) 클래스는 요소에 메모리를 동적으로 할당하거나, 인덱스를 기반으로 항목 목록에 접근하는 등 프로그래밍에서 데이터를 효율적으로 관리하기 위한 다양한 기능을 제공합니다. 이러한 클래스들은 System.Collections 네임스페이스에 포함되어 있으며, 상황에 맞게 적절한 컬렉션을 선택하면 코드의 성능과 가독성을 크게 향상시킬 수 있습니다.

C#의 주요 컬렉션 클래스

다음은 C#에서 자주 사용되는 대표적인 컬렉션 클래스입니다.

번호클래스 및 설명
1ArrayList
개별적으로 인덱싱할 수 있는 순서 있는 객체 컬렉션을 나타냅니다. 크기가 동적으로 늘어나므로 요소 개수가 가변적인 경우에 유용합니다.
2Hashtable
키(Key)를 사용하여 컬렉션 내 요소에 접근합니다. 키-값 쌍으로 데이터를 저장하며 빠른 검색이 필요할 때 적합합니다.
3SortedList
키와 인덱스를 모두 사용하여 목록의 항목에 접근합니다. 키를 기준으로 자동 정렬되는 것이 특징입니다.
4Stack
후입선출(LIFO, Last-In First-Out) 방식의 객체 컬렉션을 나타냅니다. 마지막에 넣은 요소가 가장 먼저 나옵니다.
5Queue
선입선출(FIFO, First-In First-Out) 방식의 객체 컬렉션을 나타냅니다. 먼저 넣은 요소가 가장 먼저 나옵니다.
6BitArray
1과 0의 값으로 이루어진 비트(bit) 단위 배열을 나타냅니다. 불리언 값 집합을 메모리 효율적으로 저장할 때 사용됩니다.

BitArray 클래스 활용 예제

그럼 C#에서 BitArray 클래스를 사용하는 실제 예제를 살펴보겠습니다. 아래 코드는 두 개의 비트 배열을 생성하고, AND 및 OR 비트 연산을 수행한 결과를 출력합니다.

예제 코드

using System;
using System.Collections;

namespace CollectionsApplication {
    class Program {
        static void Main(string[] args) {
            // 크기가 8인 두 개의 비트 배열 생성
            BitArray ba1 = new BitArray(8);
            BitArray ba2 = new BitArray(8);

            byte[] a = { 60 };
            byte[] b = { 13 };

            // 값 60과 13을 비트 배열에 저장
            ba1 = new BitArray(a);
            ba2 = new BitArray(b);

            // ba1의 내용 출력
            Console.WriteLine("Bit array ba1: 60");

            for (int i = 0; i < ba1.Count; i++) {
                Console.Write("{0, -6} ", ba1[i]);
            }

            Console.WriteLine();

            // ba2의 내용 출력
            Console.WriteLine("Bit array ba2: 13");

            for (int i = 0; i < ba2.Count; i++) {
                Console.Write("{0, -6} ", ba2[i]);
            }

            Console.WriteLine();
            BitArray ba3 = new BitArray(8);
            ba3 = ba1.And(ba2);

            // AND 연산 결과 출력
            Console.WriteLine("Bit array ba3 after AND operation: 12");

            for (int i = 0; i < ba3.Count; i++) {
                Console.Write("{0, -6} ", ba3[i]);
            }

            Console.WriteLine();
            ba3 = ba1.Or(ba2);

            // OR 연산 결과 출력
            Console.WriteLine("Bit array ba3 after OR operation: 61");

            for (int i = 0; i < ba3.Count; i++) {
                Console.Write("{0, -6} ", ba3[i]);
            }

            Console.WriteLine();

            Console.ReadKey();
        }
    }
}

실행 결과

Bit array ba1: 60
False False True True True True False False
Bit array ba2: 13
True False True True False False False False
Bit array ba3 after AND operation: 12
False False True True False False False False
Bit array ba3 after OR operation: 61
True False True True False False False False

예제 해설

위 예제에서 값 60은 이진수로 00111100, 값 1300001101로 표현됩니다.

  • AND 연산(60 & 13): 두 비트가 모두 True일 때만 True가 되므로 결과는 00001100, 즉 십진수 12입니다.
  • OR 연산(60 | 13): 두 비트 중 하나라도 True이면 True가 되므로 결과는 00111101, 즉 십진수 61입니다.

이처럼 BitArray는 비트 단위 논리 연산을 간편하게 처리할 수 있어 플래그 관리, 압축 알고리즘, 권한 비트마스크 처리 등에 유용하게 활용됩니다.