CS | 값에 의한 호출(Call by Value) vs 참조에 의한 호출(Call by Reference)

성수당·2025년 7월 14일

나혼자 CS

목록 보기
3/24
post-thumbnail

🥔 Call by Value vs Call by Reference (C++)

프로그래밍에서 함수를 호출할 때 인자를 어떻게 전달하느냐에 따라 결과가 달라질 수 있다. C++에서는 주로 두 가지 방식이 있다:

  • Call by Value (값에 의한 호출)

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

🥔 Call by Value (값에 의한 호출)

| 매개변수에 인자의 “복사본”이 전달되는 방식

  • 원래 값은 유지됨
  • 함수 내에서 값을 변경해도 원본에는 영향 없음
void modifyValue(int x) {
    x = 10;  // x는 복사본이기 때문에 원본에 영향 없음
}

int main() {
    int a = 5;
    modifyValue(a);
    cout << a << '\n';  // 결과: 5
}

| 복사 비용이 적을 경우, 원본 보호가 필요할 때 사용

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

| 인자의 “주소(레퍼런스)”가 전달되어 원본을 직접 수정

  • 함수 내 변경이 원본 변수에 영향을 미침

  • & 연산자를 이용하여 참조로 매개변수를 전달함

void modifyReference(int& x) {
    x = 10;  // x는 a의 참조 → a의 값도 바뀜
}

int main() {
    int a = 5;
    modifyReference(a);
    cout << a << '\n';  // 결과: 10
}

| 값 변경이 필요할 때, 큰 객체의 복사 비용을 줄이고 싶을 때 사용

🥔 Call by Pointer (포인터 방식)

| C++에서는 참조 외에도 포인터를 이용한 전달 방식도 사용

void modifyPointer(int* x) {
    *x = 20;
}

int main() {
    int a = 5;
    modifyPointer(&a);
    cout << a << '\n';  // 결과: 20
}

| 포인터 방식은 null 체크나 주소 조작이 필요할 때 자주 사용

🥔 정리 비교표

🥔 마무리

  • Call by Value → 안전하지만 비효율적일 수 있음

  • Call by Reference → 효율적이지만 원본이 바뀔 수 있음

  • 상황에 맞게 잘 선택해야 성능과 안정성을 모두 챙길 수 있다

profile
말하는 감자🥔

0개의 댓글