chatgpt의 도움을 받은 글입니다.

강의를 듣던 중 강사가 아래와 같은 코드를 사용했는데, typedef를 사용하지 않고 using을 사용하는 이유가 궁금해서 알아보았다.

template<typename T>
using Atomic = std::atomic<T>;
using Mutex = std::mutex;
using CondVar = std::condition_variable;
using UniqueLock = std::unique_lock<std::mutex>;
using LockGuard = std::lock_guard<std::mutex>;

기본 개념

typedef는 기존 C 스타일의 타입 별칭 방법으로 C와 C++ 모두에서 사용 가능하다.

using은 c++11부터 도입된 현대적 타입 별칭 방법이다.

 

문법 차이

// typedef 방식 "A를 B라 부르겠다"
typedef std::lock_guard<std::mutex> LockGuard1;

// using 방식 "A B 둘이 똑같다"
using LockGuard2 = std::lock_guard<std::mutex>;

템플릿 지원 (가장 중요한 차이)

// typedef는 템플릿 별칭 불가능 ❌
typedef std::vector<T> Vec;  // 오류: T를 알 수 없음

// using은 템플릿 별칭 가능 ✅
template<typename T>
using Vec = std::vector<T>;

Vec<int> v;  // OK!

복잡한 타입에서의 가독성

// 함수 포인터 typedef (읽기 어렵고 헷갈림)
typedef void(*FuncPtr)(int, float);

// 함수 포인터 using (훨씬 명확함)
using FuncPtr = void(*)(int, float);

 

 

그 외 using 만의 특징

using namespace xxx

특정 네임스페이스 안에 있는 모든 이름, 특정 클래스를 현재 스코프로 가져온다.

헤더파일에서, 전역에서 사용시 이름 충돌 문제로 위험할 수 있다고 한다.

#include <iostream>
using namespace std;

int main() {
    cout << "Hello\n";  // std::cout 생략 가능
}

#include <iostream>
using namespace std::cout;
using namespace std::endl;

int main() {
    cout << "Hello" << endl;  // std 전체가 아니라 필요한 것만
}

 

using enum

enum class Color { Red, Green, Blue };

void paint() {
    using enum Color;
    Color c = Red;  // ✅ Color::Red 대신 Red 사용 가능
}

 

'공부 > C\C++' 카테고리의 다른 글

c++ placement new  (0) 2025.07.04
c 매크로 - 함수형 매크로 ()  (0) 2025.06.28
c 매크로 - ## (토큰 결합 연산자)  (0) 2025.06.28
typeid 키워드  (0) 2025.06.28
c extern 키워드 (with 선언과 정의)  (0) 2025.06.24

+ Recent posts