2024. 3. 15. 00:14ㆍ프로그래밍/자료구조
Abstract Data Type (ADT)
Data Structure
추상적 데이터 유형에서 복합 데이터 멤버를 구현
- 구성 요소
- 요소의 배열은 각 요소의 액세스 방법에 영향을 미친다
- 요소의 배열과 엑세스 방법을 모두 캡슐화할 수 있다
TImeline
ADT → implementation(구현) → Application
ADT Operations
- Constructor
- Transformer
- Observer
- 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 데이터 타입의 차이는 무엇인가?
#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;
}
#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의 차이점은 무엇인가?
- 접근 제어(Visibility Control):
- struct의 멤버들은 기본적으로 public으로 간주됩니다. 즉, 외부에서 자유롭게 접근할 수 있습니다.
- class의 멤버들은 기본적으로 private으로 간주됩니다. 따라서 외부에서 직접 접근할 수 없고, 멤버 함수를 통해 접근해야 합니다.
- 상속(Inheritance):
- struct는 기본적으로 public 상속을 사용합니다. 이는 기초 클래스의 public 및 protected 멤버들이 파생 클래스에서 동일한 접근 제어 수준으로 상속된다는 것을 의미합니다.
- class는 기본적으로 private 상속을 사용합니다. 이는 기초 클래스의 public 및 protected 멤버들이 파생 클래스에서 private 멤버로 상속된다는 것을 의미합니다.
- 구조화된 기본 타입 vs 객체 타입:
- struct는 일반적으로 데이터의 구조화된 형식을 나타내는 데 사용됩니다. 이는 주로 데이터의 표현을 위한 목적으로 사용됩니다.
- class는 객체를 나타내는 데 사용됩니다. 이는 데이터와 해당 데이터를 조작하는 함수를 함께 캡슐화하는 데 사용됩니다.
- Legacy Compatibility:
- C 언어와의 호환성을 유지하기 위해 struct는 C에서 사용되는 방식과 유사한 방식으로 동작합니다. C++에서는 class가 새로운 객체 지향 프로그래밍 기능을 제공하는 데 주로 사용됩니다.
'프로그래밍 > 자료구조' 카테고리의 다른 글
Deque = Vector + List (0) | 2024.03.15 |
---|---|
Array, List, Vector (0) | 2024.03.10 |