본문 바로가기
캠퍼스/Java

41. 동적 바인딩 (3)

by Sylar 2022. 8. 4.

오우..

 

혹시 이사진이 기억나는가 ?

 

질럿과 드라군이 싸우던 환경에 리버를 추가하여 고생했던 기억이 있다.

 

이걸 저번 포스팅에서 배운것으로 바꿔보겠다.

 

유닛 이라는 부모클래스를 만들고 나머지 드라군 질럿 리버를 모두 자식클래스로 만들었다.

 

이름도 한글로 개명한 모습이다.

 

첫번째로 셋다 공통적으로 가지고 있는 값을 보면 String타입의 name 과 int타입의 power,hp가 있다.

 

질럿이 드라군을 공격한다는 가정으로 계산을 해본다면 필요한 값은 

 

드라군의 name과 hp, 질럿의 power값이 필요할 것 같다.

 

그리고 hp는 값의 변화가 생겼으니 바뀐값을 받아야 할것 같다.

 

class 유닛{
	String getName( ) {return "";}
	int getPower() {return 0;}
	int getHp() {return 0;}
	void setHp(int hp) {}
}

유닛에 공통적인 부분을 적어주었다.

 

getName처럼 변수명을 적은 이유는 값을 받아내기 위한 메서드임으로 get으로 적었다. (약속임)

setHp만 있는 이유는 hp의 값만 바뀌기 때문에 하나만 잡은모습.

 

라면의 가격과 값을 받아내는 것에서 한가지만 늘어난 모습이다.

이제 유닛들에게 각각 적용시켜 보자.

 

class Zealot extends 유닛{
	String name = "질럿";
	int power = 5;
	int hp = 100;
	String getName( ) {return name;}
	int getPower() {return power;}
	int getHp() {return hp;}
	void setHp(int hp) {
	 this.hp = hp;
	}	
}
class Dragoon extends 유닛{
	String name = "드라군";
	int power = 10;
	int hp = 100;
	String getName( ) {return name;}
	int getPower() {return power;}
	int getHp() {return hp;}
	void setHp(int hp) {
	 this.hp = hp;
	}	
}
class River extends 유닛{
	String name = "리버";
	int power = 50;
	int hp = 100;
	String getName( ) {return name;}
	int getPower() {return power;}
	int getHp() {return hp;}
	void setHp(int hp) {
	 this.hp = hp;
	}

자 이제 서로 정보를 주고받을 수 있게 되었으니 싸움을 시켜보자.

 

static void attack(유닛 u1, 유닛 u2) {
		u1.setHp(u1.getHp()-u2.getPower());
		System.out.println(u1.getName()+"의 남은 체력 : "+u1.getHp());
	}

설명을 해보자면 static으로 떠있는 attack이라는 메서드에 유닛 u1,u2를 부른다.

즉 부모클래스 아래에 있고, 지명당한 애들끼리 싸운다는 이야기.

 

u1은 피격당하고 u2는 공격한다.

 

u1.setHp(u1.getHp()-u2.getPower()); => 받은 hp값에서 power의 값을 뺀 후 그 값을 setHp로 보내겠다.

 

setHp에는 그 값을 해당 메서드에 저장하게 설정되어 있다.

 

이제 싸움을 시켜보자

 

아주 잘싸운다.

 

체력들도 맞은만큼 깍여서 저장되는 모습도 보인다.

 

이렇게 프로그래밍 하는 것을 느슨한 프로그래밍이라고 한다.

 

느슨한 프로그래밍의 장점은 새로운 클래스들을 추가하기 쉽다는 장점이 있다.

 

바로 추가시켜 보자.

 

 

다크템플러를 추가했다. 이친구도 모두와 싸움을 시켜보자.

 

 

메서드와 attack값만 추가했을 뿐인데 정상적으로 작동하는 모습이다.

 

이걸 느슨한 프로그래밍 이라고 한다.

 

만약 맨위의 사진처럼 그대로 했으면 엄청나게 고생했을 것이다.

 

 

 

 

'캠퍼스 > Java' 카테고리의 다른 글

43.라이브러리 (1)  (0) 2022.08.06
42. 컨버팅  (0) 2022.08.06
40. 동적 바인딩 (2)  (0) 2022.08.04
39.동적 바인딩 (1)  (0) 2022.08.04
38.상속  (0) 2022.08.03