티스토리 뷰

구조체 선언과 구조체형 변수 정의

struct 구조체의 코드를 보다보면 typedef struct 라고 쓴걸 볼 수 있는데,어떤 의미인지 알아 보도록 하자.

struct의 정의와 선언 그리고 typedef

typedef 이야기를 하기에 앞서 struct 구조체에 대해서 좀 짚고 넘어가는게 좋을듯 하다.우선 struct 는 아시다시피 구조에 대해 정의하는 타입이다.가령 슈퍼맨의 구조체를 선언하려면 다음과 같이 하면 된다.

struct SuperMan {
	int power;
	int age;
};

여기까지가 구조체가 어떻게 구성되는지 컴파일러에게 알려준것이고,실제로 메모리를 갖고있는 구조체 변수를 선언하려면 다음과 같이 한다.

struct SuperMan ClarkKent;

자 여기까지 하면 우리의 슈퍼맨이 실체화 된것이다. ^^또는 슈퍼맨 구조 속성을 바로 변수 선언과 동시에 지정 할 수도 있다.

struct SuperMan {
	int power;
	int age;
}ClarkKent;

이처럼 구조체 선언은 새로운 데이터 유형을 만든다는 뜻이고구조체 변수 정의는 구조체 타입의 새로운 메모리 공간을 할당한다는 뜻이다.

typedef 기본이해

typedef 은 원하는 데이터 유형에 다른 별명을 지어주는걸 말하는데가령 unsigned short int 란 데이터 타입이 있는데 이걸 매번 적어 주려니귀찮기도 하고 오타가 날수도 있고 그래서 다른 별명 UINT16 을 지어주면얼마나 편리하겠는가? 다음과 같이 쓴다.

typedef unsigned short int UINT16;

typedef struct

이제 마지막으로 typedef struct에 대해 알아보자.typdef은 typedef + [타입] + [별명] 이런식으로 쓰는데아래 슈퍼맨 구조체 typedef을 나누어서 생각하면

typedef struct SuperMan {
	int power;
	int age;
} sman_t;

별명을 지어주고자 하는 타입 부분에는 struct { ... } 이 되겠고마지막의sman_t는별명이 된다.즉 SuperMan 구조체 선언을 sman_t란 별명으로 부르겠다는 뜻이다.그럼 이제부터 슈퍼맨 구조체 변수 선언은 sman_t ClarkKent; 라고 쓰면 된다.이렇게 typedef struct를 쓰는 이유는 struct SuperMan ClarkKent; 라고 쓰는 것 보다좀더 쓰기에 간편하기 때문에 그렇다. 매번 struct 쓰는것도 귀찮으니 말이다.

정리

struct와 typedef struct의 차이점은 구조체 변수 정의시에 좀더 간편하게 사용하기 위함이다.