본문 바로가기

CS/DesignPattern

(DesignPattern) 전략 패턴

인터페이스란 무엇인가?

사전적 의미 : 키보드나 디스플레이 따위처럼 사람과 컴퓨터를 연결하는 장치

두 객체 간의 연결하는 접점을 인터페이스라고 한다.

 

JAVA 언어에서의 인터페이스

  •  기능에 대한 선언과 구현을 분리한다.
  • 기능을 사용하게하는 통로를 제공한다.
  • 기능 구현 시 해당 책임을 다른 객체에게 책임을 위임한다.

스트레티지 패턴이란?

여러 알고리즘에 대한 하나의 추성적인 접근점 (인터페이스) 을 만들어 접근 점에서 서로 교환 가능하는것이 가능하도록 하는 패턴

 

코드 구현

요구사항

  • 신작 게임에서 캐릭터와 무기를 구현해보자
  • 무기의 종류는 아래와 같이 두가지 종류가 존재한다.
    • Knife, Sword

 

접근점 (인터페이스 설정)

public interface Weapon {
    public void attack();
}

접근점을 구현하는 무기생성

public class Sword implements Weapon{
    @Override
    public void attack() {
        System.out.println("Sword Attack");
    }
}
public class Knife implements Weapon{
    @Override
    public void attack() {
        System.out.println("Knife Attack");
    }
}

캐릭터 생성 - 캐릭터는 무기를 고를 수 있는 접근점을 선언하고 해당 무기를 교환할 수 있어야하며 교환한 책임을 위임할 수 있어야 한다.

  • 접근점
  • 교환
  • 위임
public class GameCharacter {
    private Weapon weapon;

    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public void attack() {
        if (weapon == null) {
            System.out.println("맨손 공격");
        } else {
            //delegation
            weapon.attack();
        }

    }
}

호출

public class Main {
    public static void main(String[] args) {
        Character character = new Character();
        character.setWeapon(new Sword());
        character.attack();

        character.setWeapon(new Knife());
        character.attack();

        character.setWeapon(null);
        character.attack();
    }
}

실행결과


Code Link

https://github.com/mike6321/PURE_JAVA/tree/master/EffectiveStudy

 

mike6321/PURE_JAVA

Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.

github.com

References