반응형

 

 

"컬렉션(Collection)" 

 

개발을 하다보면 데이터 저장 방 하나만 바꿔도 코드가 단순해지고 성능이 달라지는 순간이 많다.

 

예를 들어 

적 목록을 List로 관리할지,

 ID로 빠르게 찾기 위해 Dictionary를 쓸지, 

중복을 막기 위해 HashSet을 쓸지에 따라 구현 난이도와 런타임 비용이 크게 달라진다.

 

 

그래서 오늘은 컬렉션(Collection)이 무엇인지 정리하고, 

상황별로 어떤 컬렉션을 선택하면 좋을지 간단히 살펴볼 예정이다.

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

1) 컬렉션(Collection)이란?

 

여러 개의 데이터를 묶어서 관리하는 컨테이너

(예: List<T>, Dictionary<TKey,TValue>, HashSet<T>, Queue<T> …)

 


C#에선 대부분 System.Collections.Generic 네임스페이스에서 사용되며,
제네릭(Generic) 컬렉션은 박싱(Boxing) 감소, 타입 안정성, 성능 측면에서 일반적으로 권장된다.

 

데이터를 추가(Add), 삭제(Remove), 조회(Find/Get), 순회(Iteration) 하기 위한 API를 제공하며,
내부 구현에 따라 연산 성능(시간복잡도)이 크게 달라진다.

 


(Array는 컬렉션 라이브러리 타입이라기보단 언어 레벨 구조지만,

실사용에서 같이 묶어 비교하는 경우가 많다)

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

2) 컬렉션 별 종류 및 간단 설명

 


Array

길이 고정, 인덱스 접근 O(1)

크기 변동이 거의 없음 + 빠른 인덱싱/순회에 적합

 



List<T>

내부는 배열 기반(연속) + Count/Capacity

크기 변동 가능 + 순회/인덱싱이 많을 때 적합


Unity에서는 Capacity를 미리 잡아 Alloc/GC를 줄이는 게 중요
(var enemies = new List<GameObject>(256); // Capacity 예약)

 

 


LinkedList<T>

노드(prev/next) 연결

중간 삽입/삭제가 정말 잦고 노드 참조를 들고 다닐 때 고려
(대부분 상황은 List<T>가 더 단순하고 빠른 편)

 

 


Stack<T>

LIFO: 마지막에 넣은 게 먼저 나옴
(Undo, 상태 복원, DFS 등에 적합)

 

 


Queue<T>

FIFO: 먼저 들어온 게 먼저 나옴
(작업 대기열, 이벤트 처리, BFS 등에 적합)

 

 



Dictionary<TKey, TValue>

평균 조회/추가/삭제 O(1)

키로 빠르게 찾기가 핵심인 경우 거의 사용


 

 


HashSet<T>

 중복 없이 담기 + 포함 여부 빠르게 체크 가능

이미 처리했는지 또는 범위 안에 있는 대상 목록 같은 용도에 사용

 

 


SortedList<TKey, TValue>

정렬 유지 + 내부 배열 기반

데이터가 작고 순회 중심이면 유리할 수 있지만, 

삽입/삭제는 이동 비용으로 O(n)

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

3) 컬렉션의 분류



(A) 인덱스 접근/순회 중심

 


"Array, List<T>"

 

 

 

 



(B) 앞/뒤로 넣고 빼기

 


"Stack<T>(LIFO), Queue<T>(FIFO)"

 

 

 

 



(C) 키(key)로 빠르게 찾기 / 중복 제거



"Dictionary<TKey,TValue>, HashSet<T>"

 





(D) 중간 삽입/삭제가 정말 잦을 때

 


"LinkedList<T>"

(조건이 맞을 때만)

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

4) 오늘의 한 줄 요약



컬렉션(Collection)은 여러 개의 데이터를 담고 다루기 위한 표준 컨테이너이며,

접근 패턴(인덱스/키/정렬/중복)에 맞게 선택하면 코드와 성능이 동시에 좋아진다.

반응형

'1일 1 cs' 카테고리의 다른 글

15. Fake Null 이란?  (0) 2026.01.30
14. 정렬 알고리즘이란?  (0) 2026.01.29
12. 시간복잡도란?  (0) 2026.01.27
11. GC(Garbage Collector) 란?  (0) 2026.01.26
10. 애니메이션(Animation)과 애니메이터(Animator)란?  (0) 2026.01.25

+ Recent posts