programmer '프로그래머'

Call by Value/Call by Reference

김동준. 2024. 8. 21. 22:59

함수 호출 시 매개변수 전달 방식인 "Call by Reference"와 "Call by Value"는 프로그래밍 언어에서 매우 중요한 개념입니다. 이 두 가지 방식은 함수 내에서 매개변수가 어떻게 전달되고 처리되는지에 대해 다른 동작을 합니다.

1. Call by Value (값에 의한 호출)

  • 개념:
    Call by Value는 함수에 인수를 전달할 때, 해당 인수의 을 복사하여 함수에 전달하는 방식입니다. 함수 내부에서는 복사된 값을 사용하며, 이 값은 함수가 종료될 때까지 함수 내부에서만 유효합니다.
  • 동작:
    함수 내에서 매개변수의 값을 변경해도, 원래의 인수에는 아무런 영향을 미치지 않습니다. 이는 함수가 외부에서 전달받은 값의 복사본을 사용하기 때문입니다.

2. Call by Reference (참조에 의한 호출)

  • 개념:
    Call by Reference는 함수에 인수를 전달할 때, 인수의 참조를 함수에 전달하는 방식입니다. 참조를 전달받은 함수는 원래의 인수와 동일한 메모리 주소를 참조하게 됩니다.
  • 동작:
    함수 내에서 매개변수의 값을 변경하면, 이는 원래의 인수에도 영향을 미칩니다. 함수가 인수의 참조를 직접 조작하기 때문에, 함수 외부의 변수 값도 변경됩니다.

차이점 요약

  • 변경 여부:
    • Call by Value: 함수 내에서 매개변수를 변경해도 원본 변수는 변경되지 않음.
    • Call by Reference: 함수 내에서 매개변수를 변경하면 원본 변수도 변경됨.
  • 메모리 사용:
    • Call by Value: 함수 내에서 새로운 메모리 공간을 사용하여 값이 복사됨.
    • Call by Reference: 기존 메모리 공간을 참조하여 사용, 추가 메모리 할당 없음.
  • 주요 사용 사례:
    • Call by Value: 원본 데이터를 보호해야 할 때 사용. 값이 변경되지 않도록 하려는 경우.
    • Call by Reference: 함수 내에서 원본 데이터를 직접 수정해야 할 때 사용. 큰 데이터를 복사하는 오버헤드를 줄이기 위해 사용.