매개변수(parameter) : 함수(function)를 선언할 때, 괄호 안에 적는 변수
인자(argument) : 매개변수에 입력하는 값
즉, 매개변수와 인자의 차이는 실제로 메모리에 할당되어 있느냐, 없느냐의 차이
예시
public int sum(int a, int b){ // int a와 int b는 매개변수(parameter)
return a+b;
}
public static void main(String[] agrs){
sum(3, 5); // 3과 5는 인자(argument)
}
값에 의한 호출(값 복사)
call by value 예시
public void method_1(){
int a = 10;
int b = 5;
System.out.println("method_2 호출 전 : a = "+ a + ", b = "+ b);
method_2(a, b);
System.out.println("method_2 호출 후 : a = "+ a + ", b = "+ b);
}
public void method_2(int a, int b){
a = 20;
b = 10;
System.out.println("method_2 내부 : a = "+ a + ", b = "+ b);
}
method_2 호출 전 : a = 10, b = 5
method_2 내부 : a = 20, b = 10
method_2 호출 후 : a = 10, b = 5
class Person{
int age;
String name;
public Person(int age, String name){
this.age = age;
this.name = name;
}
}
public void method_1(){
Person person = new Person(25, "Nick");
System.out.println("method_2 호출 전 : age = "+ person.age + ", name = "+ person.name);
method_2(pserson);
System.out.println("method_2 호출 후 : age = "+ person.age + ", name = "+ person.name);
}
public void method_2(Person person){
person.age = 22;
person.name = "Ahn";
System.out.println("method_2 내부 : age = "+ person.age + ", name = "+ person.name);
}
method_2 호출 전 : age = 25, name = Nick
method_2 내부 : age = 22, name = Ahn
method_2 호출 후 : age = 22, name = Ahn