type_alias — 타입 별칭

type_alias — 타입 별칭 (Type alias)

**타입 별칭(type alias)**은 기존 타입에 새로운 이름을 부여하는 기능이에요. C++11의 using 선언으로 만든다.

길거나 복잡한 타입을 짧은 이름으로 부르고 싶을 때 사용해요. 특히 std::vector<std::pair<int, std::string>> 같은 복잡한 타입을 별칭으로 줄이면 코드가 읽기 좋아져요. typedef와 비슷하지만, 타입 별칭은 템플릿에도 쓸 수 있어요 (별칭 템플릿).

출처: cppreference

본문

타입 별칭은 기존 타입을 가리키는 이름이에요. using 키워드로 선언해요.

문법 (Syntax)

using identifier = type-id ;
  • identifier — 새 별칭 이름
  • type-id — 별칭이 가리키는 타입

타입 별칭은 새 타입이 아님

타입 별칭은 새 타입을 만드는 게 아니라 기존 타입의 동의어예요. 별칭과 원 타입은 완전히 같은 타입으로 취급돼요.

using IntList = std::vector<int>;
IntList a{1, 2, 3};
std::vector<int> b = a;   // 같은 타입

typedef와의 비교

typedef std::map<std::string, int> StringToInt;  // 옛 방식
using StringToInt2 = std::map<std::string, int>; // 새 방식

둘 다 같은 타입 별칭이지만, using이 더 읽기 쉽고 일관적이에요.

별칭 템플릿 (Alias template)

별칭은 템플릿일 수도 있어요.

template <typename T>
using Vec = std::vector<T>;

Vec<int> v;  // std::vector<int>

typedef로는 이게 불가능해요.

멤버 타입 별칭

클래스 안에서도 타입 별칭을 선언할 수 있어요.

class Widget {
public:
    using ID = std::uint64_t;
};
Widget::ID id = 5;

노트 (Notes)

  • 타입 별칭은 새 타입을 만들지 않으므로, 같은 타입이면 오버로드나 형식 규칙에서 같게 처리돼요.
  • 별칭은 템플릿 인자에도 쓸 수 있게 일반화됐어요.
  • decltype과 결합해 using type = decltype(expr); 같은 표현도 가능해요.

더 알아보기 (Learn more)

cppreference