[C#] 컬렉션 / 일반화 컬렉션 (Collection / Generic Collection)

2021. 4. 6. 22:29언어/C#. JAVA

반응형

🧵 컬렉션과 일반화 컬렉션

    ➰ 컬렉션이란?

        ▫ 같은 성격을 띄는 데이터의 모음을 담는 자료 구조를 말한다.

 

        ▫ .NET 프레임워크가 제공하는 자료구조로 ICollection 인터페이스를 상속받는다.

 

    ➰ 컬렉션 VS 일반화 컬렉션

        🔹 컬렉션

             ▫ 컬렉션 클래스들은 모두 object형식 기반으로 ArrayList의 Add(), Insert() 메소드의 선언을 보면

               object 형식의 매개변수를 받고 있는 것을 확인할 수 있다.

 

             ▫ 어떤 형식을 넣더라도 object형식으로 박싱(Boxing)이 되어 입력되고

               반대로 ArrayList의 요소에 접근해서 사용할 때는 원래의 데이터 형식으로 언박싱(Unboxing)이 이루어진다.
               (형식 변환)

 

             ▫ 컬렉션의 요소에 접근할 때마다 형식 변환이 일어나기 때문에 데이터가 많아질수록 성능문제를 일으킨다.

 

        🔸 일반화 컬렉션

             ▫ 일반화 컬렉션은 object 형식 기반의 컬렉션이 갖고 있던 문제를 해결한다.

 

             ▫ 일반화 컬렉션은 일반화에 기반해서 만들어져 있기 때문에 컴파일할 때 컬렉션에서 사용할 형식이 결정되기
               때문에 쓸데없는 형식변환을 일으키지 않고 잘못된 형식의 객체를 담게 될 위험도 피할 수 있다.

 

📖 컬렉션과 일반화 컬렉션 4가지

1. ArrayList 와 List<T>

ArrayList 

  • 가장 배열과 닮은 컬렉션
  • 요소에 접근할 때는 [ ] 연산자를 이용하고, 특정 위치에 있는 요소에 데이터를 임의로 할당 할 수 있다
  • 용량을 미리 지정할 필요가 없다
  • Method
    • Add() : 컬렉션의 가장 마지막에 있는 요소 뒤에 새 요소를 추가
    • RemoveAt() : 특정 인덱스에 있는 요소를 제거
    • Insert()  : 원하는 위치에 새 요소를 삽입

List<T>

  • ArrayList와 같은 기능을 하며 사용법도 동일
  • List<T> 클래스는 인스턴스를 만들 때 형식 매개 변수를 필요로 하고, 형식 매개 변수로 입력한 형식 외에는 입력을 허용하지 않는다

2. Queue 와 Queue<T>

Queue

  • FIFO (First In - First Out)
  • 데이터나 작업을 차례대로 입력해뒀다가 입력된 순서대로 하나씩 꺼내 처리하기 위해 사용
  • Method
    • Enqueue() : Queue 에 데이터 입력
    • Dequeue() : 데이터 꺼낼 때

Queue<T>

  • Queue와 같은 기능을 하며 사용법도 동일
  • Queue<T> 클래스는 형식 매개 변수 필요

3. Stack 과 Stack<T>

Stack

  • LIFO (Last In - First Out)
  • 먼저 들어온 데이터가 나중에 나가고, 나중에 들어온 데이터는 먼저 나가는 구조의 컬렉션
  • Method
    • Push() : Stack 데이터를 넣을 때
    • Pop() : 데이터를 꺼낼 때

Stack<T>

  • Stack와 같은 기능을 하며 사용법도 동일
  • Stack<T> 클래스는 형식 매개 변수 필요

4. Hashtable 과 Dictionary<TKey, TValue>

Hashtable 

  • Key 와 Value의 쌍으로 이루어진 데이터를 다룰 때 사용
  • 탐색 속도가 빠르고 사용이 편리
    • Hashing : 키를 이용해서 단번에 데이터가 저장되어 있는 컬렉션 내의 주소를 계산한다.

Dictionary<TKey, TValue>

  • Hashtable의 일반화 버전

 

 

※ 해당 포스팅은「이것이 C#이다(박상현 저)책 내용을 바탕으로 작성하였습니다.

반응형