-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DesignPattern] 템플릿 메소드 패턴 정리 #60
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
흥미롭게 봤지만 조금 어렵게 다가오는 내용이네요. 제 STL도 이것과 비슷할까요...? :).....
|
||
## 템플릿 메소드 패턴 개요 | ||
|
||
행동 패턴에서는 각 객체의 역할이 중요하다. 객체는 상호 작용을 통해 더 큰 긴능을 구현할 수 있다. **템플릿 메소드 패턴**은 행동 패턴의 한 종류로 애플리케이션의 뼈대나 핵심 알고리즘을 `Template Method`라는 곳에 정의한다. 템플릿 메소드 패턴은 알고리즘의 일부 단계를 서브클래스화해 알고리즘의 부분적 수정 및 재정의를 쉽게 한다. 즉 서브클래스를 자유롭게 재정의할 수 있다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
긴능 -> 기능으로 수정 부탁드립니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앗ㅋㅋㅋㅋㅋ 매번 오타가 하나씩 있네요.. 수정하겠습니다
def __init__(self): | ||
pass | ||
|
||
@abstractmethod |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
혹시... 알고리즘을 사용하는 예시가 없을까요? pass라서 뭔가 확 와닿지 않네요... 어떨 때 사용할만한지.. ㅜ0ㅜ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 추상클래스 입니다. 이 추상클래스로부터 상속 받고, 이 추상클래스에 있는 추상메소드들을 오버라이드 하여 실제 내용 부분이 들어가는 구현클래스를 만듭니다. 이 코드에서는 ConcreteClass
가 그 예시가 되겠네요. 보통 추상클래스는 인터페이스로 사용되며 추상메소드 안에는 그 어떤 로직도 들어가지 않고 위와같이 pass
또는 return null;
등 의미 없는 코드가 들어갑니다. 그저 이 AbstractClass
라는 클래스로 operation1
과 operation2
라는 기능을 사용할 수 있다는 정도만 의미합니다.
밑에 있는 컴파일러 코드로 예시를 들어보면
Compiler
클래스는 추상클래스로 collectSource
, compileToObject
, run
이라는 기능을 사용할 수 있는데, 추상클래스에는 그 알고리즘을 구현해놓지 않았습니다. 안드로이드 컴파일러인지, iOS 컴파일러인지에 따라서 각 메소드에 들어갈 내용들이 다르겠죠. 그래서 iOS 컴파일러 클래스를 생성할 때 Compiler
추상클래스를 상속받고, 메소드를 오버라이드하여 iOS 컴파일러만의 메소드를 만드는 겁니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어렵지만.. 상세하게 알려주셔서 감사합니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ㅎㅎ 잘보았습니다 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
음 자바의 인터페이스나 추상 클래스 같은 개념이군요~ 평소에도 많이 사용하는 형식인데 이게 이런 패턴으로 존재하는지는 처음 알았네요 ^^
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
내용이 엄청나게 어려운건 아닌데
템플릿 메소드 패턴.....!!!!! 하니까 즈레 겁먹게 되네요
그래도 재밌게 보았습니다 👯
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
오...탬플릿 메소드라는것 처음들어봅니다!!! 신기하네요 감사합닌다~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
상속을 이용한 디자인 패턴이네요 !!
파이썬 코드를 보면서 신기한 부분도 있고 재밌었습니다 !! 좋은 글 감사합니다 ~!
**2. 전략 패턴과 템플릿 패턴의 차이점은 무엇인가?** | ||
두 패턴 모두 알고리즘을 캡슐화한다. 하지만 템플릿 패턴은 상속을 사용하는 반면에 전략 패턴은 컴포지션을 사용한다. 템플릿 메소드 패턴은 서브클래스를 사용해 컴파일 단계에서 알고리즘을 선택하지만 전략 패턴은 런타임에 선택한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
컴포지션이라는 것이 객체지향론에서 어떤 의미인가요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
클래스 내부에 다른 클래스의 객체들을 포함시키는 방법으로 여러 클래스들을 조립해 새로운 클래스를 만들어내는 것을 컴포지션이라고 합니다. 상속을 'is a' 관계라고 한다면 컴포지션은 'has a' 관계라고 볼 수 있습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아하 !! 설명 감사합니다 ㅎㅎㅎ
변경 사항
Point of discussion
자주 묻는 질문에 등장하는 전략 패턴에 대해서는 추후에 업로드 하도록 하겠습니다.
다른 분이 해주셔도 좋습니다ㅎㅎ
Reference
파이썬 디자인 패턴 2/e (Chetan Giridhar)