본문 바로가기
C, C++/C

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

by Bakhwee_Bug 2022. 1. 22.

<자료구조에서의 추상자료형>

추상자료형은 구체적인 기능의 구현 과정을 언급하지 않고, 순수히 기능이 무엇인지를 나열한 것이다.

예를 들어 주머니에 대한 '추상 자료형'을 추출해보면

  • 구슬을 넣음
  • 구슬을 빼냄
  • 동전을 넣음
  • 동전을 빼냄
  • 돌을 넣음
  • 돌을 빼냄

이라고 할 수 있다.

 

위에는 주머니에 구슬을 넣기 위해 주머니를 열어서 구슬을 넣고 주머니를 닫는 과정, 즉 구슬을 주머니에 넣기 위해 어떠한 과정을

거치는지는 언급되지 않고 있다.

 

<추상자료형 정의 완성>

그렇다면 위에서 언급한 주머니를 구조체를 이용해 정의해보겠다.

typedef struct pocket
{
    int marble; //구슬의 수
    int coin;//동전의 수
    int rock;//돌의 수
} Pocket;

이렇게 구조체의 정의만으로 Pocket이라는 자료형의 정의가 완성되는 것은 아니다.

Pocket을 기반으로 하는 연산의 종류를 결정하는 것도 자료형 정의의 일부로 보아야 하고,

이러한 연산의 종류가 결정되었을 때 자료형의 정의는 완성된다

 

//물건을 꺼내는 연산
int TakeOutThing(Pocket *pw, int marbleNum, int coinNum, int rockNum);
//물건을 넣는 연산
void PutThing(Pocket *pw, int marbleNum, int coinNum, int rockNum);

이렇게 함수를 이용해 구조체에서 필요로 하는 연산을 정의했다.

그리고 위의 두 연산이 Pocket과 관련이 있는 연산의 전부라고 한다면, 이 둘이 더해져서 Pocket에 대한

자료형의 정의는 완성이다.

 

<구조체 Pocket의 추상 자료형 정의>

그럼 이제 드디어 Pocket의 추상 자료형을 정의해보자 !!

 

//물건을 꺼내는 연산
int TakeOutThing(Pocket *pw, int marbleNum, int coinNum, int rockNum);

-첫 번째 인자로 전달된 주소의 주머니에서 물건을 꺼낸다.

-두 번째 인자로 꺼낼 구슬의 수, 세 번째 인자로 꺼낼 동전의 수, 네 번째 인자로 꺼낼 돌의 수를 전달한다.

-꺼내고자 하는 물건의 총 수가 반환된다. 그리고 그만큼 물건의 수는 차감된다.


//물건을 넣는 연산
void PutThing(Pocket *pw, int marbleNum, int coinNum, int rockNum);

-첫 번째 인자로 전달된 주소의 주머니에 물건을 넣는다.

-두 번째 인자로 넣을 구슬의 수, 세 번째 인자로 넣을 동전의 수, 네 번째 인자로 넣을 돌의 수를 전달한다.

-넣은 만큼 구슬, 동전, 돌의 수가 증가한다.

 

여기서 추상 자료형 정의에 구조체 Pocket의 정의는 왜 포함시키지 않을까?

그 이유는 연산의 종류에 있다 !

 

연산의 종류에 구슬의 수나 동전의 수나 돌의 수를 확인 하는 연산이 없기 때문에 굳이

Pocket의 정의를 추상자료형 정의에 추가하지 않아도 되는 것이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글