본문 바로가기
컴퓨터

[C언어] typedef

by Luyin 2012. 7. 17.

----목차----------------

1. 사용자 정의형

2. typedef의 활용

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


[ 저번시간을 통하여 const 포인터에 대해 확실히 다들알고계시겠으리라 믿고 수업을 진행하도록하겠습니다 ]

[ 저번 강좌 복습/재정리 : http://blog.naver.com/skout123/50131769455 ]




1. 사용자 정의형


C언어의 기본 자료형인 char, short, int, long, int64, float, double(unsigned 포함) 가지고는


우리가 원하는 모든 요구를 다 만족 시켜주지 못합니다.


그래서 C언어는 "에이씨 모르겠다! 아주 그냥 니들이 아예 다 만들어!" 라고 하면서 아주 좋은 물건 하나를 남겨두고 도망쳐버리죠.


그게 바로 typedef 키워드 입니다!


typedef 키워드는 우리가 원하는 대로 자료형을 만들 수 있도록, 기능을 제공해줍니다.


typedef는 지정자로 쓰이며, 이를 사용하는 법은 다음과 같습니다.




typedef로 만들 수 있는 몇 가지 예시를 소개해드리자면,



◈ typedef int skout;


typedef int *ptr;


typedef double silsu;


typedef unsigned char Hello;


typedef const short myname_is_short;


typedef enum { True, False } Bool; // 아직 배우지 않은 내용


typedef struct { int a; double b; } HeyStruct ; // 아직 배우지 않은 내용


typedef int array[30];



이 것들 말고도 더 많은 경우가 있지만, 이 정도로 소개를 마치도록 하겠습니다.


잘 보셨나요? typedef로 만들 수 없는 건 거의 없다고 보셔도 무방할 정도입니다...



typedef로 위와 같은식으로 타입을 정의해 놓으면,


다음부터는 우리가 직접 만든 타입을 언제든지 마음대로~ 선언할 수 있습니다.


보실까요?


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


위 - 예제 / 아래 - 실행 결과

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


위 예제를 통해 새로 알 수 있는 사실은 총 3가지 입니다.


하나하나 차근히 살펴보도록 하겠습니다.


1. typedef는 보통 위 부분에다가 씁니다.




왜냐하면 전역적으로 계속 타입을 쓸 수 있게 함입니다.


당연히 함수 안에다가도 typedef를 쓸 수는 있겠지만,


그 스코프 안에서 밖에 쓸 수 없게 되죠.


뭐... 만약 이런 상황이 꼭 필요한 경우라면 당연히 함수안에서 써도 됩니다.



2. typedef로 만든 타입으로 또 타입을 만들 수 있습니다.




보시면, 아까 위에서 만든 Hello와 HI 타입을 또 typedef로 써먹고 있습니다.


우리가 직접만들어준 사용자 정의형도 당연히 타입이기에, 이런 일이 가능합니다.


이 것도 유용한 문법이니 잘 기억해두세요.



3. typedef로 포인터의 기능을 하는 타입을 만들 수 있습니다.




이미 예제를 보셔서 눈치채셨겠지만, 이렇게 구두점 *을 붙여서


포인터의 기능을 하는 타입을 미리 만들어줄 수도 있습니다.


참 유용히 사용되죠~



자, 이렇게 typedef로 할 수 있는 지극히 간단한 행동들을 해보았습니다.


한번씩 실습해보시면서 익혀나가시길 추천해드립니다.


하지만 typedef를 무분별하게 쓰면 오히려 가독성만 해치게 됩니다.


딱딱 써야만 좋을 때만 쓰는게 좋으며, 되도록이면 기본 자료형으로 해결해나갈려는 습관을 들여야합니다. (저의 경험에서 나온 절실한 부탁)



자, 그렇다면 다음 장에서 typedef를 어떻게하면 좀 더 유용히 사용할 수 있을지에 대해 알아보겠습니다.


다음 장으로 넘어가시죠.





2. typedef의 활용


이번 장에서는 typedef를 사용함에 있어서 더더욱 유연히 쓸 수 있도록 도와드리겠습니다.



아까 우리가 typedef로 포인터의 기능을 내는 타입도 만들어보았듯이,


typede로 배열의 기능을 흉내내는 타입도 만들 수 있습니다.


어떻게냐? 다음 예제를 보시죠.


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


위 - 예제 / 아래 - 실행 결과

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


위 예제는 1차원 배열, 2차원 배열, 그리고 3차원 배열의 흉내를 낸 타입들을 정의해주고


이를 활용해주는 모습을 보실 수 있습니다.


잘 보셨죠?



자 이렇게, 배열의 기능도 흉내낼 수 있다는 사실을 알아보았습니다.



이런 것 말고도 typedef는 좀 더 특별히 쓰이는 경우가 있는데요.


예를들어 int형 변수가 아닌, 4바이트 정수형 변수가 필요한 상황에 쓰입니다.


int형 변수는 16비트 환경에선 2바이트로, 64비트 환경에선 8바이트로 표현합니다.


왜냐? int는 그렇게 만들어진 자료형이니깐요 ;;


이라고 까마득히 먼 저저저저저저저저번 강좌에서 말하였죠.


그렇다면 어떡할까요? 무조건 4바이트 정수형 변수가 필요할 때는 어떻게 해줘야할까요?


답은 typedef 밖에 없습니다.


참 신기하게도, 프로그래머의 컴퓨터가 32비트라고 가정하고


typedef int ABC; 이렇게 해주면


ABC는 어떤 컴퓨터에서도 4바이트로 표현됩니다.


이 것도 typedef의 기능 중 하나입니다.



실제로 위와 같은 기능이 쓰이는 경우도 있다고 하니 기억해두면 나중에 써먹을 수도 있겠죠.


자, 이렇게 오늘의 모든 내용을 살펴보았습니다.


쉽지요?



이상으로 오늘은 typedef에 대해 알아보았습니다.