아래의 두 함수를 보자.

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를 사용하여 하나로 표현 할 수 있다.

template <typename TYPE>
void Swap(TYPE &a, TYPE &b)
{
      TYPE temp;

      temp = a;
      a = b;
      b = temp;
}

 자 편하지 않은가? 하지만 컴파일을 할 경우에 사용한 자료형만큼의 소스가 생성된다는거. 결국 template는 코딩의 편의성만을 제공한다.

 또한 template는 함수말고도 Class에서 사용이 가능하다!

아래 두 클래스를 보자.

class U_Point
{
public:
      U_Point ( int _x, int _y )
      {
            x = _x; y = _y;
      }

      void ToString()
      {
            cout << "x = " << x << ", " << "y = " << y << endl;
      }

private:
      int x;
      int y;
}

class U_Point
{
public:
      U_Point ( float _x, float _y )
      {
            x = _x; y = _y;
      }

      void ToString()
      {
            cout << "x = " << x << ", " << "y = " << y << endl;
      }

private:
      float x;
      float y;
}

 역시 또한 위의 예제처럼 자료 형만 다르고 모두 동일하다. Template를 적용해보면

template <typename TYPE>
class U_Point
{
public:
      U_Point (TYPE _x, TYPE _y )
      {
            x = _x; y = _y;
      }

      void ToString()
      {
            cout << "x = " << x << ", " << "y = " << y << endl;
      }

private:
      TYPE x;
      TYPE y;
}

 이렇게 된다. 단, 클래스 사용시에는 한가지 주의해야 할 점이 있다. 함수는 다형성을 지원하기에 바로 사용하면 되지만 클래스같은 경우에는 같은이름으로 여러 클래스를 지원하지 않는다는 점이다. 그러므로 사용하려면

U_Point<int> point1(1,2);
U_Point<float> point2(2.4, 3.6);


이런식으로 해주어야 한다.


** 이 글의 저작권은 모두 저자에게 있습니다.
   수정, 배포시 저작권을 표시해주시기 바랍니다.
** 오타, 잘못된 내용이 있으면 적극적으로 알려주시기 바랍니다 :)
** 질문사항 또한 적극적으로 받겠습니다.

Copyright (c) NEWMS 2007 All right Reserved.
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. joongs

    | 2007/08/21 21:55 | PERMALINK | EDIT | REPLY |

    와.. Template에 대해서 잘 설명한 것 같넹 :)

  2. newms

    | 2007/08/21 22:13 | PERMALINK | EDIT |

    아, 형!!ㅋㅋ 고마워요 :)

Write your message and submit
« PREV : 1 : ... 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : NEXT »