- 4번 부터 스트래티지 패턴(Strategy Pattern) 설명입니다. -

 

 

 

 

 

 

 

 

1. 개념 설명

인터페이스 개념 이해

       - 기능에 대한 선언과 구현 분리(선언 따로, 다른 곳에서 구현 따로 하는거)

       - 기능을 사용 통로

 

 

델리게이트 개녕 이해

      - 특정 객체의 기능을 사용하기 위해 다른 객체의 기능을 호출하는 것을 델리게이트라고 한다.

      - "델리게이트" = "위임한다"

 

 

전략 패턴 개념 이해

Strategy Pattern

     - 다양한 여러가지의 알고리즘을  하나의 접근접을 통해 구현을 하고 그 알고리즘을 변경 가능하도록 하는 거다.

ex) 4번 말하는거임 -> "Weapon"이 접근접이 되고, setWeapon()이라는 함수를 통해서 교환 가능하도록 하는 패턴.

 

 

 

 

2. 인터페이스

"기능의 선언"과

"기능의 구현"을

분리할 수 있는 기능을 인터페이스가 하는 거다

 

1) 인터페이스 선언(interface) - 기능에 대한 선언

 

2) catimpl이 Func_Interface를 구현(implements) 한다 - 기능에 대한 구체적인 구현

 

3) 어떠한 기능을 호출하는 통로 -기능을 사용 하는 통로

인터페이스라는 것을 선언 해주고 -> Func_Interface hccat

할당 해주고 -> new catimpl();

 

 

 

 

 

3. 델리게이트

위임하다 = 떠넘기다

델리게이트는 두 객체 간의 관계에서 델리게이트 한다고 하거든요.

(어떤 기능을 구현할 때 그 책임을 다른 객체로 떠넘기는거)

=(다른 객체 기능을 빌려서 사용 하는거)

 

그래서 이것을 "위임한다"라고 한다.

설명 ->

Test클래스에서 Func_Interface인터페이스의 funcA메소드(기능)를 사용하기위해서 

Func_Interface인터페이스의 기능을 위임해서 구현한 것이다.

(어떤 기능을 구현할 때, 그 책임을 다른 객체로 떠넘기는거)

=(다른 객체 기능을 빌려서 사용하는 거)=위임한다

=위임해서 구현한것이다.

 

 

 

 

 

 

 

 

 

4. 스트레티지 패턴

1) 스트레티지 패턴이란?

스트래티지 패턴(Strategy pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

 

스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

 

상속을 이용한 간단한 동물의 행동을 호출하는 시스템에서 스트래티지 패턴(Strategy pattern)을 적용할 수도 있다.

 

 

1) 스트레티지 패턴이란?

- 여러가지 알고리즘의 추상적인 접근점(=인터페이스)을 만들어 그 접근점에서 서로 교환 가능(상호 교체 가능)하도록 하는 패턴.

 

- 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴

 

- 프로그램에서 전략을 실행할 때는 쉽게 전략을 바꿔줘야 할 필요가 있는 경우 많이 발생한다.

특히 게임 프로그래밍에서 게임 캐릭터가 자신이 처한 상황에서 따라 공격이나 행동하는 방식을 바꾸고 싶을 때 스트레티지 패턴은 융용하다.

 

- 즉, 임의의 동작이 객체에 영향을 받지 않고, 다양한 방식으로 구현될 수 있다. 객체는 단지 행동 객체 골라서 사용하는 입장일 뿐이다. 

 

 

 

 

 

 

 

2) 예

기본적인 스트레티지 패턴의 기본 설계 모양

설명1 ->

Strategy : 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다.

StrategyA,StrategyB,.. : 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스이다.

Client : 스트래티지 패턴을 이용하는 역할을 한다. 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter메서드를 제공한다.

설명2 -> 

전략(Strategy)을 사용하는 클라이언트(Client)가 있고

클라이언트(Client)는 전략(Strategy)을 소유하고 있다.

전략이 각각 StrategyA,StrategyB,..가 있다고 하며는,

setStrategy()라고하는 함수 같은 것을 통해서 

StrategyA를 셋팅할 수도 있고, StrategyB를 셋팅할 수도 있는 구조로 되어 있습니다.

 

 

 

 

 

 

 

3) 코드로 설명한다며는

- 사용예 -

무기라는 것은 어떤 알고리즘 일 것이다.

다양한 알고리즘을 무기라는 접합점에서 생각해보자.

무기로 할 수 있고, 으로 할 수도 있고, 여러가지 할 수 있을 것이다.

이게바로 "스트레티지 패턴"을 사용 할 수 있는 가장 기초적으로 볼 수 있는 예제이다.

 

설명->

추상적인 접근점 : "Weapon" 인터페이스가 되는 것이다

서로 교환 가능하도록 : GameCharacter의 setWeapon()메소드가 된다.(그러면 "Weapon" 무기를 아무거나 바꾸거나 사용 할 수 있다)

 

 

 

 

 

 

4) 도끼 추가 해보기

도끼클래스 만들고,

메인에서 캐릭터에다가 도끼 클래스 넣어주면 됨

 

 

 

 

 

 

 

5) 구현한 클래스 다이어그램