개발자 미니민의 개발스터디

[JAVA] 자바 - call by value / call by reference

by mini_min
[JAVA]
call by value / call by reference

 

수업 때 한 번에 이해 되지 못했던 개념이었다. 파라미터를 전달하는 방법 중 2가지가 있다고 하는데,  'call by value' 와 'call by reference' 다. 메소드 사이의 자료 교환은 매개변수(인수)로 이루어진다. 형식 매개 변수는 호출한 메소드에서 넘겨받는 값, 실 매개 변수는 호출 받는 함수에게 넘겨주는 값이다.

 

 

✔️ call by value

형식매개변수와 실매개변수가 기억 공간을 따로 확보하는 것이다.

기본 자료형의 파라미터 전달 방법이 바로 call by value !

💡 기본 자료 형으로 인수 전달

class Test5 {
	int x = 10;
	
    public void sub1 (int a) {
    	a += 10;			
    
    }


public static void main(String[] args) {
		Test5 t = new Test5();
		int a = 5;
		
		t.sub1(a);
		System.out.println("sub1() 호출 후 a : " + a);			//5

// a = 5 값을 인수로 받았을 때, 메소드 값은 15가 되었지만, 실매개변수 값은 그대로 5이다.

// 즉, 형식매개변수 값이 변경되어도 호출한 메소드의 실 매개변수 값은 변경되지 않는다.

 

 

✔️ call by reference

참조(주소) 값을 전달한다. 객체를 파라미터로 전달하는 경우가 바로 call by reference 에 해당된다.

💡 레퍼런스 형으로 인수 전달!!!!!(배열, 클래스 참조형, 인스턴스 참조형 등)

class Test5 {
	
    int x = 10;
    
	public void sub2(Test5 obj) {
    	obj.x += 10;
    }

}

public static void main(String[] args) {
		Test5 t = new Test5();
	System.out.println("sub() 호출 전 x : " + t.x); //10
    t.sub2(t);
		System.out.println("sub() 호출 후 x : " + t.x); //20

// sub2 메소드에 클래스 참조형 메소드가 들어왔다. 해당 메소드는 호출된 메소드로 값을 전달하지 않고 참조 위치만 전달한다. 

// t.sub2(t) = sub2 메소드 호출하면서 t 객체의 참조 위치 전달.

// main 에서 전달 받은 참조 위치의 x 필드 값 변경!!!! 10->20

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기