CS/Data Structure

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

pipes0512 2022. 7. 5. 13:50

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

https://blog.naver.com/PostView.naver?blogId=nsj6646&logNo=221503084744&redirect=Dlog&widgetTypeCall=true&directAccess=false 

https://rich-developer.tistory.com/172

'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