본문 바로가기

자료구조

2-2강 - 구조체와 공용체

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이 필요