logo

데이터 구조의 추상 데이터 유형

추상 데이터 유형에 대해 알아보기 전에 데이터 구조가 무엇인지 알아야 합니다.

데이터 구조란 무엇입니까?

데이터 구조(Data Structure)는 데이터를 효율적으로 활용할 수 있도록 데이터를 구성하는 기술이다. 데이터 구조를 보는 방법에는 두 가지가 있습니다.

    수학적/논리적/추상적 모델/관점:데이터 구조는 일부 프로토콜이나 규칙이 필요한 데이터를 구성하는 방법입니다. 이러한 규칙은 논리적/추상적 모델에 따라 모델링되어야 합니다.구현:두 번째 부분은 구현 부분이다. 규칙은 일부 프로그래밍 언어를 사용하여 구현되어야 합니다.

왜 데이터 구조인가?

데이터 구조를 사용하면 다음과 같은 이점이 있습니다.

  • 이는 빠르고 강력한 알고리즘을 만드는 데 사용되는 필수 요소입니다.
  • 이는 데이터를 관리하고 정리하는 데 도움이 됩니다.
  • 데이터 구조는 코드를 더 깔끔하고 이해하기 쉽게 만듭니다.

추상 데이터 유형이란 무엇입니까?

추상 데이터 유형은 데이터 구조가 준수해야 하는 인터페이스만 제공하는 데이터 구조의 추상화입니다. 인터페이스는 어떤 것이 구현되어야 하는지 또는 어떤 프로그래밍 언어로 구현되어야 하는지에 대한 구체적인 세부 정보를 제공하지 않습니다.

즉, 추상 데이터 유형은 데이터 및 작업을 정의하지만 구현 세부 사항이 없는 엔터티라고 말할 수 있습니다. 이 경우, 우리는 저장하고 있는 데이터와 데이터에서 수행할 수 있는 작업을 알고 있지만 구현 세부 사항에 대해서는 알지 못합니다. 구현 세부 사항이 없는 이유는 모든 프로그래밍 언어가 서로 다른 구현 전략을 가지고 있기 때문입니다. C 데이터 구조는 구조를 사용하여 구현되는 반면 C++ 데이터 구조는 개체 및 클래스를 사용하여 구현됩니다.

예를 들어, 목록은 동적 배열과 연결 목록을 사용하여 구현되는 추상 데이터 유형입니다. 큐는 연결리스트 기반 큐, 배열 기반 큐, 스택 기반 큐를 사용하여 구현됩니다. 맵은 트리 맵, 해시 맵 또는 해시 테이블을 사용하여 구현됩니다.

추상 데이터 유형 모델

추상 데이터 유형 모델을 알기 전에 추상화와 캡슐화에 대해 알아야 합니다.

XML 주석

추상화: 사용자에게 내부 세부 사항을 숨기고 필요한 세부 사항만 사용자에게 표시하는 기술입니다.

캡슐화(Encapsulation): 데이터와 멤버 함수를 단일 단위로 결합하는 기술을 캡슐화라고 합니다.

데이터 구조의 추상 데이터 유형

위 그림은 ADT 모델을 보여줍니다. ADT 모델에는 공개 기능과 비공개 기능이라는 두 가지 유형의 모델이 있습니다. ADT 모델에는 프로그램에서 사용하는 데이터 구조도 포함되어 있습니다. 이 모델에서는 첫 번째 캡슐화가 수행됩니다. 즉, 모든 데이터가 단일 단위, 즉 ADT로 래핑됩니다. 그런 다음 추상화가 수행된다는 것은 데이터 구조에서 수행할 수 있는 작업과 프로그램에서 사용하는 데이터 구조가 무엇인지 보여주는 것을 의미합니다.

실제 사례를 통해 추상 데이터 유형을 이해해 보겠습니다.

머신러닝의 종류

스마트폰을 생각해보면. 우리는 다음과 같은 스마트폰의 높은 사양을 살펴봅니다.

  • 4GB RAM
  • 스냅드래곤 2.2GHz 프로세서
  • 5인치 LCD 화면
  • 듀얼 카메라
  • 안드로이드 8.0

위의 스마트폰 사양은 데이터이며, 스마트폰에서 다음 작업을 수행할 수도 있습니다.

    부르다():스마트폰을 통해 전화를 걸 수 있어요.텍스트():문자 메시지를 보낼 수 있어요.사진():사진을 클릭하면 됩니다.동영상():동영상도 만들 수 있어요.

스마트폰은 위에 제공된 데이터나 사양 및 작동을 갖는 개체입니다. 추상적/논리적 뷰와 동작은 스마트폰의 추상적이거나 논리적 뷰입니다.

위의 추상/논리적 뷰의 구현 뷰는 다음과 같습니다.

 class Smartphone { private: int ramSize; string processorName; float screenSize; int cameraCount; string androidVersion; public: void call(); void text(); void photo(); void video(); } 

위 코드는 스마트폰에서 수행할 수 있는 사양과 동작을 구현한 것입니다. 프로그래밍 언어의 구문이 다르기 때문에 구현 관점은 다를 수 있지만 데이터 구조의 추상/논리적 관점은 동일하게 유지됩니다. 따라서 추상/논리적 관점은 구현 관점과 독립적이라고 말할 수 있습니다.

참고: 우리는 int, float, char 등과 같은 미리 정의된 데이터 유형에 대해 수행할 수 있는 작업을 알고 있지만 데이터 유형의 구현 세부 사항은 모릅니다. 따라서 추상 데이터 유형은 데이터 유형의 모든 내부 세부 정보를 숨기는 숨겨진 상자로 간주된다고 말할 수 있습니다.

데이터 구조 예

크기가 4인 인덱스 배열이 있다고 가정합니다. 인덱스 위치는 0, 1, 2, 3부터 시작합니다. 배열은 요소가 인접한 위치에 저장되는 데이터 구조입니다. 첫 번째 요소의 메모리 주소는 1000, 두 번째 요소는 1004, 세 번째 요소는 1008, 네 번째 요소는 1012입니다. 정수형이므로 4바이트를 차지하며 각 요소의 주소 차이는 4입니다. 바이트. 배열에 저장된 값은 10, 20, 30 및 40입니다. 이러한 값, 인덱스 위치 및 메모리 주소는 구현입니다.

정수 배열의 추상적 또는 논리적 보기는 다음과 같이 기술될 수 있습니다.

  • 정수 유형의 요소 세트를 저장합니다.
  • 위치, 즉 인덱스별로 요소를 읽습니다.
  • 인덱스별로 요소를 수정합니다.
  • 정렬을 수행합니다.

정수 배열의 구현 보기:

 a[4] = {10, 20, 30, 40} cout<< a[2] a[3] = 50