추상 데이터 타입(ADT)이란?
데이터 타입(Data Type)은 컴퓨터 프로그램에서 사용할 수 있는 데이터의 종류를 의미합니다. 정수형(integer), 실수형(float)처럼 자료의 형태를 나타낼 뿐만 아니라, 해당 데이터가 차지하는 메모리 공간의 크기도 함께 정의합니다. 예를 들어 정수형은 일반적으로 4바이트, 문자형(character)은 1바이트의 공간을 사용합니다.
추상 데이터 타입(Abstract Data Type, ADT)은 그중에서도 특별한 종류의 데이터 타입으로, '값의 집합'과 '연산의 집합'으로 그 동작이 정의됩니다. 여기서 '추상(Abstract)'이라는 표현이 사용되는 이유는, 사용자가 이 데이터 타입을 활용해 다양한 연산을 수행할 수는 있지만, 그 연산이 내부적으로 어떻게 구현되어 작동하는지는 완전히 숨겨져 있기 때문입니다. 즉, ADT는 정수형과 같은 기본(primitive) 데이터 타입들을 조합해 만들어지지만, 연산의 세부 로직은 외부에 노출되지 않습니다.
대표적인 ADT의 예로는 스택(Stack), 큐(Queue), 리스트(List) 등이 있습니다.
주요 ADT의 연산 살펴보기
1. 스택(Stack)
스택은 후입선출(LIFO, Last-In First-Out) 방식으로 동작하는 자료구조입니다.
- isFull() — 스택이 가득 찼는지 확인합니다.
- isEmpty() — 스택이 비어 있는지 확인합니다.
- push(x) — 요소 x를 스택에 삽입합니다.
- pop() — 스택의 최상단(top)에 있는 요소 하나를 삭제합니다.
- peek() — 스택의 최상단 요소를 조회합니다.
- size() — 스택에 저장된 요소의 개수를 반환합니다.
2. 큐(Queue)
큐는 선입선출(FIFO, First-In First-Out) 방식으로 동작하는 자료구조입니다.
- isFull() — 큐가 가득 찼는지 확인합니다.
- isEmpty() — 큐가 비어 있는지 확인합니다.
- insert(x) — 큐의 뒤쪽(rear) 끝에 요소 x를 추가합니다.
- delete() — 큐의 앞쪽(front) 끝에서 요소 하나를 삭제합니다.
- size() — 큐에 저장된 요소의 개수를 반환합니다.
3. 리스트(List)
리스트는 요소들을 순차적으로 관리할 수 있는 가장 일반적인 선형 자료구조입니다.
- size() — 리스트에 저장된 요소의 개수를 반환합니다.
- insert(x) — 리스트에 요소 x를 삽입합니다.
- remove(x) — 지정한 요소 x를 리스트에서 제거합니다.
- get(i) — 위치 i에 있는 요소를 반환합니다.
- replace(x, y) — 요소 x를 값 y로 교체합니다.
ADT를 사용하는 이유
ADT는 데이터의 구현 세부 사항과 인터페이스를 분리함으로써 코드의 모듈화와 재사용성을 크게 높여줍니다. 사용자는 데이터가 내부적으로 어떻게 저장되고 처리되는지 알 필요 없이, 정의된 연산만으로 프로그램을 작성할 수 있습니다. 또한 내부 구현을 변경하더라도 인터페이스가 동일하게 유지되면 기존 코드를 수정할 필요가 없기 때문에, 유지보수 측면에서도 매우 효율적입니다.