JAVA 객체지향
디자인패턴
2018.08.07
Chapter 05 스트래티지 패턴
로봇 | 공격 | 이동 |
---|---|---|
태권V | 주먹 | 날 수 있다 |
아톰 | 미사일 | 걷기 |
로봇 만들기

로봇 만들기
문제점1
- 기존 로봇의 공격 or 이동 방법 수정 ?
- 아톰을 걷게 해줘
- 태권V를 날게 해줘
문제점1
- 기존 로봇의 공격 or 이동 방법 수정 ?
- 아톰을 걷게 해줘
- 태권V를 날게 해줘
해당 클래스의 move 함수를 직접 수정해야 한다
문제점1
- 기존 로봇의 공격 or 이동 방법 수정 ?
- 아톰을 걷게 해줘
- 태권V를 날게 해줘
OCP 위반 - 새로운 기능으로 변경하기 위해 기존 코드의 내용을 수정
해당 클래스의 move 함수를 직접 수정해야 한다
문제점1
- 기존 로봇의 공격 or 이동 방법 수정 ?
- 아톰을 걷게 해줘
- 태권V를 날게 해줘
OCP 위반 - 새로운 기능으로 변경하기 위해 기존 코드의 내용을 수정
해당 클래스의 move 함수를 직접 수정해야 한다
아톰도 걷고, 태권V도 걷고 - move 함수 중복
문제점2
- 새 로봇에 공격 or 이동 방법 추가 or 수정 ?
- 선가드를 추가해줘
문제점2
- 새 로봇에 공격 or 이동 방법 추가 or 수정 ?
- 선가드를 추가해줘

로봇 자체가 캡슐화 단위이므로새로운 로봇 추가는 용이
문제점2
- 새 로봇에 공격 or 이동 방법 추가 or 수정 ?
- 선가드를 추가해줘
- 태권V의 미사일 공격 기능을 추가해줘
문제점2
- 새 로봇에 공격 or 이동 방법 추가 or 수정 ?
- 선가드를 추가해줘
- 태권V의 미사일 공격 기능을 추가해줘
attack 메서드 중복 - 수정이 있을 때 마다 전부 찾아가며 수정해야 함
해결책
변화되는 것을 찾고, 이를 클래스로 캡슐화
해결책
로봇의 공격, 이동 방식을 캡슐화
변화되는 것을 찾고, 이를 클래스로 캡슐화
해결책
로봇의 공격, 이동 방식을 캡슐화
변화되는 것을 찾고, 이를 클래스로 캡슐화
- 코드 변경 없이 기존 기능을 제공 받아야 함
- 기존 공격, 이동 방식의 변경이 쉬워야 함
해결책
로봇의 공격, 이동 방식을 캡슐화
변화되는 것을 찾고, 이를 클래스로 캡슐화
- 코드 변경 없이 기존 기능을 제공 받아야 함
- 기존 공격, 이동 방식의 변경이 쉬워야 함

구체적인 동작은 은닉
개선된 설계

스트래티지 패턴
같은 문제를 해결하는 여러 알고리즘(방식)이 클래스별로 캡슐화되어 있고, 필요할 때 교체함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있게 하는 디자인 패턴
스트래티지 패턴 콜라보레이션

스트래티지 패턴 콜라보레이션

- Strategy : 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법 명시
- ConcreteStrategy1~3 : 패턴에서 명시한 알고리즘 구현한 클래스
- Context: 스트래티지 패턴을 이용하는 역할 수행, 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메서드 제공
스트래티지 패턴 특징
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
- 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
- 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
- 알고리즘 인터페이스를 정의하고 각 알고리즘들을 클래스별로 캡슐화하여 교체 가능하게 함
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
- 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
- 알고리즘 인터페이스를 정의하고 각 알고리즘들을 클래스별로 캡슐화하여 교체 가능하게 함
- 변경이 필요한 알고리즘을 인터페이스를 통해 외부로 분리, 구체적 알고리즘 클래스를 필요에 따라 바꿔 사용할 수 있게 함
스트래티지 패턴 특징
- 알고리즘을 교체할 수 있는 구조
- 동적으로 알고리즘을 교체할 수 있는 디자인 패턴
- 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조
- 알고리즘 인터페이스를 정의하고 각 알고리즘들을 클래스별로 캡슐화하여 교체 가능하게 함
- 변경이 필요한 알고리즘을 인터페이스를 통해 외부로 분리, 구체적 알고리즘 클래스를 필요에 따라 바꿔 사용할 수 있게 함
- 개방 폐쇄 원칙 실현에 가장 잘 맞는 패턴
JAVA 객체지향 디자인패턴 2018.08.07 Chapter 05 스트래티지 패턴
JAVA 객체 지향 디자인패턴 - 스트래티지 패턴
By Sungbin, Song
JAVA 객체 지향 디자인패턴 - 스트래티지 패턴
- 146