on
[Java] Call by value & Call by reference
[Java] Call by value & Call by reference
call by value : 값에 의한 호출
함수가 호출될 때, 메모리 공간에서는 함수를 위한 별도의 임시 공간이 생성된다 (함수 종료 시 사라짐)
call by value는 함수 호출 시 인자로 전달되는 변수 값을 복사해서 함수 인자로 전달하는데, 이 때 그 인자는 함수 안에서 지역적으로 사용된다 (local value)
=> 함수 안에서 인자 값이 변경되더라도 외부 변수 값은 변경되지 않는다.
call by reference : 참조에 의한 호출
call by reference는 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.
=> 함수 안에서 인자 값이 변경되면, 인자로 전달된 객체의 값도 변경된다.
Java 함수 호출 방식
자바에서는, 항상 call by value 방식이 사용된다.
왜? C/C++처럼 변수의 주소값 자체를 가져오고 넘기는 방법 자체가 없다.
reference type을 넘길 때 해당 객체의 주소값을 복사하여 이를 사용한다. 따라서 원본 객체의 property까지는 접근 가능하나, 원본 객체 자체를 변경할 수는 없다.
call by value: 데이터 값을 복사해서 함수로 전달하기 때문에, 원본의 데이터가 변경될 가능성이없다.
하지만 인자를 넘겨줄 때마다 새로 메모리 공간을 할당해야 한다.
call by reference: 메모리 공간을 할당해 줄 필요는 없지만, 원본 값이 변경될 위험이 있다.
from http://gokong.tistory.com/24 by ccl(A) rewrite - 2021-10-10 14:01:24