행동패턴 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
43번째 줄: 43번째 줄:
  
 
=== 중재자패턴 ===  
 
=== 중재자패턴 ===  
[[중재자패턴]](mediator pattern)은 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴이다. 중재자는 객체들이 직접 서로 참조하지 않도록 함으로써 객체들 간의 느슨한 연결을 촉진시키며 객체들의 상호작용을 독립적으로 다양화시킬 수 있도록 해준다.
+
[[중재자패턴]](mediator)은 한 집합에 속해있는 객체들의 상호 작용을 캡슐화하는 객체를 정의하는 패턴이다. 중재자는 객체들이 직접 서로 참조하지 않도록 함으로써 객체들 간의 느슨한 연결을 촉진시키며 객체들의 상호작용을 독립적으로 다양화시킬 수 있도록 해준다.
  
 
[[파일:mediator_pattern.png]]
 
[[파일:mediator_pattern.png]]
78번째 줄: 78번째 줄:
 
이렇게 다양한 로직들을 적용하기 위해 유닛부분을 손 봐야 한다. 유닛종류에는 전투기, 헬리콥터 두 종류인데 이 상위 추상클래스인 Unit 을 선언한다. Unit에는 display 와 같이 유닛을 그리는 공통적인 메소드가 들어있고, 각각 유닛에 맞는 미사일과 폭탄을 선언하기 위해 인터페이스 형식의 variable 을 선언한다.
 
이렇게 다양한 로직들을 적용하기 위해 유닛부분을 손 봐야 한다. 유닛종류에는 전투기, 헬리콥터 두 종류인데 이 상위 추상클래스인 Unit 을 선언한다. Unit에는 display 와 같이 유닛을 그리는 공통적인 메소드가 들어있고, 각각 유닛에 맞는 미사일과 폭탄을 선언하기 위해 인터페이스 형식의 variable 을 선언한다.
  
실질적으로 Unit 클래스를 상속받은 전투기(Fighter) 클래스와 헬리콥터(Helicopter) 클래스에서는 생성자에 각각에 맞는 미사일과 폭탄을 정의하면 된다.<ref name='strategy_pattern'>JAMINS,〈[https://flowarc.tistory.com/entry/1-Strategy-Pattern 디자인패턴 - 스트레티지 패턴(Strategy Pattern)]〉, 2015-07-09</ref>
+
실질적으로 Unit 클래스를 상속받은 전투기(Fighter) 클래스와 헬리콥터(Helicopter) 클래스에서는 생성자에 각각에 맞는 미사일과 폭탄을 정의하면 된다.
  
=== 템플릿메소드패턴 ===
+
=== 템플릿패턴 ===
[[템플릿메소드패턴]](template method pattern)은 객체의 연산에서 [[알고리즘]]의 뼈대만 정의하고, 나머지는 서브클래스에서 이루어지게 하는 패턴이다. 템플릿 패턴은 알고리즘의 구조는 변경하지 않고 알고리즘의 각 단계를 서브클래스에서 재정의하게 된다.<br>
+
[[템플릿패턴]](template pattern)은 객체의 연산에서 [[알고리즘]]의 뼈대만 정의하고, 나머지는 서브클래스에서 이루어지게 하는 패턴이다. 템플릿 패턴은 알고리즘의 구조는 변경하지 않고 알고리즘의 각 단계를 서브클래스에서 재정의하게 된다.
[[파일:template_method_pattern.png]]
 
* AbstractClass
 
:ConcreteClass 가 상속받아야 할 추상 클래스이다.
 
:templateMethod() 에 클라이언트가 사용할 로직을 담는다.
 
:각 로직의 요소는 method1(), method2() 에 담기며, 이는 ConcreteClass 에서 구현한다.
 
* ConcreteClass
 
:AbstractClass 를 상속받아 필요한 로직 요소 method() 를 필요에 맞게 구현한다.
 
<ref name='template_pattern'>흠시,〈[https://dailyheumsi.tistory.com/210 행동 패턴, 템플릿메쏘드(Template method)]〉, 2020-03-21</ref>
 
  
 
=== 비지터패턴 ===
 
=== 비지터패턴 ===
[[비지터패턴]](visitor pattern)은 객체구조를 이루는 원소에 대해 수행할 연산을 표현한다. 방문자는 연산에 적용할 원소의 클래스를 변경하지 않고 새로운 연산을 재정의할 수 있다.<br>
+
[[비지터패턴]](visitor pattern)은 객체구조를 이루는 원소에 대해 수행할 연산을 표현한다. 방문자는 연산에 적용할 원소의 클래스를 변경하지 않고 새로운 연산을 재정의할 수 있다.
[[파일:visitor_pattern.jpg]]
 
* Visitor
 
:방문자 클래스의 인터페이스이다.
 
:visit(Element)을 공용 인터페이스로 쓴다. Element는 방문 공간이다.
 
* Element
 
:방문 공간 클래스의 인터페이스이다.
 
:accept(Vistor)를 공용 인터페이스로 쓴다. Visitor는 방문자다.
 
:내부적으로 Vistor.visit(this)를 호출한다.
 
* ConcreteVisitor
 
:Visitor를 구체적으로 구현한 클래스이다.
 
* ConcreteElement
 
:Element를 구체적으로 구현한 클래스이다.
 
<ref name='visitor_pattern'>흠시,〈[https://dailyheumsi.tistory.com/216 행동 패턴, 방문자(Visitor)]〉, 2020-04-11</ref>
 
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
* 도킨샤, 〈[https://blog.naver.com/anciid/221763490051 Chapter 1.디자인 패턴 소개 ]〉, 2020-01-07
+
*  
* 귤덕, 〈[https://sexycoder.tistory.com/105 Chain of Responsibility Pattern (책임 사슬 패턴) ]〉, 2018-03-02
 
* 자바캔, 〈[https://javacan.tistory.com/entry/6 커맨드패턴과 그 구현 ]〉
 
* IDEO, 〈[https://m.blog.naver.com/PostView.nhn?blogId=2feelus&logNo=220664898533&proxyReferer=https:%2F%2Fwww.google.com%2F 인터프리터 패턴 - 자바 디자인 패턴과 JDK 예제 ]〉, 2016-03-25
 
* Lkt_Programmer, 〈[https://lktprogrammer.tistory.com/40 08 반복자 패턴(Iterator Pattern) ]〉, 2017-09-24
 
* Crocus, 〈[https://www.crocus.co.kr/1542 08 중재자 패턴(Mediator Pattern) ]〉, 2019-07-07
 
* JAMINS, 〈[https://flowarc.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4Observer-Pattern 08 디자인 패턴 - 옵저버 패턴 ]〉, 2016-01-25
 
* TevQabs, 〈[https://always-intern.tistory.com/9 08 디자인 패턴 - 상태 패턴(State Pattern) ]〉, 2019-02-15
 
* JAMINS,〈[https://flowarc.tistory.com/entry/1-Strategy-Pattern 디자인패턴 - 스트레티지 패턴(Strategy Pattern)]〉, 2015-07-09
 
* 흠시,〈[https://dailyheumsi.tistory.com/210 행동 패턴, 템플릿메쏘드(Template method)]〉, 2020-03-21
 
* 흠시,〈[https://dailyheumsi.tistory.com/216 행동 패턴, 방문자(Visitor)]〉, 2020-04-11
 
  
 
== 같이 보기 ==
 
== 같이 보기 ==

해시넷에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 해시넷:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)