📌 Call By Value
💡 값에 의한 호출
함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경이 되지 않는다.
- 함수가 호출될 떄, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
- 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달하고, 전달한 인자는 함수 안에서 지역적으로 사용되기 떄문에 local value 속성을 가진다.
void func(int n){
n = 20;
}
void main() {
int n = 10;
func(n);
printf("%d", n);
}
10
📌 Call By Reference
💡 참조에 의한 호출
함수 안에서 인자 값이 변경되면, 인자로 전달된 객체의 값도 변경된다.
- 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.
- 함수 안에서 인자 값이 변경되면 전달된 객체의 값도 변경된다.
void func(int *n){
*n = 20;
}
void main(){
int n = 10;
func(&n);
printf("%d", n);
}
20
📌 Java의 함수 호출 방식
- 항상 Call By Value로 값을 넘긴다.
- C, C++과 같이 변수의 주소 값 자체를 가져올 방법이 없으며, 이를 넘길 수 있는 방법 또한 없다.
- reference type (참조 자료형)을 넘길 시에는 해당 객체의 주소값을 복사형 이를 가지고 사용한다.
- 원본 객체의 프로퍼티까지는 접근이 가능하지만, 원본 객체 자체를 변경할 수는 없다. ( = 원본 객체 속의 값들을 변경할 수는 있지만, 메모리에 올라가있는 객체 자체를 다른 객체로 변경할 수 없다.)