Template method 패턴


[네이버 지식백과]template method 패턴 (쉽게 배우는 소프트웨어 공학, 2015. 11. 30., 한빛아카데미(주))

 

 

템플릿 메소드 패턴도 유용한 패턴입니다. 기능은 같으나 구현방법이 다른 메소드들의 구조를 제시하고 기능과 구현방법이 같은 메소드는 대표로 하나만 제시하는 방법입니다. 예를 들어 도형을 그리는 것을 생각해보도록 하겠습니다. 도형에는 삼각형, 사각형, 원 등이 있습니다. 넓이와 높이(원의 경우 지름)을 통해 도형을 설정하는 것은 모두 똑같습니다. 그러나 구체적으로 모양은 다르지요. 

이러한 도형을 그릴때는 메모리라는 사상위에 비트를 역상시켜 해당 도형을 그리는 방법은 어느 이미지든 동일합니다. 

따라서 도형의 모양을 만드는 기능은 개별 구현이 가능하도록 추상메소드로 하고 그리는 부분은 모두 같으므로 하나만 구현하면 됩니다.  설명이 어려우니 코드를 보며 이해하도록 하겠습니다. 

아래 코드는 shape 헤더입니다. 우선 도형을 만들기 위한 set_area, 와 그리기를 위한 get_gui_data를 추상 메소드로 잡았습니다. 그리고 shape_draw는 모든 도형에서 동일 하므로 템플릿 메소드로 만들었습니다.

shape_draw 함수 구현부를 보도록 하겠습니다. 파라메타로 넘어온 shape의 get_gui_data를 이용해 그림을 그리는 코드 입니다. x,y는 좌표입니다.

 

그럼 하위 shape 인 사각형 먼저 볼까요? setup_shape_rectangle은 외부에서 호출 할 수 있는 extern 함수입니다. 아마 main에서 호출되겠지요? set_area를 통해 메모리에 해당 도형을 그리고, get_gui_data를 통해 그려지 메모리를 pointer로 넘겨주게 될 것입니다. 

 

아울러 원 shape도 살펴보도록 하겠습니다. 위의 사각형과 거의 차이가 없지요? 그러나 원을 그리려면 구체적인 구현이 달라지겠지요? 

 

각각 하나의 도형만을 그리니 아주 간단하게 구현했지만 실제로는 더 복잡해질 수도 있을 겁니다. 자 그럼 main에서 어떻게 호출되는지 보도록 하겠습니다.

main 에서는 각각의 도형을 호출하고, 특성을 정하고 shape_draw에 넘겨서 그림을 그립니다. shape_draw에서는 해당 도형의 메모리를 호출하여 그림을 그리게 됩니다.

C 에서는 특히 firmware 수준의 소프트웨어서는 동적 메모리 할당(malloc) 사용을 하지 않는게 좋습니다. malloc 라이브러리 코드 크기도 클뿐아니라 제대로 free나 참조를 잘 못하면 error를 발생시키기 쉽습니다. 또한 단편화로 성능저하가 발생하기도 하며 제일로 두려운 예상치 못한 에러를 낼 수도 안낼수도 있습니다. malloc을 대신 메모리를 넉넉히 잡아 array로 선언하여 사용하는 것이 제일 좋습니다. 아니면 자신만의 memory 관리 기능을 만들어도 좋을 것입니다.

C언어 패턴에서 가장 아쉬운게 new 키워드가 없다는 것입니다. new는 동적 메모리 할당이지요. C언어에서는 new 키워드를 비슷하게 따라하려면 대신 미리 개수를 한정 혹은 예상하여 array로 미리 만들어 줘야 합니다. 동적이라는 것은 예상이 안된다는 것인데, 여태 해오던 프로젝트에서는 대부분 예상이 되더군요. ㅎㅎㅎ

위의 예제에서도 사각형 한개, 원 한개 이렇게 그렸는데, 더 많은 도형을 그릴려면 arrary를 사용하여야 합니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'▶ 이전글 > C Pattern' 카테고리의 다른 글

C로 만드는 Interface  (0) 2014.10.15
Singleton 패턴  (0) 2014.10.13
Strategy 패턴  (0) 2014.10.02
Observer 패턴  (0) 2014.10.02
State 패턴  (4) 2014.10.02