Abstract Data Type
data type, 혹은 데이터형
C언어에서 변수들은 data type을 가진다.
가장 대표적인 것인 int,
int는 정수값을 말한다.
int형의 변수에는 음의 정수, 0, 양의 정수를 저장할 수 있다.
실수값을 저장할 수 있는 data type은 float, 혹은 double
또는 새로운 데이터형을 만들 수도 있다.
struct를 이용하는 것이다.
예를 들어,
struct A
{
int a;
char c[10];
};
와 같이 하면
struct A라는 새로운 data type을 만든 것이다.
그리고 struct A a라고 하면,
a 라는 변수를 만든 것이고,
이 변수의 data type은 struct A가 된다.
abstract data type
Abstract Data Type (줄여서 ADT)라는 것이 있다.
data type은 데이터형이니 이해하는 데 아무 문제가 없을 것인데,
abstract가 앞에 붙었다.
Abstract의 사전적 의미는 '추상적'이다.
우리말로 하면, ADT는 추상데이터형 이라고 번역하면 되겠다.
그래도 이게 뭔지 잘 이해가 되지 않을 것이다.
우선, 정의부터 얘기하자면
ADT라는 것은 '데이터를 저장할 수 있는 공간'과 '그 공간을 사용하는 방법'을 정의한 것이다.
정의를 얘기해도 뭔말인지,,
그럼, 비유를 들어서 얘기해보자.
데이터 '물'이 있다. 먹는 물을 말하는 것이다.
물을 저장할 수 있는 공간을 신이 창조하면서 '냄비'라고 했다고 하자.
'물을 저장할 수 있는 공간' = '냄비' = '데이터를 저장할 수 있는 공간'
'냄비'는 data type이 된다.
'냄비'를 사용할 수 있는 방법을 생각해 보자.
1. 물을 넣다.
2. 물을 비우다.
3. 물을 데우다.
(1, 2, 3 방법) = '냄비를 사용하는 방법' = '고 공간을 사용하는 방법'
이렇게 '냄비'라는 저장공간을 만들면서, 그 공간을 사용하는 방법까지 정의한 것을
abstract data type이라고 한다.
비유를 다 걷어내고 말하면,
Abstract data type이란 데이터공간구조와 그 구조를 사용할 수 있는 방법을 같이 정의한 것
데이터구조란 결국 ADT를 정의하고, 그것을 프로그래밍 언어로
구현한 것에 불과하다.
예를 들어, 필요한 ADT가 다음과 같은 것이라고 하자.
숫자를 저장하는 공간인데,
거기에 숫자를 넣을 수도 있고,
꺼낼수도 있는데, 꺼낼 때는 넣은 순서대로 꺼내어진다.
데이터공간구조는 "숫자를 저장하는 공간"이고,
사용방법은 "숫자를 넣고, 넣은 순서대로 꺼내어진다."가 된다.
위에서 설명한 ADT는 Queue(큐)라는 것이다.
이런 ADT도 있다.
숫자를 저장하는 공간인데,
거기에 숫자를 넣을 수도 있고,
꺼낼 수도 있는데, 꺼낼 때는 넣은 순서의 역순으로 꺼내어 진다.
이것은 Stack (스택)이라는 ADT이다.
데이터구조를 공부한다는 것은
이러한 ADT들을 공부하고,
필요에 따라 새로운 ADT들을 만들 수 있는 능력을 키우는 것이다.
typedef 사용하기
매크로
C언어에서 macro라는 것이 있다.
말로 설명하기는 좀 그렇지만,
#define AAA 10
이런 거다.
이것은 소스코드에 나타나는 AAA를 모두 10으로 처리하게 하는 것이다.
왜 이런 매크로를 사용하는가?
1. 가독성
2. 편리성
3. 오류방지
세 가지 정도의 이유가 있다.
예를 들어, 3.1415921564,, 파이값, 원주율을 소스코드에서 사용한다고 하자.
그것도 아주 많이.
이 숫자가 길어서, 문제가 많다.
1. 소스코드가 지저분해서 보기가 싫다. --> 가독성이 떨어진다.
2. 숫자가 긴 파이값을 입력하기가 불편하다 ---> 편리성이 떨어진다.
3. 파이값 입력하다가 오타나기가 쉽가 --> 오류가 쉽게 생긴다.
그래서,
#define PI 3.1415921564
이렇게 해놓고, 소스코드에서는 PI만 쓰면
문제점, 1, 2, 3를 한 번에 해결할 수 있다.
typedef
만약에,
int 라는 데이터형 이름이 마음에 안든다고 하자.
왜 마음에 안들지?
글쎄,, 날 버리고 매몰차게 떠난 그 사람의 이름이 "김int"라고 하자.
가뜩이나 힘들어 죽겠는데,
C언어 프로그래밍 할 때마다, int가 나오면 이건 더 죽을 맛이다.
이 때 int 대신 다른 것을 쓸 수 있도록 해주는 것이 typedef이다.
typedef int byebye;
이렇게 하면, int 대신에 byebye를 해도 된다.
int a, b, c; 이렇게 코딩하던 것을
byebye a, b, c; 이렇게 해도 된다는 것이다.
물론,,,
헤어진 연인의 이름을 피하기 위해 typedef가 생기지는 않았다.
typedef는 긴 data type이름을 사용하는 불편함을 없애기 위한 것이다.
긴 data type 이름이란 무엇인가?
구조체를 새로 만들어 보자.
struct ABCD
{
int a;
char c;
float k[10];
};
이제 새로운 data type struct ABCD가 생긴 것이다.
이 type을 갖는 변수를 만들려면,
다음과 같이 해야 한다.
struct ABCD x;
struct ABCD y, z;
이렇게 했을 때 문제점은
1. 불편해
2. 틀리기 위해
3. 소스가 지저분해져
이를 해결하려면 typedef를 사용하면 된다.
1. struct를 정의하면서 이름을 바로 YYY로 하는 방법도 있고,
2. struct abc를 정의한 후에, typedef를 이용해서 이름을 YYY로 개명하는 방법도 있다.
위에서 설명한 내용을 동영상에서 "무미건조"하게 설명합니다.
'데이터구조' 카테고리의 다른 글
데이터구조 6차시: Recursion을 이용한 피보나츠(Fibonacci) 수열계산과 하노이탑 (0) | 2015.03.20 |
---|---|
데이터구조 5차시: Recursion을 이용한 거듭제곱 계산 (0) | 2015.03.20 |
데이터구조 4차시: Recursion (0) | 2015.03.20 |
데이터구조 2차시: 시간복잡도 Big-oh notation (0) | 2015.03.14 |
데이터구조 1차시: 데이터구조와 알고리즘 개요 (1) | 2015.03.14 |