나만의 작은 도서관

[C++][Keyword] 타입의 별칭: typedef, using 키워드 본문

C++/문법 및 메소드(STL)

[C++][Keyword] 타입의 별칭: typedef, using 키워드

pledge24 2024. 12. 21. 23:26

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비트 정수형

 


참고자료

https://www.youtube.com/watch?v=-TkoO8Z07hI&t=0s