함수의 호출 방식에는 Call by value와 Call by reference가 있다.
말 그대로 '값에 의한 호출'이냐, '참조에 의한 호출'이냐 라고 할 수 있다
예제
public class CallByExam {
public static void change(int num) {
num += 100;
}
public static void main(String[] args) {
int num = 10;
num = change(num); // call by value
System.out.println("num = "+ num);
}
}
위 코드의 결과 값은 이렇다
num = 10
왜 110이 아닌 10이 나올까 ?
그 이유는 Call by value는 메서드 호출 시에 사용되는 인자의 메모리에 저장되어 있는 값(value)을 복사하여 보낸다.
예제
public class CallByExam {
public static void change2(int arr[]) {
arr[0] += 100;
}
public static void main(String[] args) {
int arr[] = {10};
change2(arr); // call by reference
System.out.println("arr[0] = "+ arr[0]);
}
}
위 코드의 결과 값은
arr[0] = 110
Call by reference는 메서드 호출 시 사용되는 인자 값의 메모리에 저장되어있는 주소(Address)를 복사하여 보낸다