# 리뷰: 마린과 메딕 #### 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) ```
## 변수의 선언은 항상 이름 앞에 타입이 위치해야 합니다. ``` // 변수 선언 형식 TYPE NAME // Marine 객체를 가리키는 변수 target 선언 예 Marine target ```
답변 감사합니다. 근데 왜 타입이 Marine이 되는건가요 ? 추가설명 조금만 더 부탁드립니다
## 코드의 흐름 코드의 흐름이 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 + ")"); }