[Data Structures][03-1] 추상 자료형 : Abstract Data Type
Data Structures

[Data Structures][03-1] 추상 자료형 : Abstract Data Type

본 글은 윤성우의 열혈 자료구조 책을 읽고, 강의를 수강하고 복습한 것을 기록한 글입니다.

강의 교안 또한 참고하여 작성하였습니다.

(강의 교안의 경우 오렌지 미디어에서 다운로드할 수 있습니다)


목차
Chapter 03. 연결 리스트(Linked List) 1

Chapter 03-1: 추상 자료형 : Abstract Data Type

- 추상 자료형(ADT)의 이해

  - 지갑을 의미하는 구조체 Wallet의 정의

  - 구조체 Wallet의 추상 자료형 정의

- 자료구조의 학습에 ADT의 정의를 포함합니다

 


추상 자료형 : Abstract Data Type

추상 자료형(ADT)의 이해

 우리가 알고 있는 자료형은 data들을 담을 수 있는 그런 것이다. 그러나 자료형에는 기능도 포함이 된다. 기능도 data type의 종류로 여겨지며 추상적이기에 Abstract가 붙은 Data Type인 것이다.  

 

추상 자료형이란?

구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것

 

 

지갑의 추상 자료형

- 카드의 삽입
- 카드의 추출(카드를 빼냄)
- 동전의 삽입
- 동전의 추출(동전을 빼냄)
- 지폐의 삽입
- 지폐의 추출(지폐를 빼냄)

기능의 명세를 가리켜 왜 자료형이라 하는 것일까?

 

 

지갑을 의미하는 구조체 Wallet의 정의

 

자료형 Wallet의 정의

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

자료형 int와 관련해서 우리가 아는 것을 나열해 보자!

어떻게 생겼는지 아는 것이 아니라 어떠한 연산이 가능한지를 알고 있지 않은가?

 

완전한 자료형의 정의로 인식되기 위해서는

해당 자료형과 관련이 있는 연산인 함께 정의되어야 한다!

 

즉, 자료형에 관련되어서 객체가 가지고 있는 것의 기능도 자료형에 포함되어 있어야 한다.

 

 

자료형 Wallet 정의의 일부

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

프로그램 기능 작성방법

1. 함수들

2. Data(구조체) + 함수

3. 구조체(함수) => 자료형 정의 + 함수

 

구조체를 정의한다는 건 구조체뿐만 아니라 해당 구조체에 대한 기능을 구현하고 정의하는 것이다.

자료형 구조체에는 해당 구조체와 해당 구조체와 관련된 기능, 즉 함수(메서드)가 포함되어 있어야한다.

 

 

구조체 Wallet의 추상 자료형 정의

 Java가 익숙한 나로서는 마치 객체를 선언하고 그 객체의 기능, 메서드가 곧 추상 자료형인 것으로 이해된다. 그리고 메서드 또한 해당 객체의 자료형인 것이다. 

 


자료구조의 학습에 ADT의 정의를 포함합니다

 

자료구조 학습의 옳은 순서

 

1. 리스트 자료구조의 ADT를 정의한다.

2. ADT를 근거로 리스트 자료구조를 활용하는 main함수를 정의한다.

3. ADT를 근거로 리스트를 구현한다.

 

 

자료구조의 내부 구현을 모르고도 해당 자료구조의 활용이 가능하도록 ADT를 정의하는 것이 옳다.

main 함수를 먼저 접하게 되면, 구현할 자료구조를 구성하는 함수들을 잘 이해할 수 있다.

 

ADT는 구조체의 기능에 해당한다고 생각하면 이해하기 쉽다.