템플릿 함수/클래스의 동작 원리

한경식·2024년 12월 17일

템플릿 함수


  • 정의

    • 다양한 자료형에 대해 동일한 기능을 수행하는 함수를 작성할 수 있게 해줌
  • 기본 개념

    • 템플릿 함수는 함수의 기능은 결정되어 있지만, 자료형을 나중에 결정할 수 있도록 만드는 함수의 틀이다
template<typename T>
T Sunction(T parameter)
{
	return parameter;
}
  • 주요 특징
    • 선언 방법
      • template 또는 template 형태로 선언
      • 여러 타입을 사용할 경우 template <typename T1, typename T2> 형태로 선언 가능
template <typename T>
T add(T a, T b)
{
  return a + b;
}
  
//사용
int result1 = add(2,3) //int 타입
double result2 = add(3.3, 4.1) // double 타입
  • 장단점

    • 장점
      • 코드의 재 사용성 향상
      • 소프트웨어의 생산성과 유연성 증가
      • 런타임 속도가 빠르다
    • 단점
      • 컴파일 시간이 상대적으로 느림
      • 컴파일러에 따라 지원하지 않을 수 있음
      • 디버깅이 어렵다는 단점 존재
  • 특수화

    • 특정 타입에 대해 다른 동작이 필요한 경우 템플릿 특수화를 통해 별도 처리 가능
template<>
void Test(std::vector<Datatype>& V)
{
  //특정 타입에 대한 특별 구현
}

클래스 동작 원리


  • 클래스란?
    • 데이터(멤버 변수)와 기능(멤버 함수)을 하나의 단위로 캡슐화하는 사용자 정의 데이터 타입
class Test
{
public:
  Test();
  ~Test();
  void SetData(int data)
  {
  	m_nData = data;
  }
private:
  int m_nData;
}
  • 특징
    • 접근 제어
      • private : 클래스 내부에서만 접근 가능
      • protected : 상속받은 클래스까지 접근 가능
      • public : 어디서든 접근 가능
    • 생성자와 소멸자
      • 생성자
        • 클래스 이름과 동일한 이름을 가진 멤버 함수
        • 객체가 생성될 때 자동으로 호출
        • 반환 타입이 없음
        • 멤버 변수 초기화에 사용
      • 소멸자
        • 클래스 이름 앞에 ~가 붙음
        • 객체가 소멸될 때 자동으로 호출
        • 매개변수를 가질 수 없음
        • 동적 할당된 메모리 해제 등 정리 작업을 수행
      • 주의사항
        • 생성자는 여러개 정의 가능(오버로딩)
        • 소멸자는 반드시 하나만 존재
        • 명시적으로 정의하지 않으면 컴파일러가 기본 생성자와 소멸자 제공
        • 동적 할당된 메모리는 반드시 소멸자에서 해제해야 됨
  • 메모리 관리
    • 객체 생성
      • 스택 메모리 : MyClass obj;
      • 힙 메모리 : MyClass* ptr = new MyClass();
    • 맴버 변수 할당
      • 객체가 생성될 때 멤버 변수를 위한 메모리 할당
      • 멤버 함수는 모든 객체가 공유
  • 상속과 다양성
class Parent
{
  virtual void show(){}//가상함수
}
class Child : public Parent
{
  void show() override {} //오버라이딩
}
profile
게임 개발 지망생

0개의 댓글