추상 데이터 타입(Abstract Data Type, ADT)?
추상 데이터 타입은 데이터 타입을 정의하는 것이다. 이때, 데이터 타입을 정의하는 것을 데이터 추상화 혹은 추상 데이터 타입이라고 한다. 사용자는 원하는 대로 데이터 타입을 만들어 낼 수 있다. 이를 통해 사용자는 데이터를 더욱 구체적으로 표현하고 쉽게 사용할 수 있게된다.
추상 데이터 타입은 데이터가 구체적으로 어떻게 표현되어 있는지를 사용자가 알 수 없도록 숨기기 때문에 사용자는 데이터의 구체적인 표현 방식을 몰라도 된다. 이는 데이터를 더욱 안전하게 보호할 수 있게 해준다.
Ex.)
Conuter() | 카운터를 생성합니다. |
increment():void | 카운터의 값을 증가시킵니다. |
reset():void | 카운터의 값을 0으로 초기화 합니다. |
current():number | 현재 카운터의 값을 반환합니다. |
📌 추상 데이터 타입을 사용하는 이유.
- 내부를 몰라도 사용할 수 있다.
- 추상 데이터 타입은 내부 데이터 표현 방식을 외부 클라이언트로부터 숨긴다.
- 복잡한 시스템을 다룰 수 있게 해준다.
- 프로그램을 디자인할 때 세부 사항을 숨길 수 있기 때문에 복잡한 시스템을 다룰 수 있다.
- 독립적으로 개선이 가능하다.
- 클라이언트 코드와 데이터 처리를 구현하는 코드가 분리되어 있어서 독립적으로 개선할 수 있다. 또한, 알고리즘을 데이터 구조와 API의 구현으로 설명하기 때문에 클라이언트 코드를 수정하지 않고도 같은 문제에 대해서 서로 다른 알고리즘을 쉽게 적용할 수 있다.
- 데이터 자체의 응집성을 확보한다.
- 클라이언트 입장에서는 세부 데이터 값이 어떻게 표현되는지 알 필요가 없다. 따라서 데이터를 하나의 객체로 만들어서 하나의 대상으로 취급할 수 있다. 이렇게 하면 데이터의 표현 방식으로부터 독립적이면서 데이터 자체의 응집성을 유지할 수 있다. 즉, 추상 데이터 타입을 만들 때는 데이터에만 집중해서 만들 수 있다.
📌 추상 데이터 타입을 구현하는 방법
- API 정하기
- API의 목적은 클라이언트 코드와 데이터 타입 코드를 서로 독립적이게 만들어서 모듈러 프로그래밍을 가능하게 하는 것이다. API를 정할 때에는 두 가지 목표가 있다.
(1) 클라이언트 코드를 명확하고 올바르게 하는 것.
(2) 구현 가능한 API를 정의하는 것.
- API의 목적은 클라이언트 코드와 데이터 타입 코드를 서로 독립적이게 만들어서 모듈러 프로그래밍을 가능하게 하는 것이다. API를 정할 때에는 두 가지 목표가 있다.
- 사용자 입장 고려하기
- 필요한 것은 무엇인지, 그리고 어떻게 사용할지, 왜 이러한 API가 필요한지 명확해야 한다.
- API에 맞게 구현하기
- 정해진 API에 맞게 추상 데이터 타입을 구현해야 한다.
- 검증하기
- 사용자가 원하는 대로 구현이 되었는지 검증한다.
'자료구조 & 알고리즘' 카테고리의 다른 글
알고리즘 - 버블 정렬(Bubble Sort) / 버블 정렬 구현 (0) | 2024.08.02 |
---|---|
자료구조 - 백(Bag), 스택(Stack), 큐(Queue) (0) | 2024.07.26 |
알고리즘 - 다이나믹 프로그래밍(Dynamic Programming) (0) | 2024.07.15 |
알고리즘 - 재귀(Recursive), 꼬리 재귀(Tail recursive) (0) | 2024.07.15 |
BigO 표기법으로 최적화하기 (0) | 2024.07.12 |