개발_웹/Java
Java | Java에서 Swap 함수 구현 (Java의 call-by-reference)
zuyo
2021. 2. 17. 01:45
반응형
Call-by-Value와 Call-by-Reference
1. call-by-value
메소드의 파라미터로 호출자(caller)가 제공한 값을 전달하는 방식입니다.
파라미터 값이 복사되어 전달되므로, 호출자의 값은 수정되지 않습니다.
자바는 call-by-value 방식을 따릅니다.
2. call-by-reference
메소드의 파라미터로 호출자(caller)가 제공한 값의 위치를 전달하는 방식입니다.
파라미터로 값의 참조가 전달되므로, 호출자의 값이 수정될 수 있습니다.
포인터가 없는 Java에서 Swap 함수를 구현하기
Java는 항상 call-by-value 를 사용한다. 메소드는 파라미터로 전달된 기본자료형의 값을 변경할 수 없다. C와는 다르게 포인터를 쓸 수 없었기 때문에 Java를 처음 공부할 땐 두 값을 서로 바꾸는 Swap 함수를 구현하기가 쉽지 않았다.
그러나 파라미터로 전달된 객체의 필드값이나 배열의 요소들은 call-by-reference이기 때문에 값 변경이 가능하다.
1. 배열 레퍼런스 이용한 방법
public class Swap {
public static void swap(int[] arr) {
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
int[] arr = {a, b};
swap(arr);
System.out.println(arr[0] + " " + arr[1]);
}
}
2. 연산 우선순위를 이용한 방법
public class Swap2 {
private static Integer trickSwap(Integer original, Integer willBeChanged) {
return original;
}
public static void main(String args[]) {
Integer a = new Integer(10);
Integer b = new Integer(20);
// 호출 시 전달인자에서 a = b, 바뀌기 전의 a를 반환하므로 b = a
b = trickSwap(a, a = b);
System.out.println(a + " " + b);
}
}
반응형