Upload
jusingame
View
37
Download
0
Embed Size (px)
Citation preview
함수 템플릿 ( Function Template )
FaceBook Group "코딩의 아침"
Self Study & Sharing
Ø 템플릿(Template) 이란?
한자로 形(모양형)板(널판지판) !
간단히 말하면 일정한 형태로 만든 모양을 의미한다.
우리는 이러한 형태를 만들어 놓고,
필요할 때 마다 이 형태을 이용해서 같은 모양을 손쉽게 만들어 낼 수 있다.
Ø 템플릿(Template) 이란?
겨울에 자주 볼 수있는
맛있는 붕어빵을 생각해 보자.
붕어빵 틀에서 나온 겉모습은 똑같지만,
반죽(내용물)에 따라서, 다양한 맛의 붕어빵이 나오게 된다.
Ø 템플릿(Template) 이란?
이제 대충 템플릿이라는 것에 감이 오는가?
그대가 이해한것이 맞다! (이해 한거죠?... ㅎㅎ)
템플릿이란? 일정한 형태를 만들어 놓고.
당신이 원하는 다양한 데이터 타입을 넣는 방식인 것이다!
뿡어빵 틀에 반죽만 다르게하여 찍어내듯이~!
녹차 붕어빵
추억의 붕어빵
석류 붕어빵
반죽에 따라 ~ !!
Ø 템플릿 함수 만들기 (1)
템플릿 함수를 만들기 전에!
두 매개변수를 더한 값을 출력하는 간단한 함수를 만들어 보자.
(생각하기) 정수덧셈을 할꺼니까~~ 자료형을 인트형으로 하면 되겠지?
void Sum(int iData1, int iData2){
cout << iData1 + iData2 <<endl;}
앗.. 실수끼리도 덧셈하고 싶어졌어.. 함수오버로딩으로 또 만들어야 하네?? ㅜㅜ
계속 만들기 귀찮다!!! 모든 자료형을 받는 함수를 만들 수 없을까??
Ø 템플릿 함수 만들기 (2)
더한다는 기능은 그대로 두고, 넣는 데이터 타입만 그때그때 바뀐다면~
융통성있는 정말 편한 함수가 된다. 이것이 템플릿함수다!
서론이 길었다..., 이제 정말 템플릿 함수를 만들어 보자.
template < typename T >T Sum(T Data1, T Data2){
return Data1 + Data2; }
정하지 않은 Type이란 의미
지금은 자료형 타입을결정하지 않겠다.
그것을 T라고 말하겠다.
< >안에 의미대로실제 사용할 때 자료형을 정해준다.
Ø 템플릿 함수 사용하기 (1)
#include <iostream>using namespace std;
template <typename T>void Sum(T Data1, T Data2){ cout << Data1 + Data2 <<endl;}void main(void){ Sum<int>(3, 4); Sum<float>(3.4f, 4.4f); cout << "==================" <<endl; Sum(3, 4); Sum(3.4, 4.4);}
<출력결과>
ⓐ 타입을 명시해도 되며,ⓑ 타입을 명시하지 않아도
지금처럼, 결과는 같을 수 있으나,어떤 상황에는 원치 않는결과를 초래 할 수도 있다.
ⓐ
ⓑ
Ø 템플릿 함수 사용하기 (2)
#include <iostream>
using namespace std;
template <typename T>void Sum(T Data1, T Data2){ cout << Data1 + Data2 <<endl;}
void main(void){ Sum(3, 4.4f);}
지금 상황이 원치않는 상황이다.
7.4가 출력될것이라 예상했건만....
(에러를 예상한 그대! 센스있군요~)
이렇게, 타입을 명시하지 않고
정수와 실수끼리의 덧셈을 진행하려고
하는 순간! 컴파일러는 에러를 토해낸다.
타입을 명시해주는 습관을 갖자.
error C2782: 'T Sum(T,T)' : 템플릿 매개 변수 'T'이(가) 모호합니다.
Ø 템플릿 함수 사용하기 (3)
#include <iostream>
using namespace std;
template <typename T1, typename T2>void Sum(T1 Data1, T2 Data2){ cout << Data1 + Data2 <<endl;}
void main(void){ Sum<float, int>(3.3f, 4); Sum<float, float>(3.3f, 4.4f); cout << "==============" <<endl; Sum(3.3, 4); Sum(3.3, 4.4);}
템플릿의 인수 타입을여러가지로 만들 수 있다.사용할 경우에도 타입을 명시해주거나해주지 않는다 하여도 이제 자~알출력된다.
그런데! 결과 데이터의 변화가 생겼다?(출력결과는 같은데? 생각해보라.ㅎㅎ)
난, 처음부터 2가지 타입을 정해 줄꺼야!!!
FaceBook Group "코딩의아침" www.jusinacademy.com
>> 잘못된 내용은 댓글로 피드백 부탁드립니다. 감사합니다. <<