블로그 이미지
개발자의 조건은 어떤것도아닌 3일은 기본으로 날샐수있는 체력과 3일을 안씻어도 찝찝합을 못느끼는 것과 라면을 먹어도 탈없는 위입니다.
DefineJAVA

공지사항

최근에 받은 트랙백

글 보관함

calendar

      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      

Strategy Pattern #1

2007/02/09 17:51 | Posted by DefineJAVA
크리에이티브 커먼즈 라이선스
Creative Commons License

Strategy Pattern



스트래티지 패턴이란 각각의 기능을 하는 클래스를 캡슐화하여 이것을 교환하여 사용할 수 있도록 만드는 역활을 한다.
즉 현재 사용하고 있는 기능(클래스)를 동적으로 변경하여 적용 시킬 수 있다.

간단하게 예를 들자면 로봇 게임이 있다고 하자. (갑자기 http://www.defineyou.net/ 에서 본 로롯코드가 생각나서....)
이 로봇게임에는 여러가지 종류의 로봇이 나온다. 이 여러 종류의 로봇을 제작하기 위해서는 Robot 이라는 클래스를 상속 받아서 제작한다.

사용자 삽입 이미지
Robot Class에는 다음과 같은 기능이 있다.
 turn(); 돌고 도는 메소드
 move(); 이동을 하는 메소드
 attack(); 공격을 하는 메소드

각 로봇에는 display(); 라는 모양을 뿌려주는 메소드가 존재한다.

로봇게임 개발자는 로봇게임을 더 재밋게 발전 시키기 위해서 모든 로봇에 특수기술인 "날아다니는 기능"을 넣을려고 한다.
이 기능은 로봇이 하늘에서도 싸울 수 있는 기능을 하게 제작하여야한다.

당신이라면 이 문제를 어떻게 해결하겠는가?

사용자 삽입 이미지

쉽게 생각해 본다면 Robot이라는 상위클래스(슈퍼클래스)에 ability(); 라는 메소드를 만들어 날아다니는 기능을 구현하면 될것이다.
모든 로봇들은 Robot Class를 확장(상속)하여 사용하기 때문에 이렇게 한다면 아주 쉽게 해결 할 수가 있다.

로봇게임 개발자는 또 다시 생각을 해 보았다.
"태권V 로봇은 너무 강하니깐 하늘을 날아다니는 기능을 없애야 겠어"
자 모든 로봇들이 상속을 받은 Robot클레스에서는 ability();라는 메소드가 구현되어 있다.

어떤가? 이제 머리 아프게 생각을 해볼때가 됐다. Robot이라는 클래스를 상속 받기 때문에 Robot의 기능을 모두 가지고 있다.
당신이라면 이 문제를 어떻게 해결하겠는가?

ability(); 라는 메소드를 Overloading 하면 된다고 생각하는 사람도 많이 있을 것이다.
Overloading으로 이 문제 해결될 수 있지만 만약 이 프로그램이 발전되어 로봇의 종류가 100가지가 넘고 특수기능의 종류가 많아 졌다고 생각해보자!

개발자는 정말 안구에 습기차도록 노가다를 해야 될 것이다.

어떻게 하면 이 문제를 해결 할 수 있을까? 조금은 생각해 보는것이 좋을 꺼 같다.
다음차 블로그에 이 문제에 대한 해결책을 올리도록 하겠다.
그 안에 열심히 생각을 해 바란다.^ㅡ^

'Define Designing > Design Patterns' 카테고리의 다른 글

Strategy Pattern #2  (0) 2007/02/13
Strategy Pattern #1  (0) 2007/02/09
이전 1 ... 48 49 50 51 52 53 54 55 56 다음