ADT(추상 자료형)이란?
구현 방법은 명시하지 않고 기능(Operation)만을 나열한 자료구조의 형태
자판기의 경우 외부에서 보았을 때 자판기 안에서 어떠한 원리로 기능이 작동하는지는 알 수 없지만 버튼을 누름으로써 음료수를 뽑아 먹을 수 있음
이 때 버튼을 누르는 것이 Operation을 통해 외부에서 ADT내의 자료에 접근하는 것이라고 할 수 있음
따라서 ADT의 Operation을 알면 실제 구현이 어떻게 되어있는지 몰라도 사용이 가능함
-> What (o), How(x)
-> Java의 Interface도 ADT라고 할 수 있음
Bag를 ADT로 표현한 예시
public interface BagInterface <T> {
public int getCurrentSize (); //가방 안에 들어있는 품목의 개수
public boolean isFull (); //가방이 가득 찼는지?
public boolean isEmpty (); //가방이 비어있는지?
public boolean add (T newEntry); //새로운 품목을 가방안에 넣음, 성공 여부 반환
public T remove (); //특정되지 않은 항목을 제거하고, 제거에 성공하였을 경우 제거된 품목이 무엇인지 반환, 실패하였을 경우 null 반환
public boolean remove (T anEntry); //특정 항목을 제거하고 성공 여부 반환
public void clear (); //가방에 있는 모든 품목 제거
public int getFrequencyOf (T anEntry); //특정 품목의 개수 반환
public boolean contains (T anEntry); //특정 품목이 들어있는지의 여부 반환
public T [] toArray (); //가방에 있는 모든 품목을 Array형태로 생성하여 반환
}
왜 ADT를 사용?
어떠어떠한 객체(object)들이 있으며 이러이러한 함수(function)들로 구성되어있음을 나타내므로 외부는 공개적(public)이며, 구현방법을 나타내고 있지 않으므로 내부는 비공개적(private)
-> 사용자는 사용법만 알면, 데이터 타입을 쉽게 사용 할 수 있음 + 정보 은닉
프로그램을 설계하는 사람이 ADT를 정의해주면, 프로그램을 구현하는 사람이 개발을 따로 맡아 협업이 편리해짐
-> 개발과 유지보수에 도움이 됨
reference
Carrano-Data Structures and Abstractions with Java 3rd Edition
'CS > Data Structure' 카테고리의 다른 글
| [DS] Recursion(재귀) (0) | 2022.07.13 |
|---|---|
| [DS] Stack (0) | 2022.07.08 |
| [DS] Time Complexity (시간 복잡도) (0) | 2022.07.07 |
| [DS] Array List, Linked List (0) | 2022.07.06 |