프로그래밍 언어/Java

[Java] Swap 함수 구현 (Call-by-value)

DevPing9_ 2021. 10. 15. 18:26

# 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;
    }
}
728x90