Java/정리
[Java] 매개변수 전달방식(Call-by-value, Call-by-reference)
콧등치기국수
2021. 12. 22. 23:10
매개변수
- 메소드를 호출해서 객체간 메시지가 전달될 때 부가 정보가 필요한 경우 매개변수 형태로 전달한다.
- 매개변수로 전달되는 데이터에 따라 동작 방식이 달라진다.
- 기본형일 경우 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;
}
}