2017년 6월 30일 금요일

call by reference, call by value in java

call-by-value 는 함수로 인자를 전달할 때 전달될 변수의 값을 복사하여 함수의 인자로 전달한다. 또한 복사된 값은 함수내에서 지역적으로 사용되는 local value라는 특징을 가지고 있다. 그리고 호출한 caller는 인자값을 복사방식으로 넘겨주었으므로, callee내에서 어떤 작업을 하더라도 caller는 영향을 받지 않는다.

 void swap(int target1, int target2){
   int tmp = target1;
   target1 = target2;
   target2 = tmp;
}
 int main(int argc, char** argv){
   int x = 10, y = 20;
   swap(x, y);
   printf("x=%d, y=%d\n",x,y);
   return;
}

결과 => 10, 20

swap 함수를 수행하고 x와 y의 값은 변경되지 않았음, 이는 swap 함수에 아규먼트가 전달될 때, x와 y를 복사해서 값만 넘겨주기 때문이다. swap 메소드 안에 메모리 영역에 새로운 x,y변수가 생성된다는 뜻이다. 이것이 call by value, 값에 의한 호출의 핵심이다.


Call-by-refrence는 인자로 사용될 변수의 레퍼런스(주소)를 함수로 전달하며, 그것이 변수의 값은 아니다라고 되어있다.
 C언어는 포인터로 call-by-reference를 구현할 수 있다.

void swap(int* target1, int* target2){
  int tmp = *target1;
  *target1 = *target2;
  *target2 = tmp;
}

int main(int argc, char** argv){
  int x = 10, y =20;
  swap(x,y);
  printf("x=%d, y=%d\n",x,y);
  return ;
}

결과 20, 10

swap 함수에 x, y가 저장된 곳 자체를 넘겼기 때문에 함수의 아규먼트로 레퍼런스를 넘겨서 변경 사항을 함수를 호출한 곳에서도 적용되게끔 하는 방식이 'call by reference' 이다.


자바에서는 기본적으로 call-by-value방식으로 값을 전달하지만,
참조자료형인 변수가 아규먼트 일때는 ref값을 넘기기 때문에 call-by-reference처럼 보이게 되는것이다.

댓글 없음:

댓글 쓰기

JavaScript_함수의 역할

◎ 자바스크립트 함수의 역할 ■ 자바스크립트 함수와 메서드는 전혀 다른 개념이다. - 자바스크립트 함수는 메서드 역할을 할 수 있지만, 객체지향 프로그래밍의 메서드는 자바스크립트의 함수 역할을 할 수 없다. - 메서드와는 다르게 ...