<자료구조에서의 추상자료형>
추상자료형은 구체적인 기능의 구현 과정을 언급하지 않고, 순수히 기능이 무엇인지를 나열한 것이다.
예를 들어 주머니에 대한 '추상 자료형'을 추출해보면
- 구슬을 넣음
- 구슬을 빼냄
- 동전을 넣음
- 동전을 빼냄
- 돌을 넣음
- 돌을 빼냄
이라고 할 수 있다.
위에는 주머니에 구슬을 넣기 위해 주머니를 열어서 구슬을 넣고 주머니를 닫는 과정, 즉 구슬을 주머니에 넣기 위해 어떠한 과정을
거치는지는 언급되지 않고 있다.
<추상자료형 정의 완성>
그렇다면 위에서 언급한 주머니를 구조체를 이용해 정의해보겠다.
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의 정의를 추상자료형 정의에 추가하지 않아도 되는 것이다.
'C, C++ > C' 카테고리의 다른 글
[자료구조] 이진 탐색 알고리즘의 재귀적 구현 (0) | 2022.01.22 |
---|---|
[자료구조] 함수의 재귀적 호출 (1) | 2022.01.22 |
댓글