# 리얼 격투 게임 java에서 정적 메소드 안에서는 일반(non-static) 멤버 변수, 일반 메소드를 호출할 수 없는 것으로 알고 있는데 이 문제에서 fight() 메소드 안에서 punch() 메소드와 hp 멤버 변수를 불러와서 사용하고 있는건 fight() 메소드가 정적 메소드라고 할 지라도 Hero 클래스 객체를 파라미터 변수로 가지고 있기 때문인가요? (Hero a, Hero b) #### CODE <a class='btn btn-default' href='/codes/52028'>Link</a> ``` public class Main { public static void main (String[] args) { Hero leona = new Hero("레오나", 30); Hero arthas = new Hero("아서스", 30); Hero.fight(leona, arthas); } } class Hero { String name; int hp; public Hero(String n, int h) { this.name = n; this.hp = h; } public void punch(Hero target) { System.out.printf("[%s]의 펀치\n", this.name); target.hp -= 10; System.out.printf("\t%s: %d/30\n", target.name, target.hp); } public static void fight(Hero a, Hero b) { while(a.hp > 0 && b.hp > 0) { if (Math.random() < 0.5) a.punch(b); else b.punch(a); } } } ``` #### INPUT ``` ``` #### OUPUT ``` [레오나]의 펀치 아서스: 20/30 [레오나]의 펀치 아서스: 10/30 [아서스]의 펀치 레오나: 20/30 [레오나]의 펀치 아서스: 0/30 ```
### 정적 메소드 안에서는 this 키워드를 사용할 수 없습니다. (주체 객체가 없기 때문) 따라서, this를 사용(또는 생략)한 인스턴스 변수와 인스턴스 메소드를 호출 할 수 없죠. this가 아닌 다른 레퍼런스 변수로의 객체 활용은 가능합니다. 질문주신 fight() 메소드는 this가 아닌 a와 b를 사용해 객체를 활용하므로 각 변수에 연결된 객체의 인스턴스 변수와 메소드를 사용할 수 있습니다.