본문 바로가기

알고리즘/자료구조

추상 자료형(Abstract Data Type)

728x90
반응형

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이 대표적인 다형성의 예이다.

728x90
반응형

'알고리즘 > 자료구조' 카테고리의 다른 글

큐(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