전체 코드


🚀 1. 개요

C++에서 using 키워드는 C++11에서 도입된 타입 별칭(type alias) 정의 방식입니다.
기존의 typedef와 동일한 역할을 하지만,
가독성이 뛰어나고
템플릿과 함께 사용할 수 있어 더 강력한 기능을 제공합니다.

이 문서에서는 using필요성, 장점, 사용법을 정리하고,
예제 코드와 함께 자세히 분석하겠습니다.


📂 2. 코드 분석

🔹 기존 typedef 방식

typedef vector<int>::iterator VecIt;

typedef를 이용한 별칭 정의

  • vector<int>::iteratorVecIt이라는 별칭으로 정의.
  • typedef는 기존 C 스타일의 타입 정의 방식.
typedef __int64 id;

기존 typedef 방식

  • id라는 별칭을 __int64 타입에 부여.
  • 이후 idint, unsigned int 등으로 쉽게 변경 가능.

🎯 using 방식

using id2 = int;

using을 이용한 타입 별칭

  • id2int 타입의 별칭으로 정의.
  • typedef보다 직관적이고 읽기 쉬움.
using MyFunc = void(*)();

함수 포인터 별칭

  • MyFuncvoid(*)() 타입의 별칭으로 정의.
  • typedef와 비교하면 더 짧고 직관적인 문법을 제공.

🎯 템플릿과 타입 별칭

기존 typedef 방식 (템플릿 불가능)

template<typename T>
typedef vector<T> List2; // ❌ 오류 발생
  • typedef는 템플릿을 직접 지원하지 않음.
  • 대신 구조체를 이용한 우회 방법을 사용해야 함.

템플릿을 활용한 typedef (우회 방식)

template<typename T>
struct List2 {
    typedef list<T> type;
};

템플릿과 함께 typedef를 사용하려면 구조체가 필요함

  • List2<int>::type으로 사용해야 하므로 코드가 길어짐.

템플릿을 활용한 using

template<typename T>
using List = list<T>;

using을 이용한 템플릿 타입 별칭

  • 기존 방식보다 훨씬 간결하고 직관적임.

🎯 main() 함수 분석

🔹 타입 별칭 사용 예제

int main()
{
    id playerId = 0;

typedef를 이용한 id 사용

  • playerId__int64 타입의 변수.

    List<int> li;
    li.push_back(1);
    li.push_back(2);
    li.push_back(3);

using을 활용한 템플릿 타입 별칭

  • List<int>std::list<int>의 별칭.

    List2<int>::type li2;

typedef 기반 템플릿 별칭 사용

  • List2<int>::type을 사용하여 std::list<int>를 생성.
  • using 방식보다 코드가 길고 가독성이 떨어짐.

    return 0;
}

✅ 프로그램 종료.


📌 3. using이 필요한 이유

🔹 1) typedef의 한계

가독성이 떨어짐

typedef void (*MyFunc)();
  • typedef를 사용하면 함수 포인터 정의가 복잡함.

템플릿을 지원하지 않음

template<typename T>
typedef vector<T> List; // ❌ 불가능
  • typedef템플릿과 함께 사용 불가.

🔹 2) using의 장점

가독성이 뛰어남

using MyFunc = void(*)();
  • typedef보다 직관적이며, 함수 포인터를 쉽게 이해 가능.

템플릿과 함께 사용 가능

template<typename T>
using List = vector<T>;
  • using을 사용하면 템플릿 타입 별칭을 쉽게 정의 가능.

profile
李家네_공부방

0개의 댓글