일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MFC 예제
- ListBox
- C
- C++
- visual
- 별찍기
- MyTread
- Tipsware
- SSG
- 미가공
- MFC
- mysql
- do it c
- Time
- MyThread
- 정처기 독학
- win32
- 정보처리기사
- mfc 실습
- C언어
- 유료강좌
- 실습
- 충무창업큐브
- 포트폴리오
- tips강좌
- 마이크로소프트
- 핵심 요약
- 도움말
- linux
- 김성엽
- Today
- Total
History
[C++] 템플릿(template)에 대하여 step1 본문
이번 차시 게시글에서는 템플릿과 STL에 대해서 공부한 내용을 간단히 써보려고 한다.
1. 템플릿이란?
템플릿이란 본떠서 찍어내기 위해 만들어진 틀이라는 뜻을 가지고 있다. 이렇게 코드를 찍어내듯이 생산할 수 있도록 일반화(generic) 시키는 도구가 템플릿이다.
2. 템플릿은 어떨때 사용하나?
템플릿은 함수의 중복이 있을 때 사용하면 용이하다. 함수의 이름은 같지만 인자값이 달라도 실행은 된다. 이것이 오버로딩이라고 한다. 그러나 오버로딩을 쓰는 이유는 같은 기능을 하지만 자료형이 다를 때 많이 쓰이는 개념이기도 하다.
그래서 개발자는 함수의 이름의 중복을 생각하지 않고 편하게 쓸 수 있지만, 이렇게 프로그래밍을 진행하게 된다면 코드의 줄 수는 어마무시하게 늘어날 것이다.
템플릿은 이런 중복 함수를 일반화하여 단순하게 코드를 작성할 수 있다.
아래 예시 코드를 보자.
void Swap(int *a,int *b)
{
int temp;
temp=*a;
a=b;
*b=temp
}
void Swap(float *a,float *b)
{
float temp;
temp=*a;
a=b;
*b=temp
}
위 코드는 오버로딩하여 짜여진 코드이다. 이제 이것을 일반화시키는 템플릿을 사용하면 아래와 같다.
template <class T>
//template 템플릿을 선언하는 키워드
//class 제네릭 타입을 선언하는 키워드
//T 제네릭 타입 T 선언 -> 변수와 같다.
void MySwap(T* a,T* b)
{
T temp;
temp= *a;
a=b;
*b=tmep;
}
위와 같은 함수 하나로 모든 자료형을 대응할 수 있도록 만들었다. 이것이 tamplate을 이용한 일반화(제네릭)의 예시이다.
3. 템플릿 선언은 알겠어 근데 제네릭 타입은 뭐야?
템플릿 함수를 사용할 때는 template이라는 키워드로 시작하고 <Class ?> 나 <typename ?>으로 선언한다.
tmeplate<Class T>
tmeplate<typename T>
그러면 여기서 질문이 들어온다.
제네릭 타입은 몇개까지 선언할 수 있는데?라고, 제네릭 타입은 개발자가 원하는 만큼 써도 되고 이름도 굳이 T로 안 해도 된다.
tmeplate<class Q,class W,class E>
그리고 템플릿은 함수를 한 줄로 써도 된다.
template <class T> void MySwap(T* a,T* b)
{
T temp;
temp= *a;
a=b;
*b=tmep;
}
4. 템플릿의 구체화
아무래도 사용하기 편리한 기능들은 무겁기 마련이다. 템플릿도 무거운 기능중 하나이다. 다양한 자료형을 받을 수 있기 때문이다. 템플릿은 함수의 호출부에서 구체화 작업을 한다. 예를 들어 Swap함수의 인자의 타입이 int이면 템플릿 함수가 동작할 때 한번 더 해석을 하여 T타입이 아닌 int형으로 번역한다. 그런 다음에 컴파일이 되어서 실행되는 것이다.
'C,C++ > 개념 실습 프로그래밍' 카테고리의 다른 글
[c++] STL에 관한 기초 개념 (0) | 2023.06.03 |
---|---|
[C++] 템플릿(template)에 대하여 step2 (2) | 2023.06.01 |
[C언어] 파일에 저장된 문자열 수정하기 (0) | 2023.04.26 |
[C언어] fgets 함수에 대하여 (0) | 2023.04.26 |
[C언어] 텍스트 파일의 내용 출력하기 (0) | 2023.04.26 |