#datastructure
> [!introduction]
> 이 글에서는 **PDT (Primitive Data Type)**, **UDT (User-Defined Type)**, 그리고 **ADT (Abstract Data Type)** 가 무엇이며 PDT, UDT, ADT가 어떻게 **자료구조 (Data Structure)** 라는 개념을 구성하는지 알아봅니다.
## PDT (Primitive Data Type)
PDT는 주로 **원시 자료형**이라 부르며, 프로그래밍 언어 수준에서 데이터를 담기 위한 가장 기본적인 형태의 자료형을 말한다. C를 예시로 들자면, `int`, `char`, `double` 등이 PDT에 속한다. PDT는 프로그래밍 언어를 구성하는 여러 요소 중 하나이며, 제거될 수 없다.
## UDT (User-Defined Type)
UDT는 주로 **사용자 정의 자료형**이라 부르며, C의 구조체나 C++, Java, Python 등의 클래스처럼 프로그래밍 언어의 문법적 지원을 통해 사용자가 임의로 만든 자료형을 의미한다. PDT와 달리 프로그래밍 언어의 필수 요소가 아니며, 프로그래밍 언어 위에 구현된 개념에 가깝다.
## ADT (Abstract Data Type)
ADT는 주로 **추상 자료형**이라 부르며, 프로그래밍 언어와 독립적인 개념으로 자료들과 그 자료들에 대한 연산을 아우르는 개념이다. 자료의 형태와 자료에 대한 연산은 ADT에 정의되어 있지만, 이에 대한 구체적인 구현은 ADT에 포함되지 않는다. 객체지향 프로그래밍을 지원하는 프로그래밍 언어들의 추상 클래스(Abstract Class) 와 밀접한 개념이다.
## 자료구조 (Data Structure) 의 탄생
이제 새로운 자료구조가 어떻게 구현되는지 보자. 사용자가 원하는 자료형이 없다면, 새로운 자료구조를 만들어 소스 코드에서 사용할 수 있어야 한다. 이때 새로운 자료구조가 코드에서 등장하려면 그 자료구조가 정의되어 있어야 한다. 새로운 자료구조에 담겨질 데이터가 어떤 모습인지, 그리고 그 자료구조와 어떤 상호작용이 가능한지 정의해야 그 정의에 맞게 자료구조를 구현할 수 있을 것이다. 이 과정이 바로 추상 자료형을 정의하는 과정이다. 구체적으로 무슨 일이 일어나는지는 일단 관심 밖이지만, 데이터가 어떤 모습인지, 그리고 어떤 연산을 했을 때 어떤 종류의 결과가 도출되어야 하는지 분명하게 정하는 것이 바로 ADT다.
자료구조를 구현하기 위해 필요한 요구사항이 모두 정해졌으니 이제 소스 코드에서 직접 구현해야 할 것이다. 이 과정이 바로 사용자 정의 자료형을 만드는 과정으로, 프로그래밍 언어를 통해 원하는 데이터와 인터페이스를 담은 자료구조를 구현한다. 구현된 자료구조의 구체적인 형태는 프로그래밍 언어마다 다를 수 있다. 예를 들어 C는 객체지향 프로그래밍을 지원하지 않기 때문에 객체지향 프로그래밍을 지원하는 C++, Java, Python과 자료구조를 구현한 코드의 전반적인 생김새가 다를 것이다.
다만 같은 객체지향 프로그래밍을 지원하는 프로그래밍 언어들일지라도 구체적인 코드는 다 다르다. 언어의 문법과 함께 자료구조를 구성하는 기초 요소는 결국 원시 자료형, PDT다. 자료구조를 정의하는 과정은 추상적인 아이디어부터 시작해서 그 아이디어를 컴퓨터에 맞게 구체화하는 과정이지만, 정의에 따라 구현된 자료구조를 구성하는 가장 기본적인 요소는 프로그래밍 언어의 가장 기본적인 구성 요소이기도 한 원시 자료형이다.
---
## 참고 자료 & 더보기
### 참고 자료
+ Kamran, A. (2022). _전문가를 위한 C_ (박지윤, Trans.; 1st ed.). 한빛미디어.
+ [자료구조(Data Structure)란?](https://okeybox.tistory.com/176)
+ [ADT(abstract data type) 과 자료구조의 차이](https://velog.io/@lky9303/ADTabstract-data-type-과-자료구조의-차이-feat.배열-리스트)
### 더보기
+ 추후 업데이트됩니다.