본문 바로가기
개발자의 공부방/자바 기초

Call by Value 와 Call by Reference

by 쌈빡한 쥬니준 2019. 4. 18.

** 미리보기용 이미지입니다 **

자바기초

 

 

 

 

Call by value, Call by Reference

 

-       Call by Reference : 매개 변수의 원래 주소에 값을 저장하는 방식. 클래스 객체를 인수로 전달한 경우

-       Call by Value : 인수로 기본 데이터형을 사용. 주어진 값을 복사하여 처리하는 방식. method 내의 처리 결과는 method 밖의 변수에 영향을 미치지 않는다.

 

 

 

 

1) Call by Value

public class CallBy {

	//call by value (값에 의한 호출.)
	static void print(int a) {
		a = 20;
		System.out.println(a + ">>>");
	}
    
    
    public static void main(String[] args) {
    	int a = 10;
		print(a);
		System.out.println(a+"<<<");
        
        /* 이름은 같지만 다른 것.
		 * 그렇기 때문에 위 메소드에서 바꾼다고 해서 아래에서 적용이 되지 않는다.
		 */
    }
}

결과

Call by Value의 결과 값.

 

 

 

 

2) Call by Reference

public class CallBy {

	//call by reference(address), 주소값에 의한 호출 
	static void print(int[] a) { /*참조변수,주소값만 복사된 것이기에 이것을 얕은복사라고도 함.
								 	배열까지 복사됐으면 깊은복사.
								 */
		System.out.println("배열 출력 >>> 레퍼런스 값이 int a에 저장");
		
		//번지값
		a[0]=100;
		a[1] = 200;
		for (int n : a) {
			System.out.print(n+"\t");
		}
	}

	public static void main(String[] args) {
    	int[] arr = {10,20,30,40,50,60};
		//a 0번째 요소를 바꾸는 것은 ↑ 위의 배열 arr 10을 바꾸라는 것.
		print(arr);
		System.out.println("\n");
		
		System.out.println(arr+"배열로 받았을 때");
		System.out.println();

		for (int n : arr) {
			System.out.print(n+"\t");
		}
    }
}

결과

Call by Reference

댓글0