자바에서 메소드를 호출할 때 파라미터를 전달하는 방법에는 크게 두 가지가 있습니다. 이는 값에 의한 전달(Call by Value)과 참조에 의한 전달(Call by Reference)입니다. 각각의 전달 방식에 대해 설명하고, 샘플 코드를 통해 자세히 알아보겠습니다.
값에 의한 전달은 메소드에 파라미터로 전달되는 값의 복사본을 전달하는 방식입니다. 메소드 내에서 전달된 값을 변경하더라도 원본 변수에는 영향을 주지 않습니다.
아래는 값에 의한 전달의 예시 코드입니다:
public class Main {
public static void main(String[] args) {
int x = 10;
System.out.println("Before method call: " + x);
changeValue(x);
System.out.println("After method call: " + x);
}
public static void changeValue(int value) {
value = 20;
System.out.println("Inside method: " + value);
}
}
출력 결과:
Before method call: 10
Inside method: 20
After method call: 10
위의 예시에서 changeValue 메소드는 value라는 파라미터를 갖고 있습니다. changeValue 메소드는 전달받은 value의 값을 20으로 변경하고 출력합니다. 하지만 main 메소드에서 x를 출력해보면 메소드 호출 전후로 값이 변하지 않음을 확인할 수 있습니다. 이는 changeValue 메소드에 x의 복사본이 전달되었기 때문입니다.
참조에 의한 전달은 메소드에 파라미터로 전달되는 변수의 참조를 전달하는 방식입니다. 이 경우 메소드 내에서 전달된 참조를 통해 변수의 값을 변경할 수 있으며, 변경된 값은 원본 변수에도 영향을 줍니다.
아래는 참조에 의한 전달의 예시 코드입니다
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println("Before method call: " + Arrays.toString(arr));
changeArray(arr);
System.out.println("After method call: " + Arrays.toString(arr));
}
public static void changeArray(int[] array) {
array[0] = 10;
System.out.println("Inside method: " + Arrays.toString(array));
}
}
출력 결과:
Before method call: [1, 2, 3]
Inside method: [10, 2, 3]
After method call: [10, 2, 3]
위의 예시에서 changeArray 메소드는 array라는 int 배열을 파라미터로 받습니다. `
changeArray` 메소드는 배열의 첫 번째 요소를 10으로 변경하고 출력합니다.
main 메소드에서 배열을 출력해보면 메소드 호출 이후에도 배열의 값이 변경되었음을 확인할 수 있습니다. 이는 changeArray 메소드에 배열의 참조가 전달되었기 때문입니다.
이와 같이 자바에서는 값에 의한 전달과 참조에 의한 전달 두 가지 방식을 사용하여 메소드에 파라미터를 전달할 수 있습니다.
각각의 방식은 다른 동작을 하며, 이를 이해하고 적절하게 사용하는 것이 중요합니다.