콘텐츠로 건너뛰기
Home » 일반화 컬렉션

일반화 컬렉션

  • by
일반화 컬렉션

컬렉션의 성능 문제

이전에 살펴보았던 컬렉션 강좌에서 (ArrayList, Queue, Stack, Hashtable) 은 성능의 문제가 있다는 얘기를 했습니다.

컬렉션은 데이터의 어떤 타입도 전부 object 타입으로 저장하기 때문에 데이터에 접근할때마다 본래 타입으로의 형식 변환이 무수하게 일어나며, 이는 곧 성능의 저하로 나타납니다.

이러한 이유에서 컬렉션 보다는 일반화 컬렉션을 사용하는것이 좋다.

일반화 컬렉션은 형식을 지정해서 사용하기 때문에 불필요한 형식 변환을 발생 시키지 않으며, 잘못된 형식의 객체를 담는 위험을 피할 수 있다.

일반화 컬렉션에는 List, Queue, Stack, Dictionary 들이 있는데,  (ArrayList, Queue, Stack, Hashtable)  의 일반화 버전이다.

일반화 컬렉션은 System.Collections.Generic 네임스페이스 안에 있기 때문에 이들을 사용하기 위해서는 네임스페이스 부터 참조해줘야 합니다.

using System.Collections.Generic;

이제 간단하게 일반화 컬렉션들을 살펴보자.

List<T>

List는 ArrayList와 같은 기능을 하며, 다른점이라면 형식매개변수 T로 타입을 지정하고 사용해야 한다는 것이다. 물론 지정한 타입의 객체외의 다른 타입 객체는 다음수 없다.

ArrayList와 메소드도 동일하므로 다른 설명없이 예제를 작성해 보자.

using System;
using System.Collections.Generic;
namespace Test_Collection {
    class Program {
        static void Main(string[] args) {
            List < int > List1 = new List<int>();
            List1.Add(11); // 11
            List1.Add(22); // 22
            List1.Add(33); // 33
            List1.RemoveAt(1); // 11,33
            List1.Remove(11); // 33
            List1.Insert(0, 44); // 44,33
            foreach(int element in list1) {
                Console.Write("{0}", element);
                Console.WriteLine();
            }
            List < string > list2 = new List<string>();
            List2.Add("가"); // 가
            List2.Add("나"); // 나
            List2.Add("다"); // 다
            List2.RemoveAt(0); // 나,다
            List2.Remove("나"); // 다
            List2.Insert(1, "라"); // 다,라
            foreach(int element in list2) {
                Console.Write("{0}", element);
                Console.WriteLine();
            }
        }
    }
}

Queue<T>

일반화 컬렉션 큐도 형식 지정빼고는 그냥 컬렉션 큐와 다를것이 없다.

using System;
using System.Collections.Generic;
namespace Test_Collection {
    class Program {
        static void Main(string[] args) {
            Queue < int > que = new Queue<int>();
            que.Enqueue(10); // 10
            que.Enqueue(20); // 10,20
            que.Enqueue(30); // 10,20,30
            que.Dequeue(); // 20,30
            que.Enqueue(4); // 20,30,4
            que.Dequeue(); // 30,4
            while (que.Count > 0) {
                Colsole.WriteLine(que.Dequeue());
            }
        }
    }
}

Stack<T>

스택 또한 다를것이 없다.

using System;
using System.Collections.Generic;
namespace Test_Collection {
    class Program {
        static void Main(string[] args) {
            Stack < int > stack = new Stack<int>();
            stack.Push(10); // 10
            stack.Push(20); // 10,20
            stack.Push(30); // 10,20,30
            stack.Pop(); // 10,20
            stack.Pop(); // 10
            stack.Push(4); // 10,4
            while (stack.Count > 0) {
                Colsole.WriteLine(stack.Pop());
            }
        }
    }
}

Dictionary<T>

Dictionary 은 Hashtable 과 다를께 없다.

using System;
using System.Collections.Generic;
namespace Test_Collection {
    class Program {
        static void Main(string[] args) {
            Dictionary < string,
            string > dt = new Dictionary<string, string>();
            dt["Apple"] = "사과";
            dt["Banana"] = "바나나";
            dt["Orange"] = "오렌지";
            Console.WriteLine(dt["Apple"]);
            Console.WriteLine(dt["Banana"]);
            Console.WriteLine(dt["Orange"]);
        }
    }
}

댓글 남기기