정렬에 대해서 다시 공부하던중.. 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와 같은 효과를 낼 수 있다.
'BACKEND > JAVA & SPRING' 카테고리의 다른 글
[Spring Security + JWT + OAUTH2] 카카오/네이버 외부 로그인 구현 (0) | 2024.04.30 |
---|---|
HttpURLConnection을 이용한 API 데이터 받아오기 (2) | 2024.04.25 |
장바구니 api - Create 추가 #2 (Feat. SpringBoot) (2) | 2023.12.21 |
장바구니 api - Create 추가 #1 (Feat. SpringBoot) (0) | 2023.12.21 |
푸시 알림은 어덯게 구현할까 ? FCM & SSE (3) | 2023.12.20 |