2. Introduce
• 본 자료는 숭실대 글로벌미디어학부의 자
료구조 과목 (David Jean 교수님) 튜터링을
위해 제작되엇어요.
• 본 자료는 자잘한 것 까지 구체적 설명을 하
지 않으며, 핵심적인 부분을 이해하기 위한
보조자료로 사용 해주길 바람..
3. 자료구조란?
• 데이터를 효율적으로 표현하고, 저장하기 위해, 구조화하는 것.
• Ex)
vs
급하게 외출 할 일이 생겨 코디를 한다고 할 때 어느 편이 더 편할까?
당연히 후자. 옷들이 필요에 맞게 구조화 되어 있기 때문.
4. 자료구조란?
• 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다.
대표적인 자료구조
1. 배열
int v int val[100]
val1, val2, val3, val4, v s
al5…. val100;
관련된 데이터를 다 따로따로 선언하는 것보다, 배열로 한꺼번에 묶
어 인덱스로 관리하는 것이 편하다.
5. 자료구조란?
• 여러분들은 이미 자료구조의 유용성에 대해 알고 있습니다.
대표적인 자료구조
2. 클래스(구조체) class Point
{
int x, y; //위치
int color; //색상
int main(void) int size; //크기
}
{
int x, y; // 점의 위치
v
int main()
int color; //점의 색상 s {
int size; //점의 크기 Point p1;
… …
} }
마찬가지로 관련 있는 데이터는 클래스로 묶어 관리하는 것이 편
하다.
6. 자료구조란?
• 이처럼 자료가 얼마나 잘 구조화 되어 있느
냐에 따라 프로그램의 속도, 개발 시간, 유
지 보수의 비용이 달라집니다.
• 자료구조 과목에서는 Data를 잘 구조화하
기 위한 여러가지 방법에 대해 다룹니다.
7. 추상자료형(Abstract Data Type)
• 정의 : 추상적으로 정의된 자료형
• 자료형(Type)이란?
– int, double, float, char 을 말함.
• 그럼 추상자료형(ADT)이란?
– int, double, flaot, char 말고도, 내가 필요한 자
료형을 추상적으로 표현한 것.
8. 추상자료형(Abstract Data Type)
• 예를 들어 보아요.
• int a; // 여기엔 4byte 정수가 저장될 것임.
• double b; // 여기엔 8바이트 실수가 저장될 것임.
• char c; //여기엔 1바이트 문자 하나가 저장될 것임.
• Dragon d; //여기엔 드래곤이 저장된다.
//하지만 c언어에는 Dragon이란 자료형이 없다. 하지만 내가 만들면 된다. 어떻게?
9. 추상자료형(Abstract Data Type)
• Dragon 자료형을 만들기 위해.
• 먼저 Dragon을 추상화 해야한다. 이를 데이터
추상화라 한다. Dragon을 추상화해보자.
위치(x,y,z), 색깔(빨갛다, 노랗다..등등), 크기(몇 미터..)머리갯수(한 개, 두
개), 다리 갯수, 난다, 걷는다. 불을 뿜는다.
• 이렇게 내가 Dragon을 정의하는데 있어 필요
한 것들을 생각나는 대로 적어보면, 어쩔 수
없이 Dragon은 추상화된다.
10. 추상자료형(Abstract Data Type)
• 이 중, 데이터적인 것과 기능적인 것을 나눠
보자.
• 데이터적인 것 : 위치, 색깔, 크기, 머리 개
수, 다리 개수
• 기능적인 것 : 난다, 걷는다, 불을 뿜는다.
11. 추상자료형(Abstract Data Type)
즉 ,데이터를 추상화 하라는 말은
아래와 같이 사물의 데이터적인 측면과 기능적인 측면을 기
술하라는 것이다.
class Dragon
{
private:
double x, y, z; //위치
int color;
float size;
//색상
//크기
데이터
int numHead; //머리 갯수
int numLeg; //다리 갯수
public:
void Fly(); //난다
void Walk(); //걷는다 기능
void Fire(); //불뿜는다.
};
12. 추상자료형(Abstract Data Type)
데이터 적인 것은 private에 쓰고, 이를 멤버 변수라한다.
기능적인 것은 public에 쓰고, 멤버 함수라 한다.
class Dragon
{
private:
double x, y, z; //위치
int color; //색상 멤버 변수
float size; //크기
int numHead; //머리 갯수
int numLeg; //다리 갯수
public:
void Fly(); //난다 멤버 함수
void Walk(); //걷는다
void Fire(); //불뿜는다.
};
13. 추상자료형(Abstract Data Type)
이제 Dragon 자료형이 선언되었으므로, 우리는 그 정의에
맞게 하나 하나 구현만하면된다.
하나만 예를 들어 보면 아래와 같다.
ex)
void Dragon::Walk()
{
x+=10; //x축으로 10만큼 이동
}
14. 추상자료형(Abstract Data Type)
• 하지만 추상 자료형을 정의하는데 있어, 구
현에 대해서는 신경쓸 필요가 없다.
class Dragon
{
private:
double x, y, z; //위치
int color; //색상
float size; //크기
int numHead; //머리 갯수
int numLeg; //다리 갯수
public:
void Fly(); //난다
void Walk(); //걷는다
void Fire(); //불뿜는다.
};
즉 여기까지 작성(선언)이 완료됐으면, Dragon의 추상화는 끝난 것이다.
18. 추상자료형(Abstract Data Type)
즉 내가 甲이라면, 丁들에게 이러한 명령이 가능하다.
class Dragon
{
private:
double x, y, z; //위치
int color; //색상
float size; //크기
int numHead; //머리 갯수
int numLeg; //다리 갯수 “이건 A가 만들어와”
public:
void Fly(); //난다
void Walk(); //걷는다 “이건 B가 만들어와”
void Fire(); //불뿜는다.
};
“이건 C가 만들어와”
즉즉, 추상 자료형은 우리 모두가 무엇을 만들 지에 대한 설계 지도 같은 것
이라고 보면 된다.
19. 추상자료형(Abstract Data Type)
이렇게 추상자료형이 구현까지 완료되었다면, Dragon을 int, double처럼
사용할 수 있다.
#include “Dragon.h”
int main(void)
{
Dragon d; //드래곤 생성
d.walk() //드래곤이 걷는다.
d.fly(); //드래곤이 난다.
}
20. 추상자료형(Abstract Data Type)
추상자료형의 또다른 목적은 정보은닉을 위해서다.
Dragon.h
만약 위에서 언급한 A, B C들이 각 함수들을
다 구현해왔다고 하자.
(주로 추상자료형 선언은 .h파일에하고
구현은 .cpp파일에 한다.)
Dragon.cpp
21. 추상자료형(Abstract Data Type)
Dragon.h
사용자인 나는 Dragon.h에 있는 함수명과 주
석만 보고, 내가 필요한 기능을 가져다 쓰면
된다.
Dragon.cpp
Dragon.cpp에 있는 구현 방법에 대한 것은
알 필요가 없다. 머리만 아프다.
22. 추상자료형(Abstract Data Type)
Dragon.h
만약 Fly()을 사용해봤는데 드래곤
이 날지 않는다면?
A를 만나 질책하면 된다.
즉, 구현 방법에 대해서는 내가 신경
쓸 필요가 없다.
27. 추상자료형(Abstract Data Type)
조교는 코끼리를 구워서 넣든 삶아서 넣든,
교수느님께서 시키니까 어떻게든 해야한다.
교수님은 조교가 코끼리를 어떻게 넣든 신경
쓸 필요가 없다. 조교가 할 일이다.
다시 한번 말하지만, 추상 자료형에서 구현은
중요하지 않다.