1. 타입 별칭이란?
- 다른 타입과 동의어인 이름 -> 복잡한 정의를 더 간단하게 바꿔줌.
자료형을 다른 이름으로 재정의 한다고 생각하면 된다.
* 전통적인 typedef 별칭 선언
typedef double wages; // wages는 double과 동일어.
typedef wages base, *p // base는 double, p는 double*이다.
위에 코드 예시를 보면 첫번쨰 줄에서는 동의어를 선언,
아래는 위에 만든 동의어를 이용해서 다시한번 동의어를 만들며
포인터를 만드는 방식으로 응용을 한 것이다.
즉, typedef로 동의어를 선언할 때 typedef가 맨 앞에,
그 뒤에 타입(int, double, char등등..) 마지막으로 동의어 이름을 지정하면 된다.
어떻게 보면 typedef 키워드는 선언에서 바탕타입의 일부분처럼 보일 수도 있지만,
typedef를 포함한 선언은 변수가 아니라 타입 별칭이다.
2. using 별칭 선언
using SI = Sales_item; // SI는 클래스인 Sales_item과 동의어이다.
using num = int; // num은 기본타입인 int와 같은 동의어이다.
- using을 사용한 별칭 선언은 using 키워드로 시작하고서 이후 이름과 '='가 온다.
wages hourly, weekly; //double hourly, weekly;와 같다.
SI item; //Sales_item item;과 같다.
보다시피 using과 typedef모두 타입별칭을 만들어 사용할 수 있지만,
여기에는 두 키워드의 차이점이 약간씩 존재한다.
차이점 정보 출처 :
https://moony211.medium.com/c-의-타입-별칭-alias-이해하기-typedef와-using의-차이점-334f1722be95
둘의 주요 차이점 중 하나가 바로 using은 템플릿화된 타입별칭을 만들 수 있지만,
typedef는 그러지 못한다는게 가장 큰 차이점 중 하나이다.
즉, 클래스의 타입 별칭이 만들어졌으면 무조건 using을 사용해야 한다는 것이다.
두번쨰 차이점은 using이 typedef보다 조금 더 간결하다는 것.
특히 함수 포인터를 선언하는데 더 간결하게 문장을 만들어 사용할 수 있다는 것이다.
//typedef의 경우.
typedef int (*MyFuncPtr)(int, int);
MyFuncPtr func = someFunction;
- typedef는 타입 별칭 선언 따로 정의따로 해야한다.
//using의 경우.
using MyFuncPtr = int (*)(int, int);
- using의 경우는 타입 별칭을 선언함과 동시에 정의로 간결하게 동일한 결과를 얻을 수 있다.
뭐 그렇다고 해서 typedef가 잘 안쓰이는 것은 아니고,
호환성이나 대중성이 워낙 좋은탓에 using보다 더 자주 볼 수 있는 것이 typedef가 되겠다.
3. 포인터 constsr 타입 별칭
typedef char *pstring;
const pstring cstr = 0; //cstr은 char에 대한 const 포인터이다.(const *char cstr)
const pstring *ps; //ps는 char에 대한 상수포인터의 포인터이다.(const*char *ps;)
typedef에 포인터를 사용하여 이런식으로 사용도 가능하다.
주로 포인터를 typedef에다 쓰는 것은 함수포인터를 만들때 사용한다.
코드 예시 출처 : https://elecs.tistory.com/97 (너무 잘 정리 되어있습니다.)
#include<iostream>
using namespace std;
typedef void (*ptrfunc)(int); //int는 인자 값 전달 목적.
void testprint(int n)
{
cout << "Number : " << n << endl;
}
int main(){
testprint(100);
ptrfunc elecs;
elecs = testprint;
elecs(77);
return 0;
}
이렇게 빈번하게 반복되어 사용되는 소스코드가 복잡하고 길면
typedef를 사용하여 간결하게 사용이 가능하다.
ptrfunc elecs;
elecs = testprint;
elecs(77);
이 부분에서 보다시피 ptrfunc으로 정의된 typedef문의 함수포인터를 elecs이라는
이름의 함수포인터로 하나 만들었다고 보면 된다.
(함수포인터인 변수 하나가 생겼다고 보면 됨.)
'Game DevTip > C++' 카테고리의 다른 글
6. C++ string 타입에 대해서 (0) | 2024.12.05 |
---|---|
5. C++ auto & decltype에 대해서. (0) | 2024.12.05 |
3. C++ constexpr에 대해서 (1) | 2024.12.05 |
2. C++ const에 대하여 (0) | 2024.12.05 |
1. C++ 변수사용 Tip에 대해서. (0) | 2024.12.05 |
댓글