# Call-by-Reference 의 Swap 함수
- 객체나 배열이 인자로 들어왔을 때, 주소값이 복사되므로 멤버(배열원소)에 직접 접근하여 값을 바꾸면 바꿔진다.
- 따라서, 일반적인 temp 를 두는 방식으로 값을 교환하면 된다.
# Call-by-value 의 Swap 함수
- primitive type(int, float, double, ...) 의 값을 바꿔야 하는 경우
- Wrapper Class 또한 데이터를 담고있는 멤버에 직접접근 권한이 없기에 해당 경우로 취급하여 주소값 자체 값으로 취급하여 바꿔주면 된다.
# 구현 코드
/* Call-by-Value */
public class SwapTest1 {
public static int swap(int a, int b){
return a;
}
public static void main(String[] args) {
int a=10, b=20;
// 첫번째 인자 a 가 값이 복사되고, 두번째인자 a=b는 a가 b로 바뀐 후 값이 복사되어 b의 값으로 함수로 전달됨
// 함수의 리턴값은 두번째인자가 무엇이든 관계없이, 첫번째 인자인 a이므로, b는 a 의 값으로 바뀜
b = swap(a,a=b);
}
}
/* Call-by-Reference */
public class SwapTest2 {
public static void swap(MyObj a, MyObj b){
MyObj temp = new MyObj();
temp.value = a.value;
a.value = b.value;
b.value = temp.value;
}
}