# 성기사와 마검사 ## 문제 클라우드스터딩 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 } ``` 클래스 다이어그램을 참고하여 **출력 예**와 같은 결과를 얻으시오. ## 클래스 다이어그램 ![Imgur](https://i.imgur.com/StfRkpv.png) ## 출력 예 성기사 우서와 마검사 아서스가 각각 자신에게 버프를 시전! ``` [우서] 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); } } ```
관련 강의로 이동

코드: java 1.8

public class Main { public static void main(String[] args) { } }

입력

정답이 궁금하다면? 코드를 제출해보세요!