ADT & Composite Data Type

2024. 3. 15. 00:14프로그래밍/자료구조

Abstract Data Type (ADT)

Data Structure

추상적 데이터 유형에서 복합 데이터 멤버를 구현

  • 구성 요소
  • 요소의 배열은 각 요소의 액세스 방법에 영향을 미친다
  • 요소의 배열과 엑세스 방법을 모두 캡슐화할 수 있다

TImeline

ADT → implementation(구현) → Application

ADT Operations

  1. Constructor
  2. Transformer
  3. Observer
  4. Iterator (컨테이너 객체)

Composite Data Type

The Forms of Composite Data type

Unstructured : Components are not organized with respect to one another

ex) classe and structs

Structured: The organization determines method used to access individual data components.

ex) arrays

 

 

 

 

 

 

Q1. Composite 데이터와 Simple, Address 데이터 타입의 차이점은 무엇인가?

 

Simple Data Types: 이는 int, float, char 등과 같은 기본 데이터 유형으로, 단일 값만 저장합니다.

Composite Data Types: 이는 여러 개의 단순하거나 다른 복합 데이터 유형으로 구성된 데이터 유형입니다. 예시로는 배열, 구조체, 클래스, 공용체 등이 있으며, 이들은 여러 값을 저장할 수 있으며 더 복잡한 데이터 구조를 생성하는 데 사용됩니다.

Address: C++에서 모든 변수는 메모리 주소를 갖습니다. 이는 변수의 값이 저장된 메모리 위치를 나타냅니다. 변수의 주소는 주소 연산자(&)를 사용하여 얻을 수 있습니다.

 
 
Q2. structured과 unstructured 데이터 타입의 차이는 무엇인가?
 
 
 
structured Data
#include <iostream>
#include <array>

int main() {
    // 구조화된 데이터: 배열 (Structured Data: Array)
    std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 배열은 요소가 순차적으로 저장됩니다.

    // 배열 요소에 접근하여 출력
    std::cout << "Array elements: ";
    for (int i = 0; i < arr.size(); ++i) {
        std::cout << arr[i] << " "; // 배열의 각 요소에 접근하여 출력
    }
    std::cout << std::endl;

    return 0;
}
Unstructured Data
#include <iostream>
#include <vector>

struct Point {
    int x;
    int y;
};

int main() {
    // 비구조화된 데이터: 구조체 (Unstructured Data: Struct)
    Point p1 = {10, 20}; // 구조체 멤버인 x와 y가 각각 독립적인 메모리 위치에 저장됩니다.

    // 구조체 멤버에 접근하여 출력
    std::cout << "Point coordinates: x = " << p1.x << ", y = " << p1.y << std::endl;

    return 0;
}
 

 

Q3. union과 struct의 차이점은?

 

C++에서, union과 struct은 모두 여러 가지 타입의 멤버를 포함할 수 있는 복합 데이터 유형이지만, 멤버의 메모리 할당 방식에서 큰 차이가 있습니다.

Struct (구조체):

  • 구조체 내 각 멤버는 독립적인 메모리 위치를 차지합니다.
  • 구조체의 크기는 모든 멤버의 크기의 합과 컴파일러가 정렬을 위해 추가하는 패딩의 합으로 결정됩니다.
  • 멤버는 각각의 이름을 사용하여 액세스됩니다.
struct Point {
    int x;
    int y;
};

Point p;
p.x = 10;
p.y = 20;

이 예시에서 Point는 두 개의 int 타입 멤버 x와 y를 가진 구조체입니다. Point 타입의 객체가 생성될 때, x와 y에 대한 메모리가 별도로 할당됩니다.

 

Union (공용체):

  • 공용체 내 모든 멤버는 동일한 메모리 위치를 공유합니다. 즉, 공용체의 한 멤버만이 한 번에 값을 가질 수 있습니다.
  • 공용체의 크기는 가장 큰 멤버의 크기와 같습니다.
  • 멤버는 구조체와 마찬가지로 각각의 이름을 사용하여 액세스됩니다.

예시:

union Data {
    int i;
    float f;
    char c;
};

Data d;
d.i = 10;   // 유효함
d.f = 3.14; // 유효하지만, d.i의 값을 덮어씁니다.

이 예시에서 Data는 세 개의 멤버 i, f, c를 가진 공용체입니다. 그러나 한 번에 하나의 멤버만이 활성화될 수 있습니다. 한 멤버에 값을 할당하면 다른 멤버의 값을 덮어쓸 수 있습니다.

 

Q4. unstructed 데이터 타입인 struct와 class의 차이점은 무엇인가?

 

  1. 접근 제어(Visibility Control):
    • struct의 멤버들은 기본적으로 public으로 간주됩니다. 즉, 외부에서 자유롭게 접근할 수 있습니다.
    • class의 멤버들은 기본적으로 private으로 간주됩니다. 따라서 외부에서 직접 접근할 수 없고, 멤버 함수를 통해 접근해야 합니다.
  2. 상속(Inheritance):
    • struct는 기본적으로 public 상속을 사용합니다. 이는 기초 클래스의 public 및 protected 멤버들이 파생 클래스에서 동일한 접근 제어 수준으로 상속된다는 것을 의미합니다.
    • class는 기본적으로 private 상속을 사용합니다. 이는 기초 클래스의 public 및 protected 멤버들이 파생 클래스에서 private 멤버로 상속된다는 것을 의미합니다.
  3. 구조화된 기본 타입 vs 객체 타입:
    • struct는 일반적으로 데이터의 구조화된 형식을 나타내는 데 사용됩니다. 이는 주로 데이터의 표현을 위한 목적으로 사용됩니다.
    • class는 객체를 나타내는 데 사용됩니다. 이는 데이터와 해당 데이터를 조작하는 함수를 함께 캡슐화하는 데 사용됩니다.
  4. Legacy Compatibility:
    • C 언어와의 호환성을 유지하기 위해 struct는 C에서 사용되는 방식과 유사한 방식으로 동작합니다. C++에서는 class가 새로운 객체 지향 프로그래밍 기능을 제공하는 데 주로 사용됩니다.

'프로그래밍 > 자료구조' 카테고리의 다른 글

Deque = Vector + List  (0) 2024.03.15
Array, List, Vector  (0) 2024.03.10