문제제기
- 우리가 1장에서 만들었던 게임에 대해 다시 말해보자, 1장에서 우리는 Strategy Pattern을 써서, Class 별로 무기를 사용하는 행위(Attack)을 구현했엇다.
- Attack Strategy를 구현한 코드가 아래처럼 되어있다고 가정해보자,
public class AxeAttack implements AttackBehavior{
String[] available = {"knight","mknight"};
@Override
public void attack(String className) throws Exception {
if(Arrays.stream(available).anyMatch(className::equals)) {
System.out.println("도끼 공격이다!!!");
} else {
throw new Exception("your name is " + className);
}
}
}
- 위 코드처럼 knight 클래스와 Macgic knight (마검사) 만 axe를 쓸 수 있도록 코딩되어있다.
public class Wizard extends Person{
public Wizard(AttackBehavior attack) {
this.className = "wizard";
this.attackBehav = attack;
}
}
- Wizard 클래스가 Axe를 쓰려고 하면 어떻게 될까?
- 위와같이 오류가 날 것이다. 그러면 어떻게 이 상황을 해결할 수 있을까?
어댑터 패턴 개요
- 위 문제를 Adapter 패턴을 통해 우리는 해결해 볼 수 있다.
-일단 어댑터 패턴이 무엇인지부터 살펴보면, 말그대로 중간에 어댑터(돼지코)를 둬서, 원래의 Object를 유럽플러그에서도 사용 할 수있게 만드는 것이다.