C#에서 데크(Deque)는 양쪽 끝에서 요소를 삽입하고 삭제할 수 있는 이중 종료 큐(Double-Ended Queue) 자료구조입니다. 일반적인 큐(Queue)가 한쪽에서만 데이터를 넣고 다른 쪽에서 꺼내는 것과 달리, 데크는 앞(front)과 뒤(back) 두 방향 모두에서 자유롭게 작업할 수 있다는 점이 가장 큰 특징입니다.
데크의 내부 구조: 이중 연결 리스트
데크 클래스는 내부적으로 이중 연결 리스트(Doubly-Linked List) 방식으로 요소 컬렉션을 구현합니다. 이중 연결 리스트는 각 노드가 앞 노드와 뒤 노드, 즉 양방향을 모두 참조하는 구조로 되어 있어 다음과 같은 장점을 제공합니다.
- 앞쪽(front)과 뒤쪽(back) 어느 쪽으로도 빠르게 요소를 추가할 수 있습니다.
- 양쪽 끝에서 요소를 제거하는 작업도 효율적으로 처리됩니다.
바로 이러한 구조 덕분에 데크는 양방향 입출력이 필요한 상황에서 매우 유용하게 활용됩니다.
데크의 핵심 메서드
데크 클래스에서 자주 사용되는 대표적인 메서드는 다음과 같습니다.
Clear()
컬렉션에 저장된 모든 요소를 한 번에 제거하여 데크를 초기화합니다.
Contains()
특정 객체가 컬렉션 안에 존재하는지 여부를 확인합니다. 해당 객체가 포함되어 있으면 true, 없으면 false를 반환합니다.
ToArray()
ToArray() 메서드를 사용하면 컬렉션의 모든 요소를 새로운 배열(array)로 복사할 수 있습니다. 데크의 내용을 배열 형태로 변환해야 할 때 유용합니다.
Synchronized()
멀티스레드 환경에서 안전한 접근을 위해 컬렉션의 동기화(synchronized) 래퍼(wrapper)를 생성해 반환합니다. 여러 스레드가 동시에 같은 데크에 접근할 때 발생할 수 있는 문제를 예방할 수 있습니다.
마무리
정리하자면, C#의 데크 클래스는 이중 연결 리스트를 기반으로 하여 앞뒤 양쪽 모두에서 요소를 추가·제거할 수 있는 유연한 자료구조입니다. Clear(), Contains(), ToArray(), Synchronized() 등의 메서드를 활용하면 초기화, 검색, 복사, 스레드 동기화까지 손쉽게 처리할 수 있습니다.