▶ 함수 중복의 약점 - 중복 함수의 코드 중복
▶ 일반화와 템플릿
● 제네릭(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 |
댓글