Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

README.md

CPP Module 07

C++ 템플릿(Template)의 기초를 학습하는 모듈입니다. 함수 템플릿과 클래스 템플릿을 통해 제네릭 프로그래밍을 경험합니다.

주요 학습 포인트:

  • 함수 템플릿 (Function Templates)
  • 클래스 템플릿 (Class Templates)
  • 템플릿 특수화 (Template Specialization)
  • 제네릭 프로그래밍 (Generic Programming)
  • 타입 매개변수 (Type Parameters)

구성

ex00: Start with a few functions

  • swap, min, max 함수 템플릿 구현
  • 모든 타입에 대해 작동
  • 템플릿 함수의 기본 문법 학습

ex01: Iter

  • iter 함수 템플릿
  • 배열과 함수 포인터를 받아 각 요소에 함수 적용
  • 템플릿 매개변수로 배열 타입과 함수 전달

ex02: Array

  • Array 클래스 템플릿
  • 동적 배열 구현
  • 인덱스 연산자 오버로딩 ([])
  • 범위 검사 및 예외 처리
  • 깊은 복사 구현

핵심 개념

함수 템플릿

  • 타입을 매개변수로 받아 여러 타입에 대해 동일한 로직 수행
  • swap, min, max 등 기본 연산을 모든 타입에 적용 가능
  • 컴파일러가 사용 시점에 타입을 추론하여 함수 생성

iter 함수 템플릿 (ex01)

  • 배열의 각 요소에 함수를 적용하는 제네릭 함수
  • 배열 타입과 함수 타입을 템플릿 매개변수로 받음
  • 함수 포인터를 통해 다양한 연산 적용 가능

클래스 템플릿 (ex02)

  • 타입에 독립적인 동적 배열 클래스 구현
  • 인덱스 연산자 오버로딩으로 배열처럼 사용
  • 범위 검사를 통한 안전한 접근 보장
  • 깊은 복사로 독립적인 배열 관리

템플릿 정의 위치

  • 템플릿은 헤더 파일에 선언과 정의를 함께 작성
  • 컴파일 타임 인스턴스화를 위해 구현 코드가 필요
  • 각 타입별로 별도의 함수/클래스가 생성됨

타입 추론

  • 컴파일러가 인자의 타입을 보고 자동으로 템플릿 타입 결정
  • 명시적으로 타입을 지정할 수도 있음
  • 타입 추론 실패 시 명시적 지정 필요

컴파일

c++ -Wall -Wextra -Werror -std=c++98 *.cpp -o program

각 exercise에서:

make

주의사항

  • 템플릿 정의: 헤더 파일(.hpp)에 선언과 정의 모두 작성
  • 타입 제약: 템플릿 타입은 사용되는 연산자를 지원해야 함
    • min/max: <, > 연산자 필요
    • swap: 복사 생성자, 대입 연산자 필요
  • 깊은 복사: 동적 메모리 사용 시 필수
  • 범위 검사: 인덱스 접근 시 항상 검증
  • const 정확성: const 멤버 함수와 const 참조 활용
  • 예외 안전성: 메모리 할당 실패, 범위 초과 등 처리