주소를 전달하는 방식
값을 전달하는 방식
JAVA의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (기본 자료형/ 참조 자료형) 함수 호출 방식이 달라짐!
public class SwapTest {
public static void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a + " " + b);
swap(a, b);
System.out.println(a + " " + b);
}
}
기본 자료형 a,b는 Call by Value로 동작하기 때문에 Swap을 해도 값이 제대로 바뀌지 않는다.
swap이라는 메서드에서는 값을 복사하여 새로운 지역변수에 저장한다. main의 변수 a,b를 사용하는 것이 아니라 자신이 새롭게 만든 지역 변수에 main의 변수이름과 값을 복사해서 사용하므로 swap되지 않는다.
class Person{
int age;
String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
}
public void method_test(){
Person person=new Person(12,"Nick");
System.out.println("Before Call : age =" + person.age+" name : "+person.name);
method_2(person);
System.out.println("After Call : age =" + person.age+" name : "+person.name);
}
public void method_2(Person person){
person.age=22;
person.name="Ann";
System.out.println("age =" + person.age+" name : "+person.name);
}
Class는 참조 타입(Heap Memory영역에 생성된 객체의 주소값을 참조)이다. method_test에서 method_2로 넘겨준 건 Person의 주소값이고 method_test가 가지고 있는 주소값과 동일하므로 객체의 상태를 수정하면 같이 수정된다.