[Java] 전략패턴

설명이 부족할 수 있습니다

전략패턴이란?

전략 패턴은 자바의 다형성을 이용해 클라이언트(클래스)가 컨텍스트(인터페이스)를 통해 전략(구현체)를 바꿔가면서 쓰게 하는 개발 방식이다.
아래의 그림을 보면 이해가 쉬울 것이다.

SomeClass 가 Strategy 타입의 변수로 구현체인 StrategyA, StrategyB 를 참조할 수 있게 된다. SomeClass 는 필요에 따라 StrategyA 나 StrategyB 를 바꿔가며 쓸 수 있다.

리그오브레전드 ⚔

전략 패턴을 이용해 롤 챔피언들을 바꿔가며 써보겠다.
나의 주 챔이었던 오공, 베인, 이즈리얼을 구현해보자.

Champion 이라는 인터페이스와
Wukong, Vayne, Ezreal 이라는 구현체를 만들고
LOL에서 Champoin 의 전략(구현체) 를 바꿔가면서 써보자.

Champion interface

public interface Champion {
    void Q();
    void W();
    void E();
    void R();
}

Wukong class

public class Wukong implements Champion{
    @Override
    public void Q() {
        System.out.println("파쇄격");
    }

    @Override
    public void W() {
        System.out.println("분신 전사");
    }

    @Override
    public void E() {
        System.out.println("근두운 급습");
    }

    @Override
    public void R() {
        System.out.println("회전격");
    }
}

Vayne class

public class Vayne implements Champion{
    @Override
    public void Q() {
        System.out.println("구르기");
    }

    @Override
    public void W() {
        System.out.println("은화살");
    }

    @Override
    public void E() {
        System.out.println("선고");
    }

    @Override
    public void R() {
        System.out.println("결전의 시간");
    }
}

Ezreal class

public class Ezreal implements Champion{
    @Override
    public void Q() {
        System.out.println("신비한 화살");
    }

    @Override
    public void W() {
        System.out.println("정수의 흐름");
    }

    @Override
    public void E() {
        System.out.println("비전 이동");
    }

    @Override
    public void R() {
        System.out.println("정조준 일격");
    }
}

LOL class

public class LOL {
    public static void main(String[] args) {
        //오공 QWER
        Champion champ = new Wukong();

        champ.Q();
        champ.W();
        champ.E();
        champ.R();

        //결과)
        //파쇄격
        //분신 전사
        //근두운 급습
        //회전격
    }
}

다른 챔피언을 쓰고싶다면 new Wukong() 부분만 다른 구현체로 바꾸면 된다.
이렇게 공통적인 부분을 뽑아내 인터페이스로 일반화한다음
다형성을 이용해 필요할때 전략을 쉽게 바꿀 수 있다.

좋은 웹페이지 즐겨찾기