본문 바로가기
ETC/Study

[자료구조] 추상 자료형(Abstract Data Type)

by Skills 2022. 5. 17.

추상 자료형(Abstract Data Type)

기능의 구현 부분을 나타내지 않고 순수한 기능이 무엇인지 나열한 것을 추상 자료형(ADT)이라고 한다.

객체지향 언어(C++, JAVA 등)의 클래스(Class) 또는 사용설명서(User's Guid)와 유사하다.

 

📌 예시 1 (선풍기의 사용 설명서)

선풍기의 사용 설명서에는 정지, 미풍, 약풍, 강풍, 회전, 타이머 등의 기능 설명과 사용 방법이 나와있다. 하지만 버튼을 눌렀을 때 선풍기 내부 회로에서 어떤 일이 발생하는지에 대해서는 전혀 나와있지 않다. 이렇게 선풍기의 사용 설명서와 같이 "구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것"을 가리켜 '추상 자료형'이라고 한다.

 

📌 예시 2 (음료수 자판기)

https://rich-developer.tistory.com/172

두 번째 일상 생활에서 추상 데이터 타입과 비슷한 사례로는 자판기가 있을 수 있다. 자판기 안에서 어떤 일이 일어나는지 모르지만, 원하는 음료수 버튼을 누르면 해당 음료수가 나오도록 되어있다. 이때 버튼을 누르는 것이 연산을 통해 외부에서 추상 자료형 내부 자료에 접근하는 것이라고 할 수 있다. 따라서 추상 자료형의 인터페이스(연산, 사용법)만 알면 내부 자료나 실제 구현을 몰라도 사용할 수 있다.

 

추상 자료형의 필요성

추상 자료형은 구현자와 사용자를 분리해준다. 라이브러리를 가져다 쓰거나 내장 함수를 사용하는 것도 추상 자료형이 정의되어 있기 때문이다. 또한 추상 자료형에 대한 구현은 외부로부터 숨겨져 정보 은닉이 이루어지게 된다.

  • 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

📄 https://gbsb.tistory.com/306

📄 https://mingchin.tistory.com/m/127

728x90

댓글