typedef 키워드
typedef 는 새로운 타입을 만드는 것이 아니라 타입의 새로운 별칭을 정의하는 키워드 이다.
typedef 는 다음과 같이 사용한다.
typedef int TypedefInt;
TypedefInt money;
moeny = 100;
typedef 를 이용한 예제를 살펴보도록 하자.
#include <iostream>
class TypedefEx
{
public:
typedef int Type1;
};
int main()
{
TypedefEx::Type1 money;
money = 10;
TypedefEx::Type1 ex;
ex = 15;
std::cout << money << std::endl; // 출력 : 10
std::cout << ex << std::endl; // 출력 : 15
return 0;
}
물론 typedef 는 public, private, protected
에서 사용할 수 있다.
그렇다면 이 typedef 는 템플릿에서 어떻게 사용할 수 있을까?? 템플릿에서 사용하면 매우 효과적으로 사용할 수 있다.
다음 예제를 살펴보자.
template <typename T>
class TypedefClass
{
public:
typedef T Type1;
};
int main()
{
TypedefClass<int> aClass;
TypedefClass<int>::Type1 a;
TypedefClass<double> bClass;
TypedefClass<double>::Type1 b;
return 0;
}
typedef 를 사용하는 이유는 다음과 같다.
- 입력이 쉽다.
- 읽기가 편하다.
- 의사 전달이 가능하다.
- 호환성을 높여준다.
- 유연성이 생긴다.
- 특성화를 가능하게 한다.
이 중 "의사 전달이 가능하다." 라는 것에 대한 예를 들어보겠다.
int x;
int y;
x += y;
보다는 다음과 같은 코드가 더 이해하기 쉽고 유지보수가 쉬울 것이다.
typedef int Money;
typedef int Pen;
Money x;
Pen y;
x += y;
또, 이 중 "유연성이 생긴다." 라는 것에 대한 예를 들어보겠다.
void a(vector<Customer>& custs)
{
vector<Customer>::iterator = cuts.begin();
}
이 코드에서 vector를 deque로 변경할 때에는 위의 코드에서 [vector]라는 코드가 나올 때마다 변경을 해주어야 한다. 하지만 다음 코드를 보자
typedef vector<Customer> Customers;
typedef Customers::iterator CustIter;
~~
void f(Customers& cuts)
{
CustIter i = cuts.begin();
}
다음과 같은 코드로 한다면 typedef 를 deque로 변경하면 된다. 물론, 이런 방법은 list::iterator는 임의 접근 반복자가 아니라서 문제가 될 수도 있다.
출처 및 도움 :: wikidocs -- C++ Template Note
반응형