아카이브/자료구조

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

될성부른떡잎 2015. 7. 13. 23:37


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


추상 자료형(Abstract Data Type)

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

예를 들면, 사용 설명서와 같다. 선풍기의 사용 설명서를 본다고 가정하자. 사용 설명서에는 정지, 미풍, 약풍, 강풍, 회전, 타이머등의 기능 설명과 사용 방법이 나와있다. 하지만 버튼을 눌렀을 때 선풍기 내부회로에서 어떤 일이 발생하는지에 대해서는 전혀 나와있지 않다. 추상 자료형은 선풍기의 사용 설명서와 같이 기능과 사용 방법을 정의한 것이다.


추상 자료형의 필요성

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


추상 자료형 정의

무선 마우스의 추상 자료형을 정의해 본다면,

ADT of Wireless Mouse

- Data

: Power, LeftButton, RightButton    전원, 왼쪽버튼, 오른쪽버튼

- Operation

: PowerOn()                        전원 On

: PowerOff()                       전원 Off

: LeftButtonClick()                 왼쪽 버튼 클릭

: RightButtonClick()                 오른쪽 버튼 클릭


C의 헤더 파일에 구현한다면,

1
2
3
4
5
6
7
8
9
10
typedef struct{
    int power;
    int leftButton;
    int rightButton;
} WirelessMouse;
 
void PowerOn();
void PowerOff();
void LeftButtonClick();
void RightButtonClick();
cs

정리

사용자는 내부 구현이 어떻게 되어 있는지 알 필요가 없다. 추상 자료형을 보고 목적에 맞게 가져다 사용하면 되는 것이다. 구현자 입장에서는 구현을 위한 기능과 데이터 집합을 나열하는 것이다.

다음 포스팅들에서 자료구조를 구현하게 될텐데, 구현 자료구조의 추상 자료형을 정의하고 시작하게 될 것이다. 정의된 추상 자료형으로 main 함수를 정의해 보고, 추상 자료형을 구현해 볼 것이다.

추상 자료형은 정해진 것이 아니다. 많이 사용되고 있는 형태들은 있지만 자신의 구현 목적에 따라서 추상 자료형은 얼마든 달라질 수 있다. 

추상 자료형은 객체 지향 언어의 클래스 개념과 같다. C언어에서의 추상 자료형은 객체 지향 언어의 클래스와는 달리 선언된 객체 안에 속할 수 없다. 따라서 캡슐화가 되었다고는 보지 않는다. 프로그램 언어 설계에 관련된 문제이므로 이해가 되지 않는다면 참고하고 넘어가도록 하자.