갈림길 이정표

Call by Value vs. Call by Reference 본문

Programming Language/Java 마스터하기(feat. 이것이 자바다)

Call by Value vs. Call by Reference

이몽뇽 2020. 7. 20. 01:19
package pack1;

public class CallBy1 {
	int a = 10, b = 20; //기본형 변수
	int c[] = {1, 2};	//참조형 변수 (new int c[0] = 1, c[1] = 2 한거랑 같음)

}
package pack1;

public class CallBy2 {
	public void ex(int a, int b) { //인수로 기본형 변수 사용
		int imsi = a;
		a = b;
		b = imsi;
		System.out.println("1. 메소드 내의 a: " + a + ", b: " + b); //두개의 기억 장소의 값을 맞 바꿈 총 3개의 변수 필요
	}
	
	public void ex(CallBy1 data) { //인수로 참조형 변수 사용 (method overloading)
		int imsi = data.a;			//가장 많이 쓰이는 참조형 변수
		data.a = data.b;
		data.b = imsi;
		System.out.println("2. 메소드 내의 a: " + data.a + ", b: " + data.b); //두개의 기억 장소의 값을 맞 바꿈 총 3개의 변수 필요
	}
	
	public void ex(int[] ar) { //인수로 참조형 변수 사용 
		int imsi = ar[0];
		ar[0] = ar[1];
		ar[1] = imsi;
		System.out.println("3. 메소드 내의 a: " + ar[0] + ", b: " + ar[1]); //두개의 기억 장소의 값을 맞 바꿈 총 3개의 변수 필요
	}

}
package pack1;

public class CallByMain {

	public static void main(String[] args) {
		//메소드 호출시 argument로 값 또는 주소 전달 할 수 있다.
		CallBy1 my = new CallBy1();
		CallBy2 your = new CallBy2();
		
		System.out.println("0. 원래 a: " + my.a + ", b: " + my.b); //기억장소 4개 (a,b,my.a,my.b)

		your.ex(my.a, my.b); //부르면서(CallBy하면서) 값을 부여
							//인수로 기본형 변수 (값) 전달  -> ?
		System.out.println("1-1. 수행 후  a: " + my.a + ", b: " + my.b);
		
		System.out.println();
		your.ex(my); //인수로 참조형 변수 (주소) 전달 -> my.a, my.b
		System.out.println("2-1. 수행 후  a: " + my.a + ", b: " + my.b);
		
		System.out.println();
		your.ex(my.c);
		System.out.println("3-1. 수행 후  c[0]: " + my.c[0] + ", c[1]: " + my.c[1]);
		
	}

}
Comments