자료형(Data Type)
말 그대로 데이터의 종류(형식)를 말한다. 정수, 실수, 문자열 등이 기초적인 자료형의 예
자료형의 3가지 형태
기초 자료형 | 파생 자료형 | 사용자 정의 자료형 |
char | Array(배열) | Struct(구조체) |
int | Pointer(포인터) | 공용체 |
Float | . | 클래스 |
Double, Long .... |
. | . |
기초 자료형 : 일반적으로 우리가 프로그래밍을 사용할떄 사용되는 자료의 타입
파생 자료형 : 기초자료형을 이용해서 약간의 그룹을 이루게 하거나 주소를 가리키는등의 약간의 확장이 된 자료의 타입
사용자 정의 자료형 : 간단히 설명하면 기초 자료형 + 파생 자료형 = 사용자 정의 자료형 이라 볼 수 있다. 사용자가 입맛에 맞추어서 정의 시킨 자료형이다.
데이터 집합과 연산의 집합
자료형은 데이터의 집합 + 연산의 집합으로 볼 수 있다.
int 자료형 속 데이터의 예시 : -INT_MIN ,......,INT_MAX
int 자료형 속 연산의 예시 : +, -, *, /, %, == ............
아직 이 수업에선 나오지 않았지만 다른수업인 객체지향 프로그래밍 에선 클래스(사용자 정의 자료형)라는걸 배우게 되는데 여기서는 사용자가 정의한 자료형, 파생자료형말고도 안에 정의된 연산 방법인 메소드 또한 포합이 된다.
추상 데이터 타입(ADT : Abstract Data Type)
객체지향 프로그램에서 가장 중요한 개념, 자료구조에선 데이터 타입을 추상적으로 정의한 것.
데이터나 연산이 무엇(What)인가는 정의 되지만,
데이터나 연산을 어떻게(How) 컴퓨터 상에서 구현할 것인지 정의 되지 않는 것
ex) 인간이란 단어를 들었을때 우리가, 사람의 형체를 생각하지, 그안에 들어간 단백질 구조, 수분량, 장기기관의 소화 과정, 두뇌의 인식 과정을 생각하지 않는 것을 추상 데이터 타입으로 이해할 수 있다.
추상 데이터 타입의 유래
추상화 -> 정보은닉기법 -> 추상 자료형
추상화는 사용자에게 중요한 정보는 강조하되, 중요하지 않은 세부 구현 사항을 생략 하는것.
ex) 응용프로그램 <-----------> ADT(공용 인터페이스) <------------> 구현코드
객체 : 0에서 시작해서 INT_MAX까지 순서화된 정수의 부분 범위
함수 :
Nat_Number Successor(x)::= if(x == INT_MAX) return x else return x+1
Boolen Equal(x,y) ::= if(x==y) return True else retrun false
Nat_Number add(x,y) ::= if (x+y) <= INT_MAX) retrun x+y else return INT_MAX
Nat_Number sub(x,y) ::= if (x<y) return 0 else return x-y
독자가 만약 0에서 끝까지에 정수 부분을 입력 받아서 그걸 생각해 냈다면 머릿속에서 저 함수가 실행된것이다. 이것이 추상화
정리하는 필자도 말하면서 햇갈린다. 예시와 경험을 통해서 감각적으로 이해하는걸 추천한다.
위에 코드는 내가 수업도중에 교수님이 보여주신 예시중 하나이므로 앞선 강의에 유사코드 방식일 수 있으니 직접 구현시 오류가 날 수 있다.
추상 데이터 타입을 TV에 빗대어서 표현 하였을때
TV | 추상 데이터 타입(ADT) |
TV의 인터페이스가 제공하는 기능만 이용가능 | 사용자들은 ADT가 제공하는 연산만 이용가능 |
사용자는 TV의 내부를 뜯어볼 수 없다 | 사용자들은 ADT 내부의 데이터에 접근 할 수 없다. |
TV 내부에서 무엇이 일어나는지 알 수 없어도 사용이 가능하다. | 사용자들은 ADT 가 어떻게 구현되었는지 모르더라도 사용이 가능하다 |
처음에 무슨말을 하는지 모르는 사람은 일상생활에 빗대어서 이해해보자. 우리는 이미 추상이란걸 알고 있다.
이번 수업을 마치고 느낀점 : 자료형의 3가지와 추상 데이터를 알려주는 수업이였다. 가장 중요한 내용인 추상 데이터는 객체지향 프로그래밍에서도 다루니 어느정도 이해해 두는것이 중요하다. 분명이거 시험에 나올거 같다.
'이론공부 > 자료구조' 카테고리의 다른 글
자료구조 공부#7 (희소 행렬) (0) | 2021.03.23 |
---|---|
자료구조 공부#6 (배열, 구조체) (0) | 2021.03.16 |
자료구조 공부#5 (순환, 반복#2) (0) | 2021.03.16 |
자료구조 공부#3 (알고리즘의 성능 분석) (0) | 2021.03.09 |
자료구조 공부 #1 (자료구조와 알고리즘) (0) | 2021.03.07 |