본문 바로가기
[ C++ ]/- C++ 문법공부

C++ 18장 [템플릿1]

by MRG 2022. 11. 24.
728x90
반응형

▣ 안녕하세요. 이번장에서는 템플릿에 대해 공부해보도록 하겠습니다. 

C++에서 함수를 작성하다 보면 함수의 이름을 동일하게 만드는 경우가 있습니다.

같은 의도로 다른 자료를 받는 경우에 그렇습니다.

그걸 오버 로딩이라고 하는데 이럴 경우 반환형이나 매개변수에 자료형(데이터 타입)을

모두 다 다르게 하여 구분을 해서 함수를 만들기도 합니다.

하지만 우리가 모든 자료형(데이터 타입)의 경우의 수를 다 생각하고 함수를 만들 수는 없습니다.

그렇기 때문에 템플릿을 사용해야 합니다.

템플릿은 형판이라는 뜻을 가지고 있으며, 

함수에서 매개변수에 자료형 타입만 다른 중복된 함수들을 일반화시킨 틀을 템플릿이라고 합니다.

설명만 들으면 어려울 수 있으니  코드를 작성하며 공부해보도록 하겠습니다.

 

▣ 템플릿을 작성하려면 template 키워드를 사용해야 합니다. 

그리고 <typename T>코드에서처럼 <typename 타입 이름>을 넣어주셔서서 작성해야 합니다.

바로 밑에 함수를 만들 때 반환형 매개변수 자료형(데이터 타입) 자리에 템플릿으로 작성한 T 이름을 넣으면 됩니다.

메인 함수에서 함수를 호출할 때 sum(10, 20), sum(5.5, 7.2) 코드에서처럼 정수형과 실수형을 각각 매개변수로 전달합니다.

디버그를 해보면 각각 자료형에 맞게 값이 연산하여 출력되는 걸 확인할 수 있습니다. 

정수형은 정수형으로 실수형은 실수형 형식으로 말이죠.

 

728x90

▣ 이번에는 typename이 아닌 class로 지정해서 템플릿을 만들어 보겠습니다.

typename자리에 <class T>를 넣어서 작성하시면 됩니다. 

메인 함수를 살펴보면 달라진 부분이 있습니다.

sum <int>(10,20)로 되어 있는데 이건

함수를 호출할 때 명확하게 어떤 반환형(자료형)을 쓸지 <> 안에 표시하기 위함입니다. 

그럼 내가 지정한 반환형 형식대로 템플릿 자료형을 반환하게 됩니다.

C++98에서 추가된 typename 키워드 이전에는 class 키워드를 사용했습니다.
C++ 컴파일러는 템플릿 정의 내의 typename 키워드와 class 키워드를 같은 템플릿으로 진행합니다.

템플릿의 장점으로는 생산성이 높고 유지보수 편리합니다. 하지만 단점으로는 컴파일 속도가 느려지는 단점이 있습니다.  

 

 

 

 

728x90
반응형

'[ C++ ] > - C++ 문법공부' 카테고리의 다른 글

C++ 17장 [프렌드 함수]  (0) 2022.11.18
C++ 16장 [static 멤버 변수, 함수]  (2) 2022.11.16
C++ 15장 [디폴트 매개변수]  (0) 2022.11.11
C++ 14장 [복사생성자]  (0) 2022.11.11
C++ 13장 [참조변수]  (0) 2022.11.04

댓글