티스토리 뷰

C언어

c++ - typedef 키워드 사용방법 및 예시

쉬엄쉬엄하자 2021. 5. 15. 15:09
728x90

c/c++ 에서 사용하는 typedef 키워드의 기본 사용법과 왜 사용해야 되는지 실질적으로 어떻게 코드로 작성하는지에 대해 정리하고 알아봅시다

 

1. 정의

typedef C C++ 프로그래밍 언어 예약어이다. 다른 자료형의 별명을 만들기 위해 사용된다.

size_t time_t처럼 종종 typedef 형의 이름을 '_t'로 끝맺는 것이 종종 권장된다.

 

이는 위키백과에 나오는 typedef의 정의입니다. 설명 그대로 기존에 c/c++에 존재하는 int, double과 같은 자료형들을 사용자가 원하는 의도에 맞게 다른 이름을 부여하고 싶을때 사용하게 됩니다.

 

예를 들어 게임개발에서 물리 연산을 위해 삼각함수를 필수적으로 쓰게 되는데 삼각함수 사용을 위해 라디안값을 사용합니다.  그렇다면 typedef double radian_t 와 같이 실질적으로는 double형이지만 프로그램에서 radian_t라는 이름으로 대신해서 사용하면 이 자료형으로 선언된 변수들의 역할을 더 분명하게 할 수 있게되는 것이죠.

 

두 점 사이의 각도를 구하는 GetAngle()이라는 함수를 정의하였다고 했을때 단순히double GetAngle(...) 로 사용하는 함수 보다 radian_t라는 타입 별칭을 만들고 radian_t GetAngle(...)로 함수를 정의하는것이 GetAngle 함수가 radian값을 반환 할 것이라는 의미를 더 명확하게 할 수 있겠죠.

 

2.사용방법

위에서 간단하게 사용 예시를 들었지만 더 다양한 사용 방법에 대해 알아보겠습니다.

기본 사용방법은

typedef 자료형 자료형별칭

과 같이 사용하게 됩니다. 그래서 각각 다양한 자료형의 별칭을 만드는 예시 코드를 보겠습니다.

typedef double radian
typedef char* enemy_name //문자열 자료형인 enemy_name별칭을 만든다
typedef pair<int, int> POINT //x,y좌표를 갖는 int형 순서쌍 POINT별칭을 만든다
typedef struct tagEnemy{
	int hp,
    int meleeDmg;
    int speed;
    POINT position;
    radian angle;
}ENEMY, *LPENEMY; //tagEnemy라는 구조체 자료형을 만든다, ENEMY라는 이름으로도 사용.

 

게임에서 사용하는 예시로 이름을 지어봤습니다. 각 오브젝트가 가지게될 각도값을 위해 double형의 별칭 radian을 만들었고, 각 오브젝트가 가지는 이름을 위해 문자열 enemy_name, 오브젝트가 가질 좌표값을 위한 별칭 POINT를 만들었습니다. 그리고 위에서 만든 세 자료형을 구조체안에서 사용하여 적군 역할을 할 구조체를 만들었습니다.

 

여기서 구조체 typedef를 사용하는 경우 tag를 붙여 정의하는것이 관습입니다.

그리고 구조체를 정의하고 뒤에 두개의 별칭 ENEMY, *LPENEMY를 사용하였는데 실질적으로 코드에서 구조체 자료형을 사용할 때는 tag로 시작하는 이름이 아닌 뒤에서 만든 별칭을 사용하는것을 권장합니다.

 

또 눈에 띄는것은 *LPENEMY입니다. 별칭을 만들때 이와같이 *을 붙이는 경우에는 포인터 변수를 만드는것입니다.

그래서 이후에 적군 포인터 변수를 만들때는 LPENEMY _monster; 와 같이 변수를 선언하면 tagEnemy구조체의 포인터 변수를 선언한것과 동일합니다.

LPENEMY _monster;

ENEMY* _monster;

즉, 위 두 줄의 코드는 의미가 동일한 코드입니다.

 

3.마무리

c/c++ 에서 사용하는 typedef 키워드에 대한 정의와 사용예시에 대해 알아보았습니다. 한마디로 정리하자면 typedef는 자료형은 동일하지만 가독성을 위해 자료형이름을 따로 정하고 싶을때 사용한다 라고 할 수 있겠습니다.

다만 처음에 언급한것처럼 구조체가 아닌이상 _t를 붙이는것이 관습이고 무분별하게 사용했다가는 오히려 다른사람이 코드를 볼 때 가독성이 떨어질 수 있습니다.

 

본인 입장에서는 편의를 위해 별칭을 세분화해서 나누었지만 다른사람 입장에서는 생전 처음보는 자료형으로 다가올 수 있기 때문이죠. 

댓글