본문 바로가기
My Image
프로그래밍/Design_Pattern

[Design_Pattern] 템플릿 메서드 패턴(Template Method Pattern)

by Lim-Ky 2017. 8. 27.
반응형

안녕하세요. Limky입니다. 

이번 시간은 템플릿 메서드 패턴(Template Method Pattern)에 대해서 알아보겠습니다.

바로 예제를 보겠습니다.






자동 기어 변속 하는 자동차가 있고, 수동 기어 변속을 하는 자동차가 있다고 칩시다.

위와 같이 playWithOwner()메서드는 동일하게 구현되어 있지만, 가운데 자동 기어 변속인지 기어를 수동으로 조작 하는지에 대해서는 서로 다릅니다.


이럴 경우 템플릿 메서드 패턴(Template Method Pattern)을 사용해서 설계하면 됩니다.

템플릿 메서드 패턴 디자인 테이블을 먼저 봅시다. 


한꺼번에 구체클래스를 구현하지 않고 추상클래스의 템플릿 메서드를 구현해 놓으면, 구체클래스 가 상속받아 자신이 필요한 메서드들을 작성해주는 방식입니다. 자 이제 템플릿 메서드 패턴(Template Method Pattern)에 의하여 코드를 수정해보겠습니다. 구체클래스들은 추상클래스 Car 상속 받아 구현하게 끔 설계합니다.




추상클래스 안에 추상메서드 선언을 해놓고 일반 메서드를 어느 정도 구현해 놓습니다.

추상클래스를 상속받은 구체클래스는 추상메서드를 강제로 오버라이딩 시켜서 재정의 해야합니다. 하지만 일반 메서드는 재정의 해도 되고 안해도 됩니다. 이런것을 Hook메서드라고 합니다. 위 경우엔 runSomething()메서드가 훅 메서드입니다. 상황에 맞게 훅 메서드를 정의하거나 안해도 됩니다.









결과

시동 켜기

사이드 브레이크 해제

클러치한 상태에서 2단 넣기

기어 수동 조작

뻑뻑하게ㅠㅠ 브레이크~!!



시동 켜기

사이드 브레이크 해제

Drive D에 기어 놓기

자동 기어 변속

스무스하게 ~ 브레이크~!!


쉽죠? 이렇게 상위 클래스(여기선 추상 클래스)에게 공통적인 로직은 템플릿 메서드를 두고, 구체클래스 스타일에 맞게 구현을 강제하기 위해 추상메서드를 사용하고, Hook메서드(일반 메서드)를 두는 패턴을 템플릿 메서드 패턴(Template Method Pattern)이라고 합니다. 상위 클래스 즉 추상 클래스가 일종의 견본역할을 하는 것이죠..


-참고 



반응형

댓글