개발/C++

[C++] C++ typedef

hojak99 2017. 2. 22. 19:05

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

반응형