c23 [C++] 템플릿
본문 바로가기
[C++]

[C++] 템플릿

by Jarvis2304 2022. 11. 23.

▶ 함수 중복의 약점 - 중복 함수의 코드 중복

 

▶ 일반화와 템플릿

● 제네릭(generic) 또는 일반화

- 함수나 클래스를 일반화시키고, 매개변수 타입을 지정하여 틀에서 찍어 내듯이 함수나 클래스 코드를 생산하는 기법

 

  템플릿

- 함수나 클래스를 일반화하는 C++ 도구

- template 키워드로 함수나 클래스 선언 

- 변수나 매개변수의 타입만 다르고, 코드 부분이 동일한 함수를 일반화 시킴

- 재네릭 타입(일반화를 위한 데이터 타입)

 

템플릿 선언

 

▷ 중복 함수들로부터 템플릿 만들기 사례

 

▷ 템플릿으로부터의 구체화

● 구체화(specialization)

- 템플릿의 제네릭 타입에 구체적인 타입 지정

- 템플릿 함수로부터 구체화된 함수의 소스 코드 생성

 

 

▷ 제네릭 함수로부터 구체화된 함수 생성 사례

 

 

예제) 제네릭 myswap() 함수 만들기

 

 

 

▷ 구체화 오류

- 제네릭 타입에 구체적인 타입 지정 시 주의

 

 

 

 

▶ 템플릿 장점과 제네릭 프로그래밍

● 템플릿 장점

- 함수 코드의 재사용

- 높은 소프트웨어 생산성과 유용성

● 템플릿 단점

- 포팅에 취약

- 컴파일러에 따라 지원하지 않을 수 있음

- 컴파일 오류 메시지 빈약, 디버깅에 많은 어려움

 

● 제네릭 프로그래밍 (generic programming)

- 일반화 프로그래밍이라고도 부름

- 제네릭 함수나 제네릭 클래스를 활용하는 프로그래밍 기법

- C++에서 STL(Standard Template Library) 제공, 활용

● 보편화 추세

- Java, C# 등 많은 언어에서 활용

 

예제) 큰 값을 리턴하는 bigger() 함수 만들기

 

 

예제)  배열의 합을 구하여 리턴하는 제네릭 add() 함수 만들기 

 

예제)  배열을 복사하는 제네릭 함수 mcopy()

 

 

 

▷ 배열을 출력하는 print() 템플릿 함수의 문제점

 

예제) 템플릿 함수보다 중복 함수가 우선

 

 

 

 

▶ 제네릭 클래스 만들기

● 제네릭 클래스 선언

 

● 제네릭 클래스 구현

 

● 클래스 구체화 및 객체 활용

 

예제) 제네릭 스택 클래스 만들기

 

예제) 제네릭 스택의 제네릭 타입을 포인터나 클래스로 구현화하는 예

 

 

예제)  두 개의 제네릭 타입을 가진 클래스 만들기

 

'[C++]' 카테고리의 다른 글

[C++] 파일 입출력  (0) 2022.12.10
[C++] STL (표준 템플릿 라이브러리)  (0) 2022.11.30
[C++] 가상함수와 추상 클래스 (다형성)  (0) 2022.11.17
[C++] 상속  (0) 2022.11.08
[C++] 연산자 중복 (다형성)  (0) 2022.11.03

댓글