본문 바로가기
Develop

전략 패턴이란?

by jaeyoungb 2022. 7. 29.

전략 패턴 ( Strategy Pattern)

 

= 정책 패턴 ( Policy Pattern )

 

객체가 행할 수 있는 것들을 전략으로 구성해놓고 사용한다.

 

행위를 직접 수정하지 않고, 전략으로 구성해놓은 ( = 캡슐화한 알고리즘 ) 전략 패턴만 수정하면 된다.

 

다음은 슈퍼 마리오를 통한 간단한 전략 패턴의 한 예시이다.

 

package strategy;

interface JumpStrategy {
    void jump();
}

class Jump implements JumpStrategy {
    @Override
    public void jump() {
        System.out.println("조금 높게 점프합니다.");
    }
}

class DoubleJump implements JumpStrategy {
    @Override
    public void jump() {
        System.out.println("매우 높게 점프합니다.");
    }
}

interface ChangeStrategy {
    void change();
}

class BeSmaller implements ChangeStrategy {
    @Override
    public void change() {
        System.out.println("몸집이 지금보다 작아집니다.");
    }
}

class BeBigger implements ChangeStrategy {
    @Override
    public void change() {
        System.out.println("몸집이 지금보다 커집니다.");
    }
}

class SuperMario {
    private JumpStrategy jumpStrategy;
    private ChangeStrategy changeStrategy;

    public SuperMario(JumpStrategy jumpStrategy, ChangeStrategy changeStrategy) {
        this.jumpStrategy = jumpStrategy;
        this.changeStrategy = changeStrategy;
    }

    public void jump() {
        jumpStrategy.jump();
    }

    public void change() {
        changeStrategy.change();
    }

}
public class StrategyTest {

    public static void main(String[] args) {
        SuperMario superMario = new SuperMario(new DoubleJump(), new BeBigger());

        superMario.jump();
        superMario.change();
    }
}

 

점프 전략과 변화 전략의 인터페이스를 각각 만들었다.

 

그리고, 각각의 전략에 대해 일어날 수 있는 경우의 전략들을 구현하였다.

 

행위 수정 시에 전략 부분만 수정하면 되기에 수정에 용이한 장점이 있다.

'Develop' 카테고리의 다른 글

컴퓨터와 프로그래밍  (0) 2022.08.22
Verification 과 Validation  (0) 2022.08.18
Reverse&Forward Engineer  (0) 2022.07.28
Naming Convention  (0) 2022.07.26
라이브러리 / 프레임워크  (0) 2022.07.25