Recent Posts
Recent Comments
Link
07-01 15:17
«   2026/07   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

꿈 많은 사람의 이야기

자바 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의 차이점이다.


반응형
Comments