본문 바로가기
Java 강의

자바 스트래티지 패턴 Strategy 패턴

by 자유코딩 2017. 9. 24.

인터페이스 : 키보드나 디스플레이 처럼 사람과 컴퓨터를 연결하는 장치

 

-> 두 객체를 연결해주는 접점 같은 장치

 

자바에서의 인터페이스 : 기능에 대한 선언과 구현 분리 , 기능을 사용하는 통로로 사용 할 수 있다.

 

기능에 대한 선언과 구현을 분리 할 수 있는 기능을 제공한다.

 

어떠한 기능을 호출할 수 있는 통로가 된다.

 

인터페이스의 사용은 보통 다음과 같습니다.

 

1
2
3
4
5
6
7
package Strategy;
 
public interface Ainterface {
    public void funcA();//기능을 선언한다.
 
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
package Strategy;
 
public class AinterfaceImpl implements Ainterface{
 
    @Override
    public void funcA() {//기능을 구현한다.
        System.out.println("AAA");
        // TODO Auto-generated method stub
        
    }
}
cs

 

 

1
2
3
4
5
6
7
8
package Strategy;
 
public class Main {
    public static void main(String[] args) {
        Ainterface ainterface = new AinterfaceImpl();
        ainterface.funcA();//ainterface는 funcA를 사용하는 통로가 된다.
    }
}
cs

 

델리게이트 개념

 

델리게이트 = 위임하다.

 

두 객체 간의 관계에서 델리게이트 한다고 한다.

 

특정 객체의 기능을 사용하기 위해서 다른 객체의 기능을 호출하는 것.

 

다음 코드를 보자.

 

1
2
3
4
5
6
package Strategy;
 
public interface Ainterface {
    public void funcA();//기능을 선언한다.
 
}
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
package Strategy;
 
public class AinterfaceImpl implements Ainterface{
 
    @Override
    public void funcA() {//기능을 구현한다.
        System.out.println("AAA");
        // TODO Auto-generated method stub
        
    }
}
cs

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package Strategy;
 
public class AObj {
    Ainterface ainterface;//funcA에 대해 필요한 기능이 Ainterface에 있다고 하자.
    public AObj() {
        ainterface = new AinterfaceImpl();
    }
    public void funcAA() {
        ainterface.funcA();//System.out.println("AAA);와 같은 기능을 한다.
        ainterface.funcA();//System.out.println("AAA);와 같은 기능을 한다.
//        System.out.println("AAA"); //이렇게 기능을 직접 명시하지 않는다.
//        System.out.println("AAA"); 
        //델리게이트의 개념
        //funcAA 메소드의 몸체 부분에 ~~ 기능이 필요하다. 개발해달라.  라는 내용을 명시한다.

        //즉, 호출을 진행한다.

    }
}

cs

다시 델리게이트의 정의를 보자.

 

소스코드에서는 특정객체 AinterfaceImpl 의 기능을 사용하기 위해서 다른객체 Ainterface를 호출했다.

 

1
2
3
4
5
6
7
8
9
10
11
package Strategy;
 
public class Main {
    public static void main(String[] args) {
        Ainterface ainterface = new AinterfaceImpl();
        ainterface.funcA();//ainterface는 funcA를 사용하는 통로가 된다.
        
        AObj name = new AObj();
        name.funcAA();//델리게이트 개념을 적용하고 메인에서 함수 호출
    }
}
cs

 

 

Strategy 패턴의 개념

 

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

 

Strategy 패턴의 기본 설계

 

 

 

 

Strategy 패턴 연습문제

 

요구 사항

 

신작 게임에서 캐릭터와 무기를 구현해보세요.

 

무기는 두 가지 종류가 있습니다. : 칼 , 검

 

캐릭터는 무기를 칼도 쓸 수 있고 검도 쓸 수 있습니다.

 

 

더보기를 클릭하시면 코드를 보실 수 있습니다.

 

 

 

 

 

 

추가된 요구사항

 

무기 중에 도끼를 추가해주세요.

 

 

 

 

 

 

 

 

 

 

●코드 구조

 

 

댓글