결론
- 전략패턴 : 한 번 인스턴스 생성하고 난 뒤, 상태가 거의 바뀌지 않을 때 사용
- 상태패턴 : 한 번 인스턴스 생성하고 난 뒤, 상태가 빈번하게 바뀔 때 사용
디자인패턴
- (소프트웨어) 디자인 + (공통적으로 마주치는 문제를 해결하는 방법의) 패턴
1. 전략패턴
- 각각의 알고리즘군을 교환이 가능하도록 별도로 정의하고 각 캡슐화한 후 서로 교환해서 사용
- 구조
- 장점
- 코드 중복 방지
- 확장성 및 알고리즘 변경 용이
예시
- 오리 종류 (한번 정하면 잘 바뀌지 않음)
- 날 수 있음
- 날 수 없음
- 수영할 수 있음
- 수영할 수 없음
- 인터페이스 (해당 예시는 자동차)
public interface CarMoveBehavior {
public void action();
}
- 인터페이스 Impl
class UpBehavior implements CarMoveBehavior{
@Override public void action() {
System.out.println("Up!");
}
}
class DownBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Down!");
}
}
class LeftBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Left!");
}
}
class RightBehavior implements CarMoveBehavior{
@Override public void action(){
System.out.println("Right!");
}
}
- 인터페이스 사용 클래스
public class Car {
private CarMoveBehavior carMoveBehavior;
public Car(CarMoveBehavior carMoveBehavior) {
this.carMoveBehavior = carMoveBehavior;
}
public void move(){
carMoveBehavior.action();
}
public void setMoveBehavior(CarMoveBehavior carMoveBehavior)
{
this.carMoveBehavior = carMoveBehavior;
}
}
- main
public class Main {
public static void main(String[] args) {
System.out.println("=====Java Strategy Pattern=====");
//Up
Car car1 = new Car(new UpBehavior());
car1.move();
//Down
Car car2 = new Car(new DownBehavior());
car2.move();
//Left
car2.setMoveBehavior(new LeftBehavior());
car2.move();
//Right
car2.setMoveBehavior(new RightBehavior());
car2.move();
}
}
2. 상태패턴
- 객체 자신의 내부 상태에 따라 행위를 변경하도록 하는 패턴
- 객체의 상태에 따라 달라질 때, Enum으로 정의해야 함
예시(마리오)
- 상태에 따라 다른 행위를 반환
장점
- 상태에 따른 행동을 국소화하며 서로 다른 상태에 대한 행동을 별도의 객체로 관리함
- 새로운 상태가 추가되더라도 Context 코드가 받는 영향이 적음
- 상태전이를 명확하게 만듦
- 상태에 따른 동작을 구현한 코드를 수정하기 쉬움
'공부 > Java' 카테고리의 다른 글
SpringBoot에 원하는 오류페이지로 설정하기 (0) | 2022.05.06 |
---|---|
[JAVA] 한번에 두 개 이상 테스트하기 (0) | 2022.04.30 |
[JAVA] 코드 순서 (0) | 2022.04.03 |
정적(static) 메소드 써도 될까? (0) | 2022.04.02 |
[우아한테크코스] 페어프로그래밍 Git (0) | 2022.04.02 |
댓글