티스토리 뷰

반응형

인터페이스

  • 기능에 대한 선언과 구현의 분리를 말한다.
  • 기능을 통로라고 말할 수 있다.
  • Ex.
//AInterface
public interface AInterface {
    public void funcA();
}


//AInterfaceImpl
public class AInterfaceImpl implements AInterface {
    @Override
    public void funcA() {
        System.out.println("AAA");
    }
}


//Main
public static void main(String [] args) {
  AInterface aInterface = new AInterfaceImpl();
  aInterface.funcA();
}
  • 선언(AInterface)과 구현(AInterfaceImpl)을 분리하여 Main에서 활용하는 것을 확인할 수 있다.

 

 

델리게이트

  • 기능적인 부분을 다른 이에게 위임하여 사용한다.
  • Ex.
public class AObj {

    AInterface aInterface;

    public AObj(AInterface aInterface) {
        this.aInterface = aInterface;
    }

    public void funcAA() {

        //1. 일반적인 기능 구현
        //System.out.println("AAA");
        //System.out.println("AAA");

        //2. 기능 구현을 위임
        aInterface.funcA();
        aInterface.funcA();
    }
}


//Main
public static void main(String []) {
  AObj aObj = new AObj(aInterface);
  aObj.funcAA();
}
  • AObj.funcAA()는 1번처럼 기능을 직접 구현하여 사용하는 것이 아닌 2번처럼 AInterface에게 기능 구현을 위임하여 사용한다.

 

 

스트레티지 패턴

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

image

 

 

요구사항에 맞춰 코드를 작성해보자

요구 사항

  • 게임에서 캐릭터와 무기를 구현해보자.
    • 무기는 두 가지 종류 : 칼, 검
//접근점
public interface Weapon {
    public void attack();
}

//접근점의 구현체 1.
public class Sword implements Weapon{
    @Override
    public void attack() {
        System.out.println("검 공격");
    }
}

//접근점의 구현체 2.
public class Knife implements Weapon{
    @Override
    public void attack() {
        System.out.println("칼 공격");
    }
}

//클라이언트
public class GameCharacter {
    //접근점
    private Weapon weapon;

    //교환 가능
    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }

    public void attack() {
        if(weapon == null) {
            System.out.println("맨손 공격");
        } else {
            //델리게이트
            weapon.attack();
        }
    }
}

//Main
public static void main(String [] args) {
  GameCharacter gameCharacter = new GameCharacter();
  gameCharacter.attack();

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

  gameCharacter.setWeapon(new Sword());
  gameCharacter.attack();
}

image

 

 

유지보수

  • 무기 중에 도끼를 추가하자.
//접근점 구현체 추가
public class Ax implements Weapon {
    @Override
    public void attack() {
        System.out.println("도끼 공격");
    }
}

//Main
public static void main(String [] args) {
  gameCharacter.setWeapon(new Ax());
  gameCharacter.attack();
}
  • 무기를 추가하는데 게임 캐릭터나 Main의 다른 기능을 건드리지 않고 효율적인 추가가 가능하다.

 

다이어그램

https://www.youtube.com/watch?v=UEjsbd3IZvA&list=PLsoscMhnRc7pPsRHmgN4M8tqUdWZzkpxY

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함