728x90

추상 자료형(ADT, Abstract Data Type)

- 구체적인 기능의 완성과정을 언급하지 않고 순수하게 기능이 무엇인지 나열한 것

    -> 기능에 초점을 두어야 함

    -> ex) 지갑의 추상 자료형 : 카드 삽입/추출, 동전 삽입/추출 ...

    -> 기능에 대한 과정은 얘기하지 않음

- 왜 자료형이라고 표현할까

    -> int라는 자료형을 생각할 때 Data를 주로 생각하게 됨

    -> 하지만 int라는 자료형으로 만들어진 것은 연산(초기화, 덧셈, 뺄셈 등)을 하게 됨

    -> 자료형은 연산에 더 많은 의미가 있음

    -> int라는 자료형을 설명할 때 Data의 관점 설명을 하는 것보다 기능(연산)의 관점으로 설명하는 것이 맞을 수 있음

- 추상 자료형은 자료구조의 일부의 개념이 아님

- ADT는 소프트웨어 공학이 발전되면서 개념이 등장하였고 좋은 코드의 기준이 됨

 

구조체의 정의

- 구조체를 활용하여 자료형을 정의한다고 말하는 것의 좋은 방향은 구조체와 그 구조체와 관련된 연산을 담당하는 함수를 같이 만드는 것

- 그 구조체를 기반으로 하는 모든 연산을 함수로 정의하는 것이 가장 좋음

- 그렇게 되면 구조체의 변수를 직접 접근하지 않아도 됨

typedef struct _wallet {
    int coin100Num;
    int bill5000Num;
} Wallet;		// 구조체

int TakeOutMoney(Wallet* pw, int coinNum, int billNum)		// 구조체와 관련된 연산

int main()
{
    Wallet m_Wallet;
    int ret = TakeOutMoney(&m_Wallet,2,5);
}

- 이렇게 구조체의 함수를 정의하는 것을 구조체의 추상 자료형을 정의한다고 말할 수 있음

- 사용자는 그 함수 내부가 어떻게 돌아가는지는 알 필요가 없기 때문에 구조체의 정의까지는 ADT에 포함시키지 않음

 

728x90

+ Recent posts