본문 바로가기
IT/Knowledge

Call by Value 와 Call by Reference

by 성준하이 2024. 7. 27.
반응형

함수 호출 방식으로 CS 면접때 자주 나오는 질문인 Call by Value 와 Call by Reference 에 대해서 다뤄볼 것이다.

call-by-value (값에 의한 호출)
  • call-by-value 값에 의한 호출방식은 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
  • 복사된 인자는 함수 안에서 지역적으로 사용되는 local value의 특성을 가진다.
    따라서 함수 안에서 인자의 값이 변경되어도, 외부의 변수의 값은 변경되지 않는다.
    Java의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (원시자료형 / 참조자료형) 함수 호출 방식이 달라진다.
    • 원시 자료형 (primitive type) : call-by-value 로 동작 (int, short, long, float, double, char, boolean )
    • 참조 자료형 (reference type): call-by-reference 로 동작 (Array, Class Instance)
  • 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존된다.
  • 단점 : 직접 참조를 하기 때문에 메모리가 사용량이 늘어난다.
  • 예시코드
#include <stdio.h>
 
void swap(int num1, int num2)
{
    int temp = num1;
    num1 = num2;
    num2 = temp;
}

void main()
{
    int a = 20, b = 60;
    swap(a, b);
    printf("a: %d, b: %d", a, b);
}

 

 

call-by-reference (참조에 의한 호출)
  • call-by-reference 참조에 의한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.)
  • 따라서 함수 안에서 인자의 값이 변경되면, 아규먼트로 전달된 객체의 값도 함께 변경된다.
  • 장점 : 복사하지 않고 직접 참조를 하므로 빠르다.
  • 단점 : 직접 참조를 하기 때문에 원래 값이 영향을 받는다.
  • 예시코드
#include <stdio.h>
 
void swap(int &num1, int &num2)
{
    int temp = num1;
    num1 = num2;
    num2 = temp;
}

void main()
{
    int a = 20, b = 60;
    swap(a, b);
    printf("a: %d, b: %d", a, b);
}
반응형

'IT > Knowledge' 카테고리의 다른 글

Apache Thrift(쓰리프트)  (11) 2024.08.04
gRPC 에 대해  (9) 2024.08.03
jira pat 란?  (21) 2024.07.26
Atlassian 이란?  (22) 2024.07.21
SSO란? (oAuth와 SSO의 차이)  (14) 2024.07.15

댓글