▷ 이 설계방식은 새 로봇 추가하기에 좋음. 클래스 자체가 하나의 로봇을 모델링 하고 표현하기 때문! (변화의 단위=클래스)
* attack(), move() → 추상메소드 (이탤릭체)
문제점?
기존 로봇의 공격/이동 방법 수정하려면 어떤 변경 작업이 필요한가? 예로, 아톰이 날 순 없고 걷게만 만들고 싶다면? (= 공격 알고리즘 변경 해야함) 혹은 태권V 날게 하려면?
→ OCP 위반! (기존코드 변경시킴)
새로운 로봇 만들어 기존의 공격/이동 방법 추가/수정 하려면? 예로, 새로운 로봇으로 선가드 클래스를 만들어 태권V의 미사일 공격 기능 추가하려면?
→ 중복부분이 많기 때문에 변경사항이 생길 때 힘듦. 로봇 추가는 전혀 문제 없지만, 공격/이동 알고리즘 변경될 때 문제임. (각각 클래스로 모델링 된 것이 아니라, 클래스 내부에서 메소드 형태로 갖고 있어 기존 코드 영향 받음) → ‘이동/공격’ 을 클래스로 모델링 해야함
해결책? 무엇이 변화됐는지 찾은 후 이를 클래스로 캡슐화 하기!
공격/이동을 메소드가 아닌 하나의 클래스로! → 인터페이스로 묶기
→ 이동/공격 방법이 바뀌어도, 기존 코드에 영향 없음!
Strategy 패턴 : 스트래티지 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다.
전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다. 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔야 할 경우가 많이 발생하는데, 특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에 따라 공격이나 행동 방식을 바꾸고 싶을 때 스트래티지 패턴이 매우 유용하다.
'Study > Design Pattern' 카테고리의 다른 글
Observer Pattern (0) | 2021.11.15 |
---|---|
Command Pattern (0) | 2021.11.15 |
빌더 패턴 (0) | 2021.11.15 |
객체지향원리 (0) | 2021.11.15 |