자료 구조에 대해 공부하기 전에 알아볼 것들 중에 이번에는 추상 자료형에 대해서 알아보도록 하겠습니다.
추상화(Abstraction)
일반적인 추상화의 의미는 개별적인 사람이나 사물, 상황의 성질로부터 추출되어 가공된 일반적이고 공통적인 개념을 뽑아내는 것을 의미합니다.
자료구조에서는 각 자료들(복잡한 자료, 모듈, 시스템 등)로부터 개별적인 속성을 제거하고 속성을 추출하여 이를 이용하는 과정을 뜻합니다.
즉, 핵심적인 개념만을 추출해낸다고 말할 수 있죠
추상 자료형(ADT, Abstract Data Type)
자료와 자료에 대한 연산들을 명기한 개념
어떤 기능의 구현 부분을 나타내지 않고 데이터의 형태와 기능들의 집합입니다.
앞으로 공부할 자료 구조는 추상 자료형이 정의한 연산들을 구현한 것임을 의미합니다.
추상 자료형은 구현 방법을 명시하고 있지 않다는 점에서 자료 구조와는 차이가 있습니다.
(추상적으로 자료형을 표현)
추상 자료형은 연산들을 명기한 것이기 때문에 추상 자료형을 처음 보면 '이걸 자료형이라고 한다고?'라는 반응이 나올 수 있습니다.
우리가 일반적으로 알고 있는 자료형들과는 많이 다르기 때문이죠.
예를 들어 단일 연결 리스트의 추상 자료형을 보겠습니다.
기능
node* linear_search(int key)
-단일 연결 리스트에서 key라는 값을 가진 노드를 찾는다.
-만약 존재하지 않는다면 NULL을 반환
void insert(int data)
-data라는 자료를 가진 노드를 단일 연결 리스트에 추가
-init(head)부분에 노드를 추가한다
...
위와 같은 것이 추상 자료형입니다.
보기에 자료형이라는 느낌보다는 사용 설명서라는 느낌이 강합니다.
C++, JAVA, python 등에서의 class의 개념이 추상 자료형을 구현할 수 있도록 해줍니다.
자료 구조에 앞서 ADT를 짚고 가는 이유
위에서 말했듯이 구현 방법을 명시하지 않았다고 했었습니다. 이는 자료 구조의 concept을 가지고 있다고 할 수 있습니다. ADT를 통해 구체적인 자료 구조의 구현이 가능해진다는 말입니다.
지금 당장 ADT에 대해서 이해를 잘 하지 못 해도 괜찮습니다. 앞으로 여러 구조들에 대해서 공부하면서 천천히 이해해나가면 됩니다.
'data structure(자료 구조)' 카테고리의 다른 글
data structure(자료 구조) - List(리스트)와 Array(배열)::FBTT (0) | 2020.02.07 |
---|---|
data structure(자료 구조) - Big - O notation::FBTT (0) | 2020.02.05 |
data structure(자료 구조) - 점근적 분석, 점근 표기법::FBTT (0) | 2020.02.05 |
data structure(자료 구조) - manipulation of data(자료의 관리)::FBTT (0) | 2020.02.01 |
data structure(자료 구조) - data(자료)::FBTT (0) | 2020.01.31 |