3. Structures and Unions
1) Structures
1> 설명
- type이 다른 data를 그룹화
- 각 항목은 type과 name으로 구분된다.
- 다른 언어에서는 'record'라고 부르기도 한다.
- C언어에서는 'struct' (구조체)로 표기한다.
2> 예시 1 (기본)
// 1. 구조체 정의 및 선언
struct {
char name[10];
int age;
float salary;
} person;
// 2. 멤버 접근
strcpy(person.name,"james");
person.age = 10;
person.salary = 35000
- 변수(name) : person
- 3개의 field 존재
3> 예시 2 (typedef)
// 1. 구조체 정의
typedef struct humanBeing
{
char name[10];
int age;
float salary;
};
// 2. 구조체 선언
struct humanBeing person1, person2;
// 3. 멤버 접근
4> 예시 3 (typedef, 별칭 이용)
// 1. 구조체 정의
typedef struct
{
char name[10];
int age;
float salary;
}humanBeing;
// 2. 구조체 선언
humanBeing person1, person2;
// 3. 멤버 접근
5> 구조체 간의 동등성 검사, 대입
- 'person1 == person2'와 'person1 = person2'를 이용
- 과거 동등성 검사 및 대입
6> 구조체를 다른 구조체 멤버로 사용
2) Union
(거의 사용하지 않음)
0> 구조체와 유사 (정의, 선언, 멤버 접근 모두 구조체와 유사)
1> 특징
- 한 union의 field들은 그들의 메모리 공간을 공용
- 한 번에 한 field만 활성화되어 사용가능하다.
2> 예시
- 여성의 경우 출산 아동 수를 파악하고
- 남성의 경우 턱수염 유무를 파악하는데
- 아동 수와 턱수염 유무는 동시에 사용되지 않으니 union을 사용하면 메모리를 아낄 수 있다.
3) Internal implementation of structures
1> value는 구조체 정의에 따라 오름차순으로 메모리 위치에 저장된다.
- 실제로는 연속적인 구성 요소가 메모리에 적절히 맞추기 위해 구조 내 빈 공간을 두거나 채워넣기(padding)를 할 수도 있다.
- struct나 union 타입의 객채 크기는 필수적인 채워넣기를 포함해서 가장 큰 구성 요소의 표현을 위해 필요한 저장 공간의 크기가 된다.
- struct는 같은 유형의 메모리 경계에서 시작하고 끝나야 한다.
(예를 들어 짝수 바이트이거나 4, 8, 16 등의 배수가 되는 메모리 경계이어야 한다.)
4) Self Referential Structures
1> 정의 : 구조체 멤버 중에 자기 자신(구조체)를 가리키는 포인터가 1개 이상 존재하는 구조체
2> 명시적으로 메모리를 할당받고 해제하기 위해 dynamic storage management routines이 필요
'자료구조' 카테고리의 다른 글
2-4강 - Sparse Matrix (희소 행렬) (0) | 2020.04.10 |
---|---|
2-3강 - Polynomials (다항식) (0) | 2020.04.10 |
2-1강 - ADT array, 동적 할당 (0) | 2020.04.09 |
1-6강 - Performance measurement (시간 측정) (0) | 2020.03.31 |
1-5강 - Performance analysis (2) 점근 표기법 (0) | 2020.03.31 |