관리 메뉴

꿈 많은 사람의 이야기

자바 call by reference, call by value(값 참조, 내용에 의한 참조) 본문

java

자바 call by reference, call by value(값 참조, 내용에 의한 참조)

이수진의 블로그 이수진의 블로그 2017. 8. 21. 08:43

call by reference와 call by value는 그림으로 보면 이렇게 된다

 


call by value는 값만 복사가 되기 때문에 원본의 값이 변경이 되지 않는다. 
call by reference는 주소값이 전달이 되기 때문에 두 번째 참조 변수가 해당 객체의 값을 변경하면 첫 번째 참조 변수가 가르키는 객체의 값도 변경이 된다.

다음 예제를 봐보자

int a = 5; 
int b = 10; 
add(a, b);   //call by value
System.out.println(a+", "+b);
단순히 이렇게 값만 전달해주면 add메소드에서 a를 + 5하고, b를 +10 해도 원본의 a, b의 값은 변하지 않는다.
즉 add 연산이 끝나고 프린트를 해도 a = 5, b = 10이 출력이 된다.

하지만 아래와 같은 경우를 보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Ex   //사용자 정의 데이터 타입
{
    int a;   
    int b;
}
 
Ex in = new Ex();
in.a = 10;
in.b = 20;
System.out.println(in.a+",  "+in.b);   
add(in);    //call by reference
System.out.println(in.a+",  "+in.b); 
 
 
private void add(Ex in)  {
    in.a = 100;
    in.b = 200;
    System.out.println(in.a+",  "+in.b);
}
Colored by Color Scripter

위 같은 경우는 참조 변수를 전달해준다. 참조 변수를 전달해주는 것은 참조 변수가 담고 있는 인스턴스에 대한 정보(주소, 참조하는 애)를 주기 때문에  원 값이 흘러가게 된다.
따라서 add 연산후 a는 100, b는 200이 될 수 있다.

이것이 call by value와 call by reference의 차이점이다.


0 Comments
댓글쓰기 폼