나만의 작은 도서관
[C++][Keyword] 타입의 별칭: typedef, using 키워드 본문
typedef 키워드
typedef 키워드는 C언어에서 넘어온 키워드이며, 특정 타입의 별칭을 정의하는 키워드이다. 복잡한 타입을 하나의 이름으로 간결하게 표현하고 싶을 때나 같은 타입이라도 이름을 달리 부여하여 코드의 가독성을 높일 때 사용한다.
typedef 키워드의 사용법은 다음과 같다.
typedef 선언부
// typedef 별칭을_지어줄_타입 별칭_이름
// 복잡한 타입: [<string, int>, <string, int>, <string, int>, ...]
typedef std::vector<std::pair<std::string, int>> pairlist_t;
// 같은 타입, 다른 이름도 가능하다.
typedef std::vector<int> numlist_t;
typedef std::vector<int> numlist_t2;
typedef 사용
int main(){
pairlist_t pairlist; // std::vector<std::pair<std::string, int>> pairlist; 와 동일코드
pairlist.push_back(make_pair("str1", 10)); // pairlist: [<"str1", 10>]
pairlist.push_back(make_pair("str2", 17)); // pairlist: [<"str1", 10>, <"str2", 17>]
numlist_t numlist = {1, 2, 3, 4, 5}; // numlist: {1, 2, 3, 4, 5}
numlist_t2 numlist2 = {100, 101, 102}; // numlist2: {100, 101, 102}
}
using 키워드
using 키워드는 C++에서 새로 생긴 키워드로, typedef와 동일하게 특정 타입의 별칭을 정의하는데 사용하지만, 문법이 보다 현대적이고 가독성이 높다는 장점이 있다.
using 키워드의 사용법은 다음과 같다.
using 선언부
// using 별칭_이름 = 별칭을_지어줄_타입;
// 복잡한 타입: [<string, int>, <string, int>, <string, int>, ...]
using pairlist_t = std::vector<std::pair<std::string, int>>;
// 같은 타입, 다른 이름도 가능하다
using numlist_t = std::vector<int>;
using numlist_t2 = std::vector<int>;
using 사용
int main(){
pairlist_t pairlist; // std::vector<std::pair<std::string, int>> pairlist; 와 동일코드
pairlist.push_back(make_pair("str1", 10)); // pairlist: [<"str1", 10>]
pairlist.push_back(make_pair("str2", 17)); // pairlist: [<"str1", 10>, <"str2", 17>]
numlist_t numlist = {1, 2, 3, 4, 5}; // numlist: {1, 2, 3, 4, 5}
numlist_t2 numlist2 = {100, 101, 102}; // numlist2: {100, 101, 102}
}
using의 추가 사용 예제
C++에서 정수형 타입의 이름은 나름 직관적이지만 몇 bits를 할당하는지 파악하는데는 그리 직관적이지 않다. 그렇기 때문에 다음과 같이 바꿔서 사용하면 타입 이름에 일관성을 부여하고 직관성 또한 높일 수 있다.
(사실, 이미 stdint.h에 int16_t와 같이 typedef로 정의되어 있긴 하다. 하지만 이거 쓰겠다고 stdint.h 헤더를 include하는 것보단 헤더 하나 만들어서 정의해두고 관리하는게 편하다.)
using int16 = short; // 16비트 정수형
using int32 = int; // 32비트 정수형
using int64 = long long; // 64비트 정수형
참고자료
'C++ > 문법 및 메소드(STL)' 카테고리의 다른 글
[C++][Class] struct와 class의 차이 (0) | 2025.02.19 |
---|---|
[C++][Keyword] 정적 변수(static 키워드) (0) | 2025.02.18 |
[C++][Keyword] 소속을 구분하기 위한 네임스페이스(namespace) (0) | 2024.12.21 |
[문자열] 문자열을 정수로 stoi(), 숫자를 문자열로 to_string() (0) | 2024.03.21 |
[문자열] str1 == str2 는 TRUE? (0) | 2023.09.10 |