Call By Value(Pass By Value) : 값에 의한 호출, 다른 말로 Pass By Value라 한다
Call by Reference : 참조에 의한 호출
두 방식을 하나의 코드로 설명해보려고 한다
public class CallTest {
public static void main(String[] args) {
int i = 10; // Line 3
setVal(15); // Line 4
System.out.println("Call By Value - " + i);
Call c = new Call(); // Line 7
c.val = 10; // Line 8
setVal(c); // Line 9
System.out.println("Call By Reference - " +c.val);
}
public static void setVal(int i) { i = 5; } // Line 13
public static void setVal(Call call) { call.val = 5; } // Line 15
}
class Call{
public int val = 3;
}
----- result -----
Call By Value - 10
Call By Reference - 5
먼저 Call By Value이다
Line 4에서 setVal() 함수를 호출한다
하지만 Line 13의 호출된 함수 setVal()에 있는 i의 경우 Line3에 있는 i와 메모리상 공간이 다르기 때문에
출력결과 i의 값이 변하지 않는다는 것을 확인할 수 있다
위 결과를 그림으로 표현하면 다음과 같다
다음으로 Call By Reference이다
setVal() 함수 호출 시 c의 주소 값을 복사하여 call의 메모리에 저장한다
결과적으로 함수에서는 10이 저장된 주소값을 참조하여 연산을 수행하기 때문에, 객체 c의 값이 변하는 것이다
'Study > Java' 카테고리의 다른 글
[Java] Compare (0) | 2020.08.11 |
---|---|
[Java] 입출력 API (0) | 2020.08.09 |
[Java] Object Oriented Programming - OOP 2 (0) | 2020.07.23 |
[Java] Object Oriented Programming - OOP 1 (0) | 2020.07.23 |
[Java] 논리연산 & 비트연산 (0) | 2020.07.22 |
댓글