본문 바로가기

Programing/Design Pattern

template method

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