# 리뷰: 마린과 메딕
#### CODE <a class='btn btn-default' href='/codes/44663'>Link</a>
```
public class Starcraft {
public static void main (String[] args) {
// 객체 생성
Marine ma = new Marine("레이너", 80);
Medic me = new Medic("모랄레스", 60, 60);
// 마린의 스팀팩!
ma.stimpack();
// 메딕의 힐!
me.heal(ma);
}
}
class Marine {
String name;
int hp;
Marine(String m, int h){
name = m;
hp = h;
}
void stimpack(){
System.out.print("[" + name + "]의 스팀팩! HP: " + hp + " -> ");
hp -= 10;
System.out.println(hp);
}
}
class Medic {
String name;
int hp;
int mp;
Medic(String m, int h, int n){
name = m;
hp = h;
mp = n;
}
void heal(Marine target){
System.out.print("[" + name + "]의 치유! => " + "[" + target.name + "] HP(" + target.hp + " -> ");
target.hp += 10;
System.out.println(target.hp + ")");
}
}
/*void heal(Marine target) 이 부분에서 target 얘가 me.heal(ma); 여기서 ma 와 대응된다고 생각하는데요,
Marine 요 부분은 Marine ma = new Marine(“레이너”, 80); 이 부분에서 앞에있는 Marine 얘와 대응되는 건가요?
왜 하필 target앞에 Marine 이 있어야 하는지 모르겠습니다. target의 앞엔 클래스명이 와야 오류가 나지 않는건가요?
*/
#### INPUT
```
```
#### OUPUT
```
[레이너]의 스팀팩! HP: 80 -> 70
[모랄레스]의 치유! => [레이너] HP(70 -> 80)
```
sehongpark님의 답변
## 변수의 선언은
항상 이름 앞에 타입이 위치해야 합니다.
```
// 변수 선언 형식
TYPE NAME
// Marine 객체를 가리키는 변수 target 선언 예
Marine target
```
junsens1님의 답변
답변 감사합니다. 근데 왜 타입이 Marine이 되는건가요 ? 추가설명 조금만 더 부탁드립니다
goodlife1359님의 답변
## 코드의 흐름
코드의 흐름이 Marine 객체가 스팀팩을 사용하여 hp가 낮아지면 Mediic 객체가 Marine을 heal 시켜주는것 입니다.
heal 메서드를 호출하는 주체는 Medic 객체이고 heal 시켜주는 대상은 Marine 객체입니다.
따라서 , heal 메서드의 파라미터로 Marine 객체를 전달해야 Medic 객체가 Marine 객체를 heal 시켜줄수 있습니다.
// 메딕의 힐!
me.heal(ma);
void heal(Marine target){
System.out.print("[" + name + "]의 치유! => " + "[" + target.name + "] HP(" + target.hp + " -> ");
target.hp += 10;
System.out.println(target.hp + ")");
}