1. 정의
 typedef 기존데이터형 새이름;
 
 ex) typedef int NUM;
       typedef char STR;
       typedef struct STUDENT;

typedef는 매번 앞에 struct나 union, enum 키워드를 써야하는 구조체나 공용체, 열거체를 정의할 때 유용하다. 'struct 태그명'을 typedef로 이름을 지정하면 사용하기가 편리하다.

  typedef struct point{
   int x;
   int y;
 }POINT; // struct point를 POINT라는 이름으로 정의

위와 같이 struct point를 POINT라고 정의하면 POINT를 새로운 데이터형으로 사용할 수 있다.

 POINT p1, p2; // 이것은 struct point p1, p2;와 같은 의미이다.

수학에서 치환과 비슷한 개념이라고 생각하면 된다.
위와 같이 구조체를 정의하면서 typedef를 정의할 수도 있고, 구조체를 정의한 후에 할 수도 있다.

  struct point{
   int x;
   int y;
 };
 typedef struct point POINT;

typedef로 정의된 데이터형도 원형 그대로 사용이 가능하다.

 struct point p1;
 POINT p2;

<예제>
 #include <stdio.h>
 struct point{
  int x;
  int y;
 };
 typedef struct point POINT;

 int main(void){
   struct point p1 = {10, 20};
   POINT p2;
   p2 = p1;
   printf("p2의 좌표 : %d, %d\n', p2.x, p2.y);
   return 0;
}

2. typedef 사용 목적
 typedef를 사용하면 이식성(portability)과 가독성(readability)에 큰 도움이 된다.
  struct point{
   int x;
   int y;
 }; // 1번

  struct point{
   double x;
   double y;
 }; // 2번

 만약 point 구조체가 1번과 같을 때 변수는 int형이다. 그런데 만약 실수를 사용하는 경우가 생긴다면 2번과 같이 구조체를 새로 정의해야 한다. point 구조체를 사용하는 함수가 존재하거나 다른 곳에서 자주 사용되고 있다면 일일이 모두 수정해야만 한다. 하지만 typedef를 사용하면 간단하다.

 typedef int nType;
 struct point{
   nType x;
   nType y;
 }; // 1번

 typedef double nType;
 struct point{
   nType x;
   nType y;
 }; // 2번
 typedef 정의 부분에서 데이터형만 변경함으로써 간단하게 수정이 가능하다.

 가독성 면에선 다음과 같은 경우를 가정해보자. unsigned char는 문자를 저장할 수도 있고 1바이트 정수형을 저장할 수도 있다. 이 경우 어떤 용도인지 명확히 구분할 때 typedef를 사용할 수 있다.
 typedef unsigned char oneByte;
 oneByte data;

'프로그래밍 > C' 카테고리의 다른 글

assert 매크로 사용법  (0) 2014.01.27
이중배열과 포인터 문제 하나  (0) 2013.12.01
malloc & free 기본 사용법  (0) 2013.07.23
공용체와 열거체  (0) 2011.01.19
구조체  (0) 2010.10.23
배열과 포인터의 관계  (0) 2010.10.09
포인터 (Pointer)  (0) 2010.10.09

+ Recent posts