Goal
- 추상화와 추상자료형(ADT)에 대한 이해
- 추상 자료형을 정의할 수 있다
자료형(Data Type)
데이터를 식별하는 구분, 연산, 저장 방법 등을 모두 포함한 것
추상화(Abstraction)
핵심 개념이나 기능을 간추려 내는 것 => 개념을 만들어 가는 과정(개념의 일반화)
특징
- 자료구조에서 추상화는 세부 구현으로 부터 분리하여 개념을 일반화 시키는 것을 의미 (데이터 모델링)
- 무엇(what)인지는 정의하지만 어떤 언어를 사용해서 어떻게(how)구현할 것인지는 정의하지 않음
추상 자료형(Abstract Data Type : ADT)
세부 구현으로부터 분리해 핵심 개념이나 기능을 간추려 낸 자료형 => 구현 내용은 명시하지 않고 인터페이스만 제공
특징
- 추상화를 통해 정의됨 (데이터 모델링)
- 무엇(What)인지는 정의하지만 어떻게(how) 구현하지는 정의하지 않음
- 구현으로부터 분리하고 간단한 인터페이스(자료의 특징, 연산)만 제공함으로써 세부 내용을 외부로부터 숨김 => 추상화를 통해 캡슐화 가능 (캡슐화가 가능하므로 정보 은닉이 가능)
- 프로그래밍 언어에서 말하는 interface는 추상 자료형의 한 종류이다. (구현과의 분리)
ex) 스택, 큐, 덱, 리스트, 이진 트리와 같은 자료구조도 추상 자료형이다.
이해를 돕기 위해 추상화를 통해 추상 자료형을 정의해보자
추상 자료형 : 자동차 기어변속기
추상화 과정 : 자동차에 주차, 후진, 중립, 주행이 가능 하도록 제어할 수 있는 자동 변속기가 필요
자동 변속기에 대한 ADT
- Data : 현재 변속 모드(주차, 후진, 중립, 주행)값
- Operation : Parking(), Reverse(), Neutural(), Drive()
c++로 구현 해보면 다음과 같다.
class GearShift
{
public:
enum MODE
{
P,
R,
N,
D,
};
void parking();
void reverse();
void neutral();
void drive();
private:
MODE _mode;
};
정리
추상화 : 핵심 개념이나 기능을 간추려 내는 것
추상 자료형 : 추상화를 통해 얻어낸 자료형
추상 자료형 장점(프로그래밍 관점에서)
1. 구현에 대한 세부 사항은 숨기고 인터페이스만 제공함으로써 *캡슐화가 가능 (캡슐화를 통해 정보 은닉이 가능)
2. 핵심 기능을 미리 선언한 후 제공 함으로써, 코드의 재사용성 및 가독성을 증가시킨다. (상속과 함께 사용)
3. 반드시 필요한 기능이지만 내부 구현을 사용자에게 맡김으로서 사용의 유연함을 제공할 수 있다. (*다형성)
추상 자료형의 개념을 C++에 적용해서 생각해보자
1. class를 통해 추상 자료형 구현
2. priavte, protected, public과 같은 접근 지정자를 통해 캡슐화 가능(=> 정보 은닉 가능)
3. 추상 자료형은 다른 추상 자료형을 사용하여 정의될 수 있다. (상속) ex) 사각형과 직사각형
4. 세부 구현을 사용자에게 맡김 => 사용자에 따라 세부 구현이 다를 수 있다(다형성) ex) 정사각형 넓이 구하기
[참고]
*캡슐화 : 알약을 먹을 때 내부 성분을 알 필요가 없듯이 캡슐화 과점에서 세부 구현은 사용자가 알 필요가 없다.
캡슐화가 필요한 상황
1. 사용자가 알 필요가 없을 때 숨김 (편의성)
2. 사용자가 알면 안될 때 (보안)
*다형성 : 여러가지 형태로 나타 날 수 있는 성질
- overloading, overiding이 대표적인 다형성의 예이다.
'알고리즘 > 자료구조' 카테고리의 다른 글
큐(Queue) (0) | 2020.06.16 |
---|---|
스택(Stack) (0) | 2020.06.15 |
연결 리스트(Linked List), 리스트(List) (0) | 2020.06.12 |
배열 (0) | 2020.06.12 |
자료 구조 Orientation (0) | 2020.06.12 |