#2 Battle 리팩토링

지우·2025년 12월 29일

java2

목록 보기
1/13
post-thumbnail

코드 상태 분석

Weapon 패키지 내의 상속 문제

  • flute, gun, wand가 weapon 클래스의 상속을 받지 않은 상태
    -> 무기로서의 기능을 전혀 사용할 수 없음

  • 오버라이딩 필요
    -> attackable의 attack()을 weapon 클래스 또는 자식 클래스에서 오버라이딩 해야함

수정할 부분 ( before / after )

Weapon.java

public abstract class  Weapon implements Attackable {

		public String name;
		public int power;

		public Weapon(String name, int power) {
			this.name = name;
			this.power = power;
		}
}
public abstract class Weapon implements Attackable {

		public String name;
		public int power;

		public Weapon(String name, int power) {
			this.name = name;
			this.power = power;
		}
		
		@Override
		public void attack(Player attacker, Player target) {
			System.out.println(attacker.name + " (이)가 " + this.name + "(으)로 공격합니다");
			int newHp = target.getHp() - this.power;
			target.setHp(newHp);
			System.out.println(target.name + " 데미지 " + this.power + " 감소 !");
		}
}

flute.java / gun.java / wand.java

public class flute extends Weapon{
	public flute() {
		super("flute", 20);
	}
}
public class gun extends Weapon{
	public gun() {
		super("gun", 40);
	}
}
public class wand extends Weapon{
	public wand() {
		super("wand", 50);
	}
}

  • flute, gun, wand 클래스가 모두 Weapon을 상속하도록 extends
  • 자식 클래스들에서 super을 통해 name, power 필드 초기화 되도록 함
  • Weapon 클래스에서 오버라이드해서 attack 메서드 구현
    -> 이 메서드는 flute, gun, wand 모두 공통으로 사용하기 때문에 Weapon 에서 한번에 해결 (불필요한 중복을 많이 생성하지 말자)

추가적으로...

Main을 더 건드려 보고 싶었는데 못했음
Player 선택이 하드코딩 되어있어 scanner을 통해 직접 입력받아 선택하도록 해보려고 했는데 너무 많은 수정이 필요할 것 같아 중단함..
Main과 Player에서 Weapon 관련 메소드도 더 바꿀 수 있는지 찾아보면 좋을 것 같다

0개의 댓글