티스토리 뷰

반응형

Strategy Pattern - 디자인 패턴
 
참고서적 :  Head First Design Pattern
소스코드 다운로드 : http://www.wickedlysmart.com/headfirstdesignpatterns/code.html
 
자바의 디자인 패턴을 좀 정리해 두려고 합니다.
나중에 찾아보기 편하려구요~~ 앞으로 이 부분을 공부하면서 연재할 계획입니다.!!
 
패턴 정의 #1 - Strategy Pattern
스트래티지 패턴 (Strategy Pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
 
디자인 원칙
1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.
2. 구현이 아닌 인터페이스에 맞춰 프로그래밍한다.
3. 상속보다는 구성을 활용한다.
 
음.. 설명이 좀 어렵습니다.
 
특정 클래스(클라이언트)의 여러 가지 행동(알고리즘군)들이 존재할 수 있다면, 이러한 행동들을 인터페이스로 캡슐화해서..
특정 클래스에 인스턴스로 가지고 사용한다는 겁니다.
그렇게 함으로써 특정 클래스와 행동들이 서로 독립적이라는 것이죠..
 
더 여러워 지나요?
다음 그림을 살펴보면 이해가 될 겁니다.
 


 
클라이언트에서는 나는 행동과 꽥꽥거리는 행동 모두에 대해서 캡슐화된 알고리즘군을 활용합니다.
각 행동의 집합을 알고리즘군으로 생각합니다.
이런 행동 "알고리즘"은 바뀔 수 있습니다.
 
fly() 메소드는 모든 Duck 클래스마다 다를 수 있습니다.
먼저 fly() 메소드를 Duck 클래스의 abstract 메소드로 두고 상속으로 처리할 수도 있습니다.
 
하지만, 그럴 경우 같은 동작을 하는 fly() 메소드도 모든 하위 클래스에서 구현되어야 합니다.
소스 코드의 중복이 발생할 수 있는 것이죠~~
 
그래서 FlyBehavior 인터페이스를 만들고 Duck 클래스의 인스턴스로 사용하는 겁니다.  
 
performFly() 메소드를 통해 fly()메소드의 수행을 FlyBehavior 인터페이스로 넘겨주는 거죠~
setFlyBehavior() 메소드를 통해 동적으로 flyBehavior를 지정할 수 있도록 해주기도 합니다.
 
이거는 정리하는 차원이라 간단하게 합니다. ^^
그럼.. 좋은 하루 되세요~~ From 미니
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/02   »
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
글 보관함