본문 바로가기
Study/Java

[Java] Call By Value, Call by Reference

by JYHAN 2020. 7. 25.

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 Value

다음으로 Call By Reference이다

setVal() 함수 호출 시 c의 주소 값을 복사하여 call의 메모리에 저장한다

결과적으로 함수에서는 10이 저장된 주소값을 참조하여 연산을 수행하기 때문에, 객체 c의 값이 변하는 것이다

 

Call By Reference

'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

댓글