설명
정의 : 추상 데이터 타입(ADT)은 데이터와 그 데이터에 대한 연산을 함께 묶어놓은 것
ADT는 데이터가 어떻게 구현되어 있는지에 대한 세부 사항은 숨기고, 데이터에 대한 타입과 해당 타입에 수행할 수 있는 연산들만을 정의함
예시 : 스택, 큐, 리스트, 트리 등은 모두 ADT의 예
예를들어, 스택 ADT는 push, pop, isEmpty 등의 연산을 정의하지만, 이러한 연산이 내부적으로 어떻게 구현되는지는 정의하지 않음
목적 : ADT는 추상화를 통해 구현 세부 사항으로부터 사용자를 분리시키는데 중점을 둠
이를통해 사용자는 복잡한 내부 구현에 신경 쓰지 않고 인터페이스만을 이용해 데이터를 다룰 수 있음
설명
정의 : 데이터 구조는 컴퓨터 과학에서 데이터의 조직, 관리, 저장 방식을 정의하는 것
데이터구조는 효율적인 접근과 수정을 위해 데이터의 물리적 또는 논리적 관계를 고려하여 설계됨
예시 : 배열, 연결 리스트, 해시 테이블, 힙, 그래프 등이 데이터 구조의 예
이러한 구조들은 데이터가 메모리에 어떻게 저장되고 관리될지를 구체적으로 정의함
목적 : 데이터 구조의 주된 목적은 데이터를 효율적으로 저장하고 처리하는 것. 적적한 데이터 구조의 선택은 알고리즘의 효율성을 크게 향상시킬 수 있음
추상화 수준 : ADT는 데이터 구조의 논리적 특성을 정의하는데 초점을 맞추며, 구현 세부 사항은 숨김. 반면, 데이터 구조는 데이터가 실제로 어떻게 저장되고 관리되는지에 대한 구체적인 세부 사항을 다룸
구현과 인터페이스 : ADT는 인터페이스에 중점을 두고 구현 세부 사항은 고려하지 않음. 데이터 구조는 실제 메모리 내에서 데이터가 어떻게 구현되는지를 포함함
사용례 : ADT는 설계 시 데이터의 타입과 연산에 대한 명세에 집중함. 데이터 구조는 프로그램의 성능을 최적화하기 위해 적잘한 저장 및 관리 방식을 고려하는데 사용
ADT는
무엇(What)
을 할 것인지에 대해 정의하고, 데이터 구조는어떻게(How)
할 것인지에 대해 정의함
👉🏻ADT
를구현한 것
을DS
라 볼 수있음
예
Stack<Integer> stack = new Stack<>();
Stack<Integer> stack
: 스택 ADT의 타입new Stack<>();
: ADT를 실제로 구현하는 데이터 구조
class = DS (🔺)
Interface = ADT (⭕️)
인터페이스는 Java
에서 ADT와 유사한 개념을 제공함(⭕️)
Java
에서 데이터 구조(DS)와 비슷한 역할을 함(🔺)