본문 바로가기
dev/JAVA

[JAVA] 매개변수(Parameter) , 인수(argument)

by dev_Step 2022. 5. 30.

코딩을 하면서 매개변수란 말과 인수란 말을 혼용하여 사용하는데 어떻게 다른지 한번 확인해 보자.

 

현재 옵션을 바꿀수 있는 Option()이라는 매서드를 보면 

Option() 안에 String color, String payMethod 를 넣을수 있는데

 

매개변수란 함수가 정의된  파라미터 String color, String payMethod  자체를 의미한다. 

즉 Option의 매개변수는 String 변수 2개가 들어간다는 것이고

 

그렇다면 인수란? Option이란 매서드를 사용할때 직접 넣는 데이터를 의미한다.

즉 현재 Option이라는 메서드를 사용하여 "Gray", "CheckCard" 를 넣었는데 이 2개 데이터값이 인수이다.

 

정리하자면

매개변수란 함수를 정의할때 ()안에 넣어야할 데이터의 자료형을 의미하고, 

인수란 정의된 함수를 사용할때 () 안에 들어가는 실질적인 값을 말한다.

( 내가 이해하기론.. 이렇게 이해했다... )

 

그렇다면 매개변수의 종류를 한번 알아보자

- 기본형 매개변수

   -> 말그대로 기본형 타입변수가 들어가며 실직적인 "값" 이들어간다.

- 참조형 매개변수 

   -> 매개변수로 기본형 타입이 아닌 사용자정의 타입이 들어가며, 값이 들어가는게 아니라 "주소값"이 전달된다.

 

 

1. 기본형 매개변수 (call by Value)

>> 현재 change()란 매서드의 매개변수로 기본형타입 변수 int 가 들어가있고,

주어진 값을 1000으로 바꾸는 코드로 되어 있다 해당 코드를 실행해 보자

change(int x) 매서드를 통해서 값을 변경시켰는데 v.x는 그대로 10으로 출력되었다. 그 이유를 그림으로 설명하겠다.

7. v.x  = 10; 으로 변경한 후에  println을 통해서  (Before change)v.x : 10 이 출력되고,

8.9.10 을 통해서 x = 1000; 으로 변경한 후에 change(x) : 1000 이 출력 된다

 

그다음 stack 영역에서 change() 함수가 종료되고 난 다음에 x 값은 사라지고

 

그후의 v.x는 원래 지정된 10값이 출력된다  (After change)v.x : 10

 

즉.... change(int x) 메서드에서 x 값은 v.x의 값인 10을 그대로 복사한 후에 x값을 변경한 후에 사라진 것이다.

매개변수 타입이 기본형 일경우.. 해당 값의 본래값 v.x에 영향을 미치지 못한다. 만약에 change(int x)의 

return 값을 v.x에 다시 넣어준다면 v.x의 값은 변경이 가능하다.

 

v.x = change(10);  의 경우가능,, change(10)의 return 값이 결국 x=1000이므로 v.x값에 1000을 다시 넣어줌.

 

 

2. 참조형 매개변수 (Call by Reference)

참조형 매개변수의 경우 매개변수로 기본형 타입이 아닌 사용자 정의 타입이 들어가게 된다. 즉 매개변수로

값이 들어가는게 아닌, 객체의 주소값이 주어진다는 의미이다.

 즉 change(Value v) 에서 매개변수로 참조변수 v를 넣어주기 때문에 값이 들어가는게 아니라

 

x101이라는  value인스턴스의 주소가 들어가게 되었다. 따라서

x.x 로 값에 접근하여 변경하면... HEAP 영역에 있는 value의 x값이 변경되게 된다.

 

따라서 change(Value v) 매서드가 실행후 없어지더래도 v.x 값은 1000으로 변경된 상태로 유지

되게 된다.

'dev > JAVA' 카테고리의 다른 글

[JAVA] 매개변수의 다형성  (0) 2022.05.30
[JAVA] 다형성 / 참조변수간의 형변환  (0) 2022.05.30
[JAVA] 클래스  (0) 2022.05.30
[JAVA] 변수  (0) 2022.05.30
[JAVA] 객체 생성  (0) 2022.05.29