[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