파이썬(Python) - Template Method Pattern
오늘은 디자인 패턴 중에서 여러 개발 언어(Java, Python 등)에서 많이 사용 되는 템플릿 메소드 (Template Method) 패턴에 대해서 알아보겠습니다.
템플릿 메소드 패턴은 주로 작업 단위로 클래스를 생성해서 서브클래스로 캡슐화 한 후 특정 단계
에서 맡은 역할을 수행하게 하는 패턴이라고 볼 수 있습니다.
말이 어렵지만, 간단하게 이야기하면 전체적으로 코드 레이아웃은 동일하게 가져가면서 비슷한 역할을
하는 메소드들의 중복을 최소화 하고 통합 하는 작업 시에 유용하다고 볼 수 있습니다.
그러면 문서 하단에서 간단하게 예제를 작성해보겠습니다.
파이썬(Python) - Template Method Pattern 예제 소스 코드
아래 예제에서 간단하게 파이썬 코드를 활용해서 템플릿 메소드 패턴을 구현해 보았습니다.
template_p.py
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 from abc import ABC, abstractmethod class Template(ABC): def __init__(self): pass @abstractmethod def func1(self): pass @abstractmethod def func2(self): pass @staticmethod def comm_fun(): print("Run func1 and func2.") def execute(self): self.comm_fun() self.func1() self.func2() class TemplateImpl1(Template): def func1(self): print("TemplateImplementation1.func1() called.") def func2(self): print("TemplateImplementation1.func2() called.") class TemplateImpl2(Template): def func1(self): print("TemplateImplementation2.func1() called.") def func2(self): print("TemplateImplementation2.func2() called.") print() temp_impl1 = TemplateImpl1()# help(temp_impl1)temp_impl1.execute() print("-" * 40) temp_impl2 = TemplateImpl2()# help(temp_impl2)temp_impl2.execute() cs
- 4번 라인 : 추상(Abstract) 메소드를 정의하는 상위 클래스
- 26, 34번 라인 : 추상 메소드를 구현 및 오버라이딩 하는 하위(서브) 클래스
- 45번 라인 : 주석을 해제하면 클래스 관계도 확인
- 46, 52번라인 : 실행 및 결과 콘솔 출력
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | from abc import ABC, abstractmethod class Template(ABC): def __init__(self): pass @abstractmethod def func1(self): pass @abstractmethod def func2(self): pass @staticmethod def comm_fun(): print("Run func1 and func2.") def execute(self): self.comm_fun() self.func1() self.func2() class TemplateImpl1(Template): def func1(self): print("TemplateImplementation1.func1() called.") def func2(self): print("TemplateImplementation1.func2() called.") class TemplateImpl2(Template): def func1(self): print("TemplateImplementation2.func1() called.") def func2(self): print("TemplateImplementation2.func2() called.") print() temp_impl1 = TemplateImpl1() # help(temp_impl1) temp_impl1.execute() print("-" * 40) temp_impl2 = TemplateImpl2() # help(temp_impl2) temp_impl2.execute() | cs |
- 4번 라인 : 추상(Abstract) 메소드를 정의하는 상위 클래스
- 26, 34번 라인 : 추상 메소드를 구현 및 오버라이딩 하는 하위(서브) 클래스
- 45번 라인 : 주석을 해제하면 클래스 관계도 확인
- 46, 52번라인 : 실행 및 결과 콘솔 출력
파이썬(Python) - Template Method Pattern 실행 화면
아래 이미지로 실제 실행 화면을 확인하실 수 있습니다.
실제 실행 화면
마무리
이번 예제에서는 파이썬 디자인 패턴 중 템플릿 메소드 패턴에 대해서 간단하게 예제 코드를 작성해보고
결과를 확인해봤습니다.
보통 템플릿 메소드 패턴은 동일한 기능은 상위클래스에 정의하고 추상 메소드를 선언 후 서브(하위)
클래스에서 추상 메소드 구현을 통해서 확장/변화/수정 즉, 필요한 부분만 구현할 수 있게 합니다.
결과적으로 전체적으로 소스코드를 재 사용하고 알고리즘등을 클래스에 맞게 정의함으로써 코드의 중복을
최소화하고 재사용하는데 용이한 패턴이라고 볼 수 있습니다.
Java 뿐만 아니라 파이썬에서도 유용한 디자인 패턴 코딩을 직접 해보시는건 어떨까요?
다음 시간에도 파이썬 관련 유용한 주제에 대해서 포스팅 하도록 하겠습니다.
소스코드 다운로드 : template_p.zip
'언어 > Python' 카테고리의 다른 글
파이썬(Python) - 네임드튜플(namedtuple) 사용 예제 및 소스코드 (3) | 2019.08.18 |
---|---|
파이썬(Python) - 매직(Special) 메소드 및 연산자 오버라이딩 설명 및 실습 (2) | 2019.07.23 |
파이썬(Python) - 팩토리 메소드(Factory Method) 패턴(디자인패턴) (0) | 2019.02.25 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(2) - env 명령어 (2) | 2019.01.26 |
파이썬 아나콘다(Anaconda) - 심화 사용법 정리(1) - list, search 명령어 (0) | 2019.01.23 |