# 파라미터로 객체 전달
#### CODE <a class='btn btn-default' href='/codes/19930'>Link</a>
```
public class HeroTest {
public static void main(String[] args) {
// 객체 생성
Hero thor = new Hero("토르", 150); // thor -> {"토르", 150}
Hero thanos = new Hero("타노스", 160); // thanos -> {"타노스", 160}
// 토르의 펀치 -> 타노스
thor.punch(thanos);
/* 1. 코드를 추가하여 펀치를 주고 받으세요. */
thanos.punch(thor);
thanos.punch(thor);
}
}
class Hero {
// 필드
String name;
int hp;
// 생성자
Hero(String s, int i) {
name = s;
hp = i;
}
// 메소드
void punch(Hero enemy) {
**//펀치 메소드의 인수로 Hero enemy 처럼 쓰는 이유가 무엇일까요?
thanos의 펀치의 경우..thanos.punch(thor) 일때 thor를 punch 메소드의 인수로 받으면 되니까 punch(enemy) 이런 생각이 들어서요...**
// 때린 주체 객체
System.out.printf("[%s]의 펀치!! ", name);
// 맞은 객체
System.out.printf("%s의 HP: %d -> ", enemy.name, enemy.hp);
```
#### INPUT
```
```
#### OUPUT
```
/root/var/tmp/2020_03_17_03_53_06_17cf3993/HeroTest.java:33: error: reached end of file while parsing
System.out.printf("%s의 HP: %d -> ", enemy.name, enemy.hp);
^
1 error
```
sehongpark님의 답변
# 펀치 대상 객체 정보가 필요하기 때문입니다.
주석으로 달아놓은 내용이 맞습니다.
대상의 체력을 감소시켜야하기에, 메소드 호출시 그 대상 정보를 전달하여, 파라미터로 받아와야합니다. 이를 위해 `Hero enemy` 가 사용되었습니다.
## PS.
펀치를 수행하는 주체가, 타노스 객체 또는 토르 객체일 수 있습니다. 상황 마다 달라질 수 있기에, 파라미터의 이름 또한 주체 객체를 기준으로 enemy(적군)이라는 이름으로 명명하면 좋습니다.
decsh님의 답변
답변 감사드립니다. 추가로 질문 드리자면, punch(Hero, enemy)도 punch(Heroenemy)도 아닌 punch(Hero enemy)처럼 띄어쓰기를 하여
작성하는 이유가 궁금합니다. 파라미터를 하나만 받는것인데 위처럼 Hero enemy로 작성하는 이유가 있을까요?
sehongpark님의 답변
# 파라미터
파라미터란, 입력 변수 즉, 메소드 실행에 필요한 입력 값을 저장하는 변수입니다.
## punch(enemy)로 사용할 수 없는 이유
파라미터로 선언 시, 반드시 앞쪽에 타입을 명시해야 합니다. 따라서, 아래의 코드는 컴파일 에러가 발생합니다.
```
void punch(enemy) { // ERROR: enemy 변수의 타입을 알수 없음!
}
```
## 파라미터의 선언
파라미터는 메소드 정의 시, 소괄호 안에 타입과 변수명을 적어 작성합니다. 아래는 2개의 int 값을 입력 받는 메소드 예입니다.
```
int add(int a, int b) {
...
}
```
아래는 Hero 타입의 객체를 입력 받는, 메소드의 예입니다.
```
void punch(Hero enemy) {
...
}
```
## PS.
제가 첫 질문을 잘못 이해했네요 ㅎ_ㅎ; 이번 답변은 잘 이해했길 바라며..!
## 참고자료
---
+ 메소드 호출과 정의 - https://cloudstudying.kr/lectures/81
decsh님의 답변
답변 감사드립니다! type을 보는 순간 '아!' 라는 생각이 들었어요.
Hero가 타입이라는 것을 깜빡했습니다.
친절한 답변 감사드립니다!
강의 너무 잘 보고있습니다!!~!~!~
진행해온 사항에 대한 복습개념의 중간고사 문제라던지(문제만 나오고 답은 나중에 별도 영상으로 나오는...)
추가적인 문제가 더 있으면 연습하기 좋을 것같습니다(반복은 계속 하고있는데 어느 순간 그냥 무의식적으로 외워서 하게 되더라고요 ㅠ)