C++에서 using 키워드는 C++11에서 도입된 타입 별칭(type alias) 정의 방식입니다.
기존의 typedef와 동일한 역할을 하지만,
✅ 가독성이 뛰어나고
✅ 템플릿과 함께 사용할 수 있어 더 강력한 기능을 제공합니다.
이 문서에서는 using의 필요성, 장점, 사용법을 정리하고,
예제 코드와 함께 자세히 분석하겠습니다.
typedef 방식typedef vector<int>::iterator VecIt;
✅ typedef를 이용한 별칭 정의
vector<int>::iterator를 VecIt이라는 별칭으로 정의.typedef는 기존 C 스타일의 타입 정의 방식.typedef __int64 id;
✅ 기존 typedef 방식
id라는 별칭을 __int64 타입에 부여.id를 int, unsigned int 등으로 쉽게 변경 가능.using 방식using id2 = int;
✅ using을 이용한 타입 별칭
id2를 int 타입의 별칭으로 정의.typedef보다 직관적이고 읽기 쉬움.using MyFunc = void(*)();
✅ 함수 포인터 별칭
MyFunc를 void(*)() 타입의 별칭으로 정의.typedef와 비교하면 더 짧고 직관적인 문법을 제공.typedef 방식 (템플릿 불가능)template<typename T>
typedef vector<T> List2; // ❌ 오류 발생
typedef는 템플릿을 직접 지원하지 않음. typedef (우회 방식)template<typename T>
struct List2 {
typedef list<T> type;
};
✅ 템플릿과 함께 typedef를 사용하려면 구조체가 필요함
List2<int>::type으로 사용해야 하므로 코드가 길어짐.usingtemplate<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;
}
✅ 프로그램 종료.
using이 필요한 이유typedef의 한계typedef void (*MyFunc)();
typedef를 사용하면 함수 포인터 정의가 복잡함.template<typename T>
typedef vector<T> List; // ❌ 불가능
typedef는 템플릿과 함께 사용 불가.using의 장점using MyFunc = void(*)();
typedef보다 직관적이며, 함수 포인터를 쉽게 이해 가능.template<typename T>
using List = vector<T>;
using을 사용하면 템플릿 타입 별칭을 쉽게 정의 가능.