어떤 타입이나 이름에 대해 새로운 이름을 붙이는 것을 뜻합니다. 즉, 원래 타입이나 식별자를 다른 이름으로 부를 수 있도록 해주는 것입니다.
C++에서는 타입 별칭(using, typedef), 네임스페이스 별칭(namespace)이 있습니다.
C 언어 시절부터 존재하는 구문으로, 기존 타입에 새로운 이름을 부여합니다.
예시
typedef int MyInt; // MyInt는 int의 별칭
MyInt x= 5; // int x = 5;와 동일합니다.
C++11에서 도입된 구문으로, 기존 타입에 새로운 이름을 부여합니다.
예시
using MyInt = int; // MyInt는 int의 별칭
MyInt x = 5; // int x = 5;와 동일합니다.
typedef와 동일한 역할을 하지만, 가독성이 더 좋고 템플릿과 함께 훨씬 강력하게 작동합니다.
현대 C++에서는 기본적으로 더 간결하고 직관적인 using 사용을 권장합니다.
또한, 템플릿 타입을 별칭으로 지정하려고 할 때, using의 경우 별칭 지정이 가능하지만 typedef는 별칭 지정이 불가능합니다.
템플릿 타입 별칭 지정 | using
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
using Vec = vector<T>;
int main() {
Vec<int> v;
return 0;
}
템플릿 타입 별칭 지정 | typedef (사용 불가)
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
typedef Vec vector<T>; // Error
int main() {
Vec<int> v; // Error
return 0;
}
::로 이어지는 긴 네임스페이스 경로를 짧게 줄여서 쓰기 좋게 만드는 것입니다.
예시
namespace x = a::b::c
x::Something // a::b::c::Something과 동일합니다.
using namespace : 네임스페이스의 모든 이름을 현재 스코프에서 직접 사용할 수 있도록 하는 구문입니다. 이 구문을 사용하면, 긴 네임스페이스 경로(::)를 매번 입력하지 않고 네임스페이스 내의 모든 요소를 직접 사용할 수 있게 됩니다.
짧은 코드 예시에서는 유용할 수 있지만, 큰 프로젝트나 헤더 파일에서는 사용을 지양해야 합니다.