# 리뷰: 마린과 메딕 스팀팩 메소드 ( hp -10감소) 가 heal 메소드 (마린 **hp -10감소유지** -> hp +10 증가)로 이어지는 이유가 뭘까요? 메소드안에서 일어난 일은 공유 안되는줄 알았는데말이죠.. #### CODE <a class='btn btn-default' href='/codes/80551'>Link</a> ``` public class Starcraft { public static void main (String[] args) { // 객체 생성 Unit marine = new Unit("레이너",80,0); Unit medic = new Unit("모랄레스",60,60); // 마린의 스팀팩! marine.stimpack(); // 메딕의 힐! medic.heal(marine); } } class Unit { String name; int hp; int mp; Unit(String name, int hp, int mp){ this.name = name; this.hp = hp; this.mp = mp; } void stimpack(){ System.out.printf("[%s]의 스팀팩! HP: %d -> ", name, hp); hp -= 10; System.out.printf("%d\n", hp); } void heal(Unit target){ System.out.printf("[%s]의 치유! => [%s] HP(%d -> ", name, target.name, target.hp); target.hp += 10; System.out.printf("%d)", target.hp); } } ``` #### INPUT ``` ``` #### OUPUT ``` [레이너]의 스팀팩! HP: 80 -> 70 [모랄레스]의 치유! => [레이너] HP(70 -> 80) ```
## 메인 메소드에서 마린이 스팀팩을 시전 후, 메딕이 힐을 했기 때문입니다 ``` // 마린의 스팀팩! marine.stimpack(); // 메딕의 힐! medic.heal(marine); ``` (질문을 잘 이해한건지 모르겠다능)
오... 호출후 객체의 HP에도 영향을 끼치나보군요
## 네, 맞습니다. 아마도 메소드 스코프와 클래스 스코프의 개념이 헷갈린 듯 한데요. 메소드는 다른 메소드에 영향을 주지 않지만, 객체를 변경한 경우, 객체의 값은 그대로 유지 됩니다. ### TMI: 스택과 힙 메모리 객체는 힙(heap) 메모리에 존재하여 객체를 없애기 전까지는 그 값들이 계속 유지 됩니다. 반면 메소드는 스택(stack) 메모리에서 동작하는데 스택 메모리는 메소드 종료와 동시에 해제되어 사라집니다.
오호 .. TMI 좋군요.. 스택과 힙 이렇게 CS지식을 알아갑니당 ~