[CS] Call by value & Call by reference

박상민·2023년 3월 1일
0

Computer Science

목록 보기
5/29

📌 Call By Value

💡 값에 의한 호출
함수 안에서 인자 값이 변경되더라도, 외부 변수 값은 변경이 되지 않는다.

  • 함수가 호출될 떄, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다.
  • 함수 호출 시 전달되는 변수 값을 복사해서 함수 인자로 전달하고, 전달한 인자는 함수 안에서 지역적으로 사용되기 떄문에 local value 속성을 가진다.
void func(int n){
	n = 20;
}

void main() {
	int n = 10;
    func(n);
    printf("%d", n);
}
# 출력되는 값은 10으로 함수안에서 값이 변경되지 않는다.
10

📌 Call By Reference

💡 참조에 의한 호출
함수 안에서 인자 값이 변경되면, 인자로 전달된 객체의 값도 변경된다.

  • 함수 호출 시 인자로 전달되는 변수의 레퍼런스를 전달한다.
  • 함수 안에서 인자 값이 변경되면 전달된 객체의 값도 변경된다.
void func(int *n){
	*n = 20;
}

void main(){
	int n = 10;
    func(&n);
    printf("%d", n);
}
# 출력되는 값은 20으로 함수 안에서 값이 변경된다.
20

📌 Java의 함수 호출 방식

  • 항상 Call By Value로 값을 넘긴다.
  • C, C++과 같이 변수의 주소 값 자체를 가져올 방법이 없으며, 이를 넘길 수 있는 방법 또한 없다.
  • reference type (참조 자료형)을 넘길 시에는 해당 객체의 주소값을 복사형 이를 가지고 사용한다.
  • 원본 객체의 프로퍼티까지는 접근이 가능하지만, 원본 객체 자체를 변경할 수는 없다. ( = 원본 객체 속의 값들을 변경할 수는 있지만, 메모리에 올라가있는 객체 자체를 다른 객체로 변경할 수 없다.)
profile
💡 클린코드를 지향하는 Backend Developer

0개의 댓글