본문 바로가기

Design Patterns

Strategy Pattern ① 상속과 구현의 문제점

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
먼저 스타크래프트를 활용하여 Strategy Pattern 으로 가는 예제를 만들어 볼까 합니다. 일단 참고하고 있는 책은 Head First, Design Pattern 이며, 앞으로도 이 책으로 공부를 해 나가려고 합니다.

사용자 삽입 이미지

위와 같이 상속을 사용하여 만들어 보았습니다. 테란 종족은 보여지거나, 움직이거나, 공격하거나, 멈추는 4가지의 공통적인 메소드들이 존재하고 각 유닛별로 보여지는게 틀리기 때문에 Display() 메소드를 오버라이드 하여 각각 고유의 형태를 보여지게 하였습니다.

하지만 문제가 발생했습니다 -_-;; 메딕은 공격을 못해야 정상인데 공격을 하게 되고, 더 문제가 되는건 SupplyDepot은 건물이기 때문에 움직이거나 공격하거나, 멈추거나 할 수 없는데 말이죠.. 따라서 상속을 하는것이 결코 좋지 못하다는 걸 알게 됐습니다.


사용자 삽입 이미지
그래서 위와같이 고치고, 움직이고, 공격할수 있는 인터페이스를 사용하였습니다. 이전에 가지고 있던 메딕이 공격을 한다거나.. 서플라이디팟이 움직인다거나 이상한 현상을 없앴습니다. 그런데요.. 또 나쁜점이 발견이 됐습니다. 이전 상속구조에서는 상위 클래스의 메소드를 재사용하는 효과를 볼 수 있었는데, 인터페이스에 정의된 메소드는 그냥 빈껍데기 뿐이잖아요??;; 그래서 결국은 구현하는 클래스의 메소드를 하나하나 다 구현해 줘야 하는 단점이 있습니다.

아~~ 그럼 대체 어떻게 해야되나요 ㅠㅠ 그래서 패턴 북을 뚫어져라 쳐다보았는데 이런 말이 써있습니다.

디자인 원칙 : 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.


다시말하면 바뀌는 부분만 따로 캡슐화시키면, 나중에 바뀌지 않는 부분에는 영향을 미치지 않은채로 그부분만 고치거나 확장할 수 있다는 의미합니다. 이렇게 하면 코드를 변경하는 과정에서 의도하지 않은 일이 일어나는 것을 줄이면서 시스템의 유연성을 향상시킬수 있겠죠..

다음편에서 하나씩 하나씩 고쳐가면서 해보도록하겠습니다 ~_~