초보 프로그램 개발자

[ 3주차 ] Java - Call By Value / Call By Reference 본문

교육 일지/java

[ 3주차 ] Java - Call By Value / Call By Reference

Ji_HG 2023. 5. 16. 16:40
Call By Value

Stack 영역의 데이터가 Heap영역으로 넘어가서 처리되는 의미

Call By Reference

Heap 영역의 데이터를 공유할 때 주소를 주고 받음

 

class Test{
	public int x = 0;
	
	public void sub(int a) {
		x += a;
	}
	
}

public class Test7 {
	
	public static void main(String[] args) {
		
		Test ob = new Test();
		int a = 20;
		
		System.out.println("sub()메소드 실행 전 x의 값 : " + ob.x);
		
		// stack영역에 있는 a(20) 가 heap영역으로 넘어가서 연산
		// call by value
		ob.sub(a);
		System.out.println("sub()메소드 실행 후 x의 값 : " + ob.x);
		
		// call by reference 주소를 나눠가짐
		Test ob1;
		ob1 = ob;
		System.out.println("ob의 x의 값 : " + ob.x);
		System.out.println("ob1의 x의 값 : " + ob1.x);
		
	}
	
}

Call By Reference는

ob1 = ob; 에서 객체 자체를 복사하기에는 너무 크기 때문에 동일한 주소를 공유하여 사용한다.

ob 에서의 x 값과 ob1에서의 x 값은 공유 하며

따로 사용하기 위해서는 또 메모리 할당을 시켜주어야 한다.