반응형
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);
}
}
반응형
'개발_웹 > Java' 카테고리의 다른 글
Java | clone()으로 깊은 복사하기 (0) | 2021.05.02 |
---|---|
Java | Java의 객체 직렬화 (Serialization) (0) | 2021.02.17 |
Java | 파일 다운로드 (0) | 2019.05.11 |
Java | 파일 업로드 (cos.jar) (0) | 2019.05.11 |
Java | 파일 복사하기 (텍스트, 바이너리) (0) | 2019.05.11 |