728x90
https://www.ecourse.co.kr/courses/cpp_designpattern/lessons/template-method/
C++ Design Pattern → template method - ecourse
www.ecourse.co.kr
template method는 행위 패턴으로, 알고리즘의 처리 과정은 변경하지 않고 알고리즘의 각 단계의 처리를 파생 클래스에서 재정의할 수 있게 한다.
struct Shape
{
virtual ~Shape() {}
virtual void draw() = 0;
};
class Rect : Shape
{
public:
void draw() override
{
//동일한 코드
//파생 클래스에 따라 달라지는 코드
//동일한 코드
}
};
class Circle : Shape
{
public:
void draw() override
{
//동일한 코드
//파생 클래스에 따라 달라지는 코드
//동일한 코드
}
};
위 코드를 보면 Shape을 상속 받는 파생 클래스들은 draw를 구현해야 하는데, draw의 내부 구현이 파생 클래스에 따라 달라지는 부분도 있지만, 그렇지 않은 부분도 있다고 가정해 보자. 이 경우 코드의 중복이 발생하게 된다.
struct Shape
{
virtual ~Shape() {}
void draw()
{
//동일한 코드
drawImp();
//동일한 코드
}
protected:
virtual void drawImp() = 0;
};
class Rect : Shape
{
protected:
virtual void drawImp()
{
//파생 클래스에 따라 달라지는 코드
}
};
class Circle : Shape
{
protected:
virtual void drawImp()
{
//파생 클래스에 따라 달라지는 코드
}
};
코드 중복을 피하기 위해서 template method 패턴을 사용할 수 있다. 먼저 파생 클래스 마다 달라지는 부분을 각 파생 클래스에서 재정의할 수 있도록 drawImp라는 가상 함수를 정의한다. 다음으로 draw에서는 공통의 코드를 처리하면서 적절한 위치에서 drawImp를 호출해 준다. 이 경우 파생 클래스들은 알고리즘의 처리 과정을 다시 만들 필요가 없고, 파생 클래스 마다 달라지는 부분만 재정의 하면 된다.
728x90
'Programing > Design Pattern' 카테고리의 다른 글
adapter #1 (0) | 2025.02.09 |
---|---|
shape #2 (0) | 2025.01.26 |
dynamic_casting (0) | 2025.01.17 |
upcasting (0) | 2025.01.17 |
constructor (0) | 2025.01.16 |