[Java] Call by value, Call by reference

파랑·2023년 11월 16일
0

Java

목록 보기
4/4
post-thumbnail

Call by value : 값에 의한 호출

함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달한다. 이때, 복사된 인자는 함수 안에서 지역적으로 사용되므로 local value 속성을 가진다.

즉, 함수 내에서 인자값이 변경되더라도, 외부 변수 값은 변경되지 않는다.

public static void main (String[] args) {
	int a = 10;
	int c = func(a);
	System.out.printf("a=%d, c=%d", a, c);
}

public static int func (int b) {
    b = 20;
    return b;
}
결과 : a=10, c=20

위 코드에서 func() 호출 시, 변수 a의 값을 복사해서 전달한다.
func() 내에서 b는 local value 속성을 가지기 때문에 값이 변경되어도 a의 값에는 영향을 주지 않는다.






Call by reference : 참조에 의한 호출

함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.

즉, 함수 내에서 인자값이 변경되면, 전달된 객체의 값도 변경된다.

#include <stdio.h>   

void func (int *a){
    *a = 20;
}

int main() {
    int a = 10;
    func(&a);
    printf("a=%d", a);
}
결과 : a=20

위 코드에서 func() 호출 시, a의 주소를 전달하고, func()에서 a를 직접 참조하여 값을 변경한다.






❗ 정리하기

Call by value Call by reference
전달되는 변수 값을 복사해서 함수 인자로 전달 변수의 주소를 함수 인자로 전달하여 직접 참조
원래의 값이 변경되지 않는다. (보존) 원래의 값이 변경된다.






C언어에서는 포인터를 통해 매개변수의 주소값을 넘겨 참조(Reference)할 수 있다.

하지만, JAVA의 경우 항상 Call by Value 이다.

reference type(참조 자료형)을 넘길 시에는 해당 객체의 주소값을 복사하여 이를 가지고 사용한다.

따라서, 원본 객체의 프로퍼티까지는 접근이 가능하나 원본 객체 자체를 변경할 수는 없다.










참고자료

0개의 댓글