Call By Value와 Call By Reference
Q. Call By Value와 Call By Reference의 차이에 대해 설명해주세요.
Call By Value는 인자로 받은 값을 복사하여 처리하는 방식을 말합니다. 값을 복사하여 처리하기 때문에 원래의 값이 보존된다는 장점이 있고, 복사하기 때문에 메모리 사용량이 증가한다는 단점이 있습니다. Call By Feference는 인자로 받은 값의 주소를 참조하여 직접 저장해 값에 영향을 주는 방식을 말합니다. 복사하지 않고 직접 참조하기 때문에 빠르다는 장점이 있고, 직접 참조를 하기에 원래의 값이 영향을 받는다는 단점이 있습니다.
Q. 그럼 Java에서 어느 부분이 call by value이고 어느 부분이 call by reference에 해당하나요?
Java는 기본적으로 모든 전달 방식이 Call by Value입니다. 이는 즉, 값을 복사해서 전달한다는 의미입니다. 참조형의 경우 객체의 주소값을 전달하니까 Call by Reference가 아니냐고 생각할 수 있지만, 이것도 정확히 말씀드리면 Call by Value입니다. 그 이유는 다음과 같습니다. 첫째, 우리가 흔히 말하는 '주소값'이라는 것이 실제로는 '주소를 가리키는 참조값'이기 때문입니다. 둘째, 이 참조값을 전달할 때도 복사해서 전달합니다. 즉, 직접 주소를 전달하는 것이 아니라 그 주소를 가리키는 값을 복사해서 전달하는 것입니다. 결과적으로, Java에서는 기본형 변수든 참조형 변수든 모두 자신이 가지고 있는 값을 복사해서 전달합니다. 이것이 바로 Java가 Call by Value라고 불리는 이유입니다. 즉, 기본형은 '값 자체'를 복사하고, 참조형은 '참조값'을 복사한다고 볼 수 있습니다.
Last updated