Call by
~ 란 메서드를 호출 할 때를 의미한다. 따라서 Call by Value,Reference는 함수 호출 할 때, 파라미터를 넘기는 방식에대한 차이를 의미한다.
이는 메서드 호출 시 값을 복사해서 값 자체를 넘기는 방식을 의미한다.
method(int n);
public void method(int n){
.....
}
위에서 메서드를 호출할 때 넣어주는 변수 n과, 실제로 함수 내에서 돌아가는 변수 n은 엄밀히 말하면 다른 변수이다.
새로운 함수가 호출 되면, 자바에서는 스택 메모리에 프레임 형태로 새로 만들어지며, 변수가 복사가 된다.
따라서 자바는 Call by Value
로 동작하는 것이다.
이는 메서드를 호출할 때 참조를 직접하는 것이다.
즉 위에서 보여준 함수를 호출 하는 변수와, 실제 돌아가는 변수가 같은 참조를 하기 때문에, 실제 돌아가는 함수에서 수정시 원본에 영향을 끼칠 수 밖에 없다.
일반적으로 c언어에서 동작하는 포인터와 같다.
위 두가지의 차이를 확실히 알기 위해서는 함수 내에서 새로운 객체를 생성해보면 된다.
Call by Value로 동작하는 자바에서 새로운 함수로 넘어가는 객체에 새롭게 객체를 할당해준다면, 함수에서 나왔을 때 이는 반영되어있지 않는다.
그러나 c언어의 포인터는 함수 밖으로 나와도 새로 할당된 값이 잘 반영된다.
이것이 Call by Reference과 Call by Value의 큰 차이라고 보면 된다.