BACKEND/JAVA & SPRING
Call By Value & Call By Reference 정리
이-프
2024. 3. 11. 13:22
정렬에 대해서 다시 공부하던중.. swap 함수를 작성하면서 Call By Value와 Call By Reference의 차이점을 정확히 알지 못한다는 사실을 깨닫고 지금이라도 공부해야겠다 생각했다.. 2024년도에는 모르는 것들을 꼼꼼하게 챙겨갈 수 있는 해가 되어야지 !!
Call By Value : 값에 의한 호출
public class CallByValue {
public static void main(String[] args) {
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
System.out.println("a: "+a+" b: "+b); // a: 2 b: 1
}
}
Call By Reference : 주소에 의한 호출
public class CallByReference {
public static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("a: "+a+" b: "+b); // a: 2 b: 1
}
public static void main(String[] args) {
int a = 1;
int b = 2;
swap(a,b);
System.out.println("a: "+a+" b: "+b); // a: 1 b: 2
}
}
- Java는 Call By Value 방식으로 함수를 호출하기 때문에 swap이 정상적으로 작동하지 않음을 확인
- 위의 함수를 보면, swap 함수에 int값 자체를 넘겨줬음을 확인할 수 있다.
public class CallByReference2 {
public static void swap(*int arr[], int a, int b*) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args) {
int[] arr = {1,2,4,3,5};
swap(arr,2,3);
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); // 1 2 3 4 5
}
}
}
- CallByReference2에서는 int[] arr 자체를 parameter로 넘겨줬음을 확인할 수 있다.
- Java에서는 참조형 변수와 배열과 같은 경우 Call By Reference와 같은 효과를 낼 수 있다.