Call By Value, Call By Reference

megaseunghan·2021년 12월 28일
1
post-thumbnail

Call By Value

  • 정의 : 값에 의한 호출. 전달 받은 '값'을 복사하여 처리한다.
  • 전달 받은 값의 변경은 원본 값에 영향을 주지 않는다.

Call By Reference

  • 정의 : 참조에 의한 호출. 전달 받은 '참조 값'를 직접 참조하여 처리한다.
  • 전달 받은 값의 변경은 직접 참조된 값이기에 원본 값에 변경이 적용된다.

🧐 Java는 Call By Value ? Call By Reference?

  • Java는 Call By Value이다.
    ✔ 변수의 주소 값 자체를 가져오거나 넘길 방법이 없기 때문.
    ✔ 참조 자료형의 경우에는 주소값을 복사해서 이를 가지고 사용하는 것. 객체의 property까지는 접근이 가능하나, 원본의 자체를 변경할 순 없다.
class MyValue{

	int value;
    
    public MyValue(int value) {
    	this.value = value;
    }
}

public class Main {
	
    public static void main(String[] args) {
    	MyValue firstV = new MyValue(10);
        MyValue secV = new MyValue(20);
    }
    
    public void callByValue(MyValue f, MyValue s) {
    	f.value = 100;
        f = s;
    }
}

위 예제를 보면

화살표의 방향대로 흘러가면서 Stack과 Heap 영역에서 객체가 선언 및 초기화되며 Method 영역에서 객체의 상태가 바뀌게 되는 것이고 이 바뀌는게 아니다.

그렇기 때문에 자바는 Call By Value인 것이다.

객체의 값이 바뀌었다면 메서드가 호출된 뒤 주소값이 변경이 되야 참조에 의한 호출인 것인데 자바는 객체의 상태를 핸들링 할 수 있다는 것에서 Call by Reference와 더 헷갈리게 되는 것 같다.

0개의 댓글