추상자료형 (Abstract Data Type) (ADT) 이란 ?
구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것

ex) 지갑에 대한 추상자료형

  • 카드 삽입
  • 카드 추출
  • 동전 삽입
  • 동전 추출
  • 지폐 삽입
  • 지폐 추출

구조체 wallet

-지폐와 동전의 저장이 가능한 지갑 구조체
:Wallet 이라는 자료형의 정의

 typedef struct _wallet {
    int coin100Num;   // 100원짜리 동전의 수
    int bill5000Num;  // 5,000원짜리 지폐의 수
} Wallet;

Wallet 의 ADT

-Wallet 을 기반으로 제공할 수 있는 기능 관련 연산
:구조체 정의만으로 자료형의 정의가 완성되는 것이 아님. 구조체에서 필요로 하는 연산을 함수를 이용해 정의해야 자료형의 정의가 완성됨

int TakeOutMoney(Wallet * pw, int coinNum, int billNum); // 돈을 꺼내는 연산
void PutMoney(Wallet * pw, int coinNum, int billNum);    // 돈을 넣는 연산

구조체 Wallet의 정의는 ADT에 포함시켜야하는가?

int main(void){
   Wallet myWallet;
   PutMoney(&myWallet, 5, 10);
   ret = TakeOutMoney(&myWallet, 2, 5);
}

이 책의 저자는 필요하다면 포함시켜도 되지만, 불필요한 것을 포함시키는 것은 바람직하지 못하다고 함. 돈을 넣고 꺼내는데, 구조체 Wallet의 멤버가 어떻게 구성되었는지 상관없기 때문에 굳이 포함시키지 않아도 된다는 것임.

자료구조의 정의한 추상자료형(ADT) 를 기반으로 자료구조를 활용하는 main 을 정의해 구현할 수 있음. 이 때, 그 내부 구현을 알지 못해도 활용할 수 있도록 구현할 수 있음.


Reference

  • 책 『윤성우의 열혈 자료구조』
    (2016-1학기에 들었던 자료구조 수업 책 복습 중)