본문 바로가기
Java/기본 개념 및 클래스

[Java] 44. 다형성 활용: 스타크래프트 소스 코드 수정하기

글: Song hyun 2024. 4. 24.
728x90
반응형

함께 보면 좋을 글:

(1) Java로 스타크래프트 모델링하기 (객체 지향 패러다임 응용)

https://whatsthatsound.tistory.com/61

(2) Java로 스타크래프트 모델링하기 (상속, 메서드 오버로딩 개념 응용)

https://whatsthatsound.tistory.com/86

 

*다형성이란?

https://whatsthatsound.tistory.com/89


 

앞서 작성하고, 수정한 "스타크래프트 모델링" 소스 코드를 다형성을 활용해 발전시켜보고자 한다.

Java 프로그래밍의 특징인 다형성을 활용하면, 기존의 소스 코드들을 더욱 간단히 작성할 수 있다.

 

먼저 질럿/마린/저글링의 부모 클래스인 유닛을 살펴보면, 중복되는 메서드를 찾아볼 수 있다.

바로 attack 메서드이다.

 

기존의 attack 메서드는 공격하는 대상에 따라, 입력받는 참조 변수의 형태가 달랐다. (Zealot/Marine/Zergling)

하지만 Unit이라는 부모 클래스에 질럿/마린/저글링이 상속된 지금은,

상속/다형성이라는 개념을 이용해 더욱 간단히 코드를 작성할 수 있다.

 

해답은 간단한데, 파라미터에 입력받는 변수의 값을 "Unit"형으로 바꾸기만 하면 된다.

 

package starcraft.ver04;
/**
 * 접근 제어 지시자
 * public
 * protected
 * default
 * private
 */
public class Unit {
	
	protected String name;
	protected int power;
	protected int hp;

	public Unit(String name) {
		this.name=name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getPower() {
		return power;
	}

	public void setPower(int power) {
		this.power = power;
	}

	public int getHp() {
		return hp;
	}

	public void setHp(int hp) {
		this.hp = hp;
	}
	
	public void showInfo() {
		System.out.println("=====상태창=====");
		System.out.println(" 이름: "+this.name);
		System.out.println(" 공격력: "+this.power);
		System.out.println(" 생명력: "+this.hp);
	}
	
	public void beAttacked(int power) {
		if (hp <= 0) {
			System.out.println("[" + this.name + "]은 이미 사망했습니다.");
			hp = 0;
			return;
		}
		hp -= power;
	}
	
	public void attack(Unit u) {
		System.out.println("[" + this.name + "]가 "+u.name+"를 공격합니다.");
		beAttacked(this.power);}
}

 

728x90
반응형