# 성기사와 마검사
## 문제
클라우드스터딩 RPG 게임에서, `기사`는 `탱커`의 역할을 수행한다.
```
interface Tanker {
public void increaseArmor(); // 아머 +5
public void increaseHp(); // 체력 +100
}
```
추후 기사는 성기사와 마검사로 2차 전직이 가능하다. `성기사`는 `힐러`의 역할을, `마검사`의 경우 `마법사`의 역할을 추가로 부여 받는다.
```
interface Healer {
public void healingAura (); // 초당 체력회복 +10
public void holyArmor(); // 데미지 감소 -10
}
interface Sorcerer {
public void fireArmor(); // 주변적 초당 데미지 +10
public void thunderBlade(); // 공격시 추가 데미지 +10
}
```
클래스 다이어그램을 참고하여 **출력 예**와 같은 결과를 얻으시오.
## 클래스 다이어그램

## 출력 예
성기사 우서와 마검사 아서스가 각각 자신에게 버프를 시전!
```
[우서] increaseHp() 시전!
체력이 +100 증가합니다.
[우서] increaseArmor() 시전!
아머가 +5 증가합니다.
[우서] healingAura() 시전!
초당 체력회복이 +10 증가합니다.
[우서] holyArmor() 시전!
데미지를 -10 덜 받습니다.
[아서스] increaseHp() 시전!
체력이 +100 증가합니다.
[아서스] increaseArmor() 시전!
아머가 +5 증가합니다.
[아서스] fireArmor() 시전!
주변 적에게 초당 +10의 데미지를 줍니다.
[아서스] thunderBlade() 시전!
매 공격시 +10의 추가 데미지를 줍니다.
```
## 뼈대코드
```
public class Main {
public static void main(String[] args) {
// 두 영웅 생성
Knight uther = new HolyKnight("우서", 200, 10);
Knight arthas = new MagicKnight("아서스", 150, 8);
// 우서: 기사 버프
uther.increaseHp();
uther.increaseArmor();
// 우서: 성기사 버프
HolyKnight holyUther = (HolyKnight) uther;
holyUther.healingAura();
holyUther.holyArmor();
// 아서스: 기사 버프
arthas.increaseHp();
arthas.increaseArmor();
// 아서스: 마검사 버프
MagicKnight magicArthas = (MagicKnight) arthas;
magicArthas.fireArmor();
magicArthas.thunderBlade();
}
}
interface Tanker {
public void increaseHp(); // 체력 +100
public void increaseArmor(); // 아머 +5
}
interface Healer {
public void healingAura (); // 초당 체력회복 +10
public void holyArmor(); // 데미지 감소 -10
}
interface Sorcerer {
public void fireArmor(); // 주변적 초당 데미지 +10
public void thunderBlade(); // 공격시 추가 데미지 +10
}
class Knight implements Tanker {
protected String name;
protected int hp;
protected int armor;
public Knight(String name, int hp, int armor) {
this.name = name;
this.hp = hp;
this.armor = armor;
}
public void increaseArmor() {
System.out.printf("[%s] increaseArmor() 시전!\n", name);
System.out.printf("\t아머가 +5 증가합니다.\n");
armor += 5;
}
public void increaseHp() {
System.out.printf("[%s] increaseHp() 시전!\n", name);
System.out.printf("\t체력이 +100 증가합니다.\n");
hp += 100;
}
}
class HolyKnight extends Knight {
public HolyKnight(String name, int hp, int armor){
super(name, hp, armor);
}
}
class MagicKnight extends Knight {
public MagicKnight(String name, int hp, int armor){
super(name, hp, armor);
}
}
```