형 재정의 ( typedef )

어떠한 데이터형으로 int를 가정해서 프로그래밍을 했다고 할때, 그 컨셉과 관련해 수없이 많은 int 타입의 변수를 도입하게 된다. 그런데 프로그래밍이 한참 진행되던 도중, int 가 아니라 long 으로 수정해고자 할 때, 일일이 찾아다니며 바꿔야하는 번거로움이 생긴다.

사실 위와같이 int 와 long 의 선택은 단지 컴퓨터적인 개념에 의해서 나눠졌을뿐, 컨셉적으로는 integer 로 동일하다. 이는 프로그램을 구상하는 관점에서도 int 를 쓸지 long 을 쓸지는 본질적인 문제가 아니다.

typedef 를 이용하면, 좀 더 컨셉적인 부분에 집중할 수 있다. typedef 는 #define 과 마찬가지로, 이식성과 수정효율성 역시 높여준다.


구문은 다음과 같다.

typedef type identifier;


#define 과는 달리, 문장이다. ( 따라서 ; 를 찍어준다.)
#define 과는 순서가 반대이다. typedef 는 일종의 data type renaming 으로 볼 수 있다.


#define 는   define A as B

typedef 는 rename A as B


따라서, 코드내에서는 #define 의 경우, B를 새로 정의한 A를 사용하고, typedef 는 A 를 새로 이름붙인 B를 사용한다.

type 은 단순히 int 뿐만 아니라 이미 어떠한 정의된 타입이 될 수 있으며, 한정자로 쓰이는 각종 키워드나 tag 도 포함하고, 하부구조를 갖는경우 그것도 허용한다.


--------------------------------------------

예.
typedef int element;
...

element x,y;              // 변수 x, y 를 int 형으로 선언
...


나중에 typedef int element;  에서 int 만 double 로 바꾸면, 자동으로 x, y의 선언은 double형이 된다.


----------------------------------------------------------------------------------------------

포인터형의 재정의

앞의 포인터 내용에서, 어떤 type의 포인터형을 type* 형으로 부른다고 했었다.  이것을 이용하면, 포인터 형도 typedef 를 사용해서 * 없이 선언할 수 있다.

예.
typedef int* intPtr ;         // int 형 포인터 형의 재정의
intPtr p, q ;                   // int형 포인터변수 p , q 의 선언

-------------------------

마찬가지로, 어떠한 한정자나 tag를 매번 붙이는 것이 귀찮을 경우에도 typedef 는 유용하다.