10
함수 템플릿 ( Function Template ) FaceBook Group "코딩의 아침" Self Study & Sharing

[C++]함수템플릿(Function template)

Embed Size (px)

Citation preview

Page 1: [C++]함수템플릿(Function template)

함수 템플릿 ( Function Template )

FaceBook Group "코딩의 아침"

Self Study & Sharing

Page 2: [C++]함수템플릿(Function template)

Ø 템플릿(Template) 이란?

한자로 形(모양형)板(널판지판) !

간단히 말하면 일정한 형태로 만든 모양을 의미한다.

우리는 이러한 형태를 만들어 놓고,

필요할 때 마다 이 형태을 이용해서 같은 모양을 손쉽게 만들어 낼 수 있다.

Page 3: [C++]함수템플릿(Function template)

Ø 템플릿(Template) 이란?

겨울에 자주 볼 수있는

맛있는 붕어빵을 생각해 보자.

붕어빵 틀에서 나온 겉모습은 똑같지만,

반죽(내용물)에 따라서, 다양한 맛의 붕어빵이 나오게 된다.

Page 4: [C++]함수템플릿(Function template)

Ø 템플릿(Template) 이란?

이제 대충 템플릿이라는 것에 감이 오는가?

그대가 이해한것이 맞다! (이해 한거죠?... ㅎㅎ)

템플릿이란? 일정한 형태를 만들어 놓고.

당신이 원하는 다양한 데이터 타입을 넣는 방식인 것이다!

뿡어빵 틀에 반죽만 다르게하여 찍어내듯이~!

녹차 붕어빵

추억의 붕어빵

석류 붕어빵

반죽에 따라 ~ !!

Page 5: [C++]함수템플릿(Function template)

Ø 템플릿 함수 만들기 (1)

템플릿 함수를 만들기 전에!

두 매개변수를 더한 값을 출력하는 간단한 함수를 만들어 보자.

(생각하기) 정수덧셈을 할꺼니까~~ 자료형을 인트형으로 하면 되겠지?

void Sum(int iData1, int iData2){

cout << iData1 + iData2 <<endl;}

앗.. 실수끼리도 덧셈하고 싶어졌어.. 함수오버로딩으로 또 만들어야 하네?? ㅜㅜ

계속 만들기 귀찮다!!! 모든 자료형을 받는 함수를 만들 수 없을까??

Page 6: [C++]함수템플릿(Function template)

Ø 템플릿 함수 만들기 (2)

더한다는 기능은 그대로 두고, 넣는 데이터 타입만 그때그때 바뀐다면~

융통성있는 정말 편한 함수가 된다. 이것이 템플릿함수다!

서론이 길었다..., 이제 정말 템플릿 함수를 만들어 보자.

template < typename T >T Sum(T Data1, T Data2){

return Data1 + Data2; }

정하지 않은 Type이란 의미

지금은 자료형 타입을결정하지 않겠다.

그것을 T라고 말하겠다.

< >안에 의미대로실제 사용할 때 자료형을 정해준다.

Page 7: [C++]함수템플릿(Function template)

Ø 템플릿 함수 사용하기 (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);}

<출력결과>

ⓐ 타입을 명시해도 되며,ⓑ 타입을 명시하지 않아도

지금처럼, 결과는 같을 수 있으나,어떤 상황에는 원치 않는결과를 초래 할 수도 있다.

Page 8: [C++]함수템플릿(Function template)

Ø 템플릿 함수 사용하기 (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'이(가) 모호합니다.

Page 9: [C++]함수템플릿(Function template)

Ø 템플릿 함수 사용하기 (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가지 타입을 정해 줄꺼야!!!

Page 10: [C++]함수템플릿(Function template)

FaceBook Group "코딩의아침" www.jusinacademy.com

>> 잘못된 내용은 댓글로 피드백 부탁드립니다. 감사합니다. <<