추상 자료형(Abstract Data Type)
기능의 구현 부분을 나타내지 않고 순수한 기능이 무엇인지 나열한 것을 추상 자료형(ADT)이라고 한다.
객체지향 언어(C++, JAVA 등)의 클래스(Class) 또는 사용설명서(User's Guid)와 유사하다.
📌 예시 1 (선풍기의 사용 설명서)
선풍기의 사용 설명서에는 정지, 미풍, 약풍, 강풍, 회전, 타이머 등의 기능 설명과 사용 방법이 나와있다. 하지만 버튼을 눌렀을 때 선풍기 내부 회로에서 어떤 일이 발생하는지에 대해서는 전혀 나와있지 않다. 이렇게 선풍기의 사용 설명서와 같이 "구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것"을 가리켜 '추상 자료형'이라고 한다.
📌 예시 2 (음료수 자판기)
두 번째 일상 생활에서 추상 데이터 타입과 비슷한 사례로는 자판기가 있을 수 있다. 자판기 안에서 어떤 일이 일어나는지 모르지만, 원하는 음료수 버튼을 누르면 해당 음료수가 나오도록 되어있다. 이때 버튼을 누르는 것이 연산을 통해 외부에서 추상 자료형 내부 자료에 접근하는 것이라고 할 수 있다. 따라서 추상 자료형의 인터페이스(연산, 사용법)만 알면 내부 자료나 실제 구현을 몰라도 사용할 수 있다.
추상 자료형의 필요성
추상 자료형은 구현자와 사용자를 분리해준다. 라이브러리를 가져다 쓰거나 내장 함수를 사용하는 것도 추상 자료형이 정의되어 있기 때문이다. 또한 추상 자료형에 대한 구현은 외부로부터 숨겨져 정보 은닉이 이루어지게 된다.
- jQuery와 같은 라이브러리를 사용할 때 내부구조를 알지 못해도 사용할 수 있는 것
- 컴퓨터의 내부 작동 원리에 대해 잘 모르더라도 마우스와 키보드로 컴퓨터를 작동할 수 있는 것
추상 자료형과 자료구조
자료구조(Data Structure) : 추상 자료형이 정의한 연산들을 구현한 구현체를 가리킨다.
추상 자료형(Abstract Data Type) : 자료구조의 한 형태이지만 구현 방법을 명시하고 있지 않다는 점에서 자료구조와는 다르다.
예를 들어, 스택(Stack)의 형태는 후입선출(Last In First Out, LIFO)이고, push, pop, size 등의 연산을 정의할 수 있다. 그렇지만 스택이 내부적으로 배열로 구현되는지 연결 리스트로 구현되는지, 또는 size 연산을 수행할 때 원소의 개수를 일일이 세는지 아니면 개수를 따로 저장해 두는지와 같은 세부 사항들은 추상 자료형에서는 다루지 않으며, 그걸 다루기 시작하면 자료구조의 영역으로 넘어가게 된다.
📌 추상 자료형과 자료구조 구분하는 법
둘은 명백히 구분되지만, 추상 자료형과 그것을 구현한 자료구조의 이름이 비슷하거나 아예 같은 경우가 많다. 이를 구분하는 법은 조금이라도 구현 방법이 정해져 있는지 보는 것이다. 아래 예시를 보자!
- 스택이나 큐는 구현 방법이 전혀 정의되어 있지 않으니 추상 자료형이다.
- 배열은 연속적으로 저장되어 있도록 구현되어 있어야 하므로 자료구조이다.
- 연결 리스트도 다음 데이터의 위치를 저장하는 방식으로 정해져 있으니 자료구조이다.
실제 추상 자료형과, 그 추상 자료형을 구현한 자료구조의 대표적인 예는 아래와 같다.
※ 스택(Stack)은 추상 자료형과 실제 구현된 자료구조의 이름이 같음
추상 자료형(ADT) | 구현(자료구조) |
리스트(List) | 가변 배열(Dynamic Array), 연결 리스트(Linked List) |
스택(Stack) | 스택(Stack) |
큐(Queue) | 연결리스트, 배열, 스택으로 구현한 큐 |
맵(Map) | 트리 맵(Tree Map),해쉬 맵(HashMap) |
보다 자세한 설명은 추상 자료형 종류(스택 & 큐)편에서 설명한다!
📌 정리
⭐ 추상 자료형
자료와 연산이 추상적으로 구현되어 있어 실제 내부 구현은 몰라도 연산을 통해 자료에 접근할 수 있는 자료 형태
ex) 선풍기의 사용 설명서 (구체적인 기능이 아닌 간단한 기능들만 알려주는 것)
⭐ 자료구조
추상 자료형이 정의한 연산들을 구현한 구현체 (실제 내부 구조)
ex) 선풍기의 내부 회로 (추상 자료형에서 알려주지 않는 내부에서 발생하는 동작)
References
📄 https://ledgku.tistory.com/41
📄 https://gamedevlog.tistory.com/3
📄 https://jinkpark.tistory.com/77
'ETC > Study' 카테고리의 다른 글
[자료구조] 연결 리스트(Linked List) (0) | 2022.05.23 |
---|---|
[자료구조] 자료구조 종류 (0) | 2022.05.19 |
[자료구조] 추상 자료형(스택 & 큐) (0) | 2022.05.19 |
[자료구조] 자료구조(Data Structure) (0) | 2022.05.15 |
[Suck Study] 스터디 시작! (0) | 2022.05.02 |
댓글