[C언어] #004 타입정의 (typedef)
COM2008. 1. 13. 16:11 |어떠한 데이터형으로 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 는 유용하다.