본문 바로가기
Java/정리

[Java] 매개변수 전달방식(Call-by-value, Call-by-reference)

by 콧등치기국수 2021. 12. 22.

매개변수

- 메소드를 호출해서 객체간 메시지가 전달될 때 부가 정보가 필요한 경우 매개변수 형태로 전달한다.

- 매개변수로 전달되는 데이터에 따라 동작 방식이 달라진다.

- 기본형일 경우 Call-by-value, 참조형인 경우 Call-by-reference 방식으로 전달된다.

 

값에 의한 호출(Call-by-value)

1. 매개변수의 타입이 기본형인 경우

2. 변수의 주소가 아닌 값을 복사해서 매개변수로 전달한다.

3. 실제 매개변수 값은 영향을 받지 않는다.

public class CallBy {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int m1 = 5;
		System.out.println("변경전 : " + m1);  //5
		
		changeNum(m1);
		System.out.println("변경후 : " + m1);  //5

	}
	
	public static void changeNum(int m1) {
		m1 += 1000;
	}
    
}

 

주소에 의한 호출(Call-by-reference )

1. 매개변수의 타입이 참조형(배열, 객체)인 경우

2. 참조형 매개변수는 참조하는 객체의 주소값이 복사되어 전달된다.

3. 객체의 주소를 공유하기 때문에 메소드 수행 이후 실제 변수의 값이 변한다.

public class CallBy {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int[] mList = {24,30,60};
		System.out.println("변경전 : " + Arrays.toString(mList));  //[24, 30, 60]
		
		changeArray(mList);
		System.out.println("변경후 : " + Arrays.toString(mList));  //[100, 100, 100]

	}
    
	public static void changeArray(int[] mList) {
		mList[0] = 100;
		mList[1] = 100;
		mList[2] = 100;
	}
}