반응형
call by value와 call by reference는 함수 호출 시 매개변수를 전달하는 방식이다. 함수 호출 과정에서 함수의 매개변수가 전달될 때 원본 데이터를 복사하는 것인지, 원본 데이터의 참조를 전달한 것인지를 구분하는데 사용한다. 함수 내부에서 원본 데이터를 변경할 수 있는지의 차이가 있다.
call by value
call by value는 값을 복사해서 함수로 전달하는 방식이다. 함수는 전달받은 값의 복사본을 사용하며 함수 내부에서 값을 변경하더라도 호출한 쪽의 원본 데이터에는 영향을 미치지 않는다.
call by reference
call by reference는 값이 저장된 메모리의 주소를 전달하는 방식이다. 함수는 전달받은 주소를 통해 원본 데이터를 직접 참조하기 때문에, 함수 내부에서 값을 변경하면 호출한 쪽의 원본 데이터에도 영향을 미칩니다.
자바에서는?
자바는 기본 데이터 타입, 참조 타입 모두 동일하게 함수 호출 시 Call by value 방식을 사용한다. 객체가 전달될 때 객체의 참조값이 복사되어 전달되기 때문에 call by reference로 이해할 수 있다.
class SomeObject {
int value;
}
public class Example {
public static void modify(SomeObject obj) {
obj.value = 10;
}
public static void reassign(SomeObject obj) {
obj = new MyObject();
obj.value = 20;
}
public static void main(String[] args) {
SomeObject someObject = new SomeObject();
someObject.value = 5;
modify(someObject);
System.out.println(someObject.value); // 10
reassign(someObject);
System.out.println(someObject.value); // 10
}
}
- modify 메서드 내부에서 객체의 속성을 value를 변경하면 호출한 쪽에 그 변경이 반영된다.
- reassign 메서드 내부에서는 참조 변수에 새로운 값을 할당했지만 호출한 쪽에 영향을 미치지 않았다.
반응형