자바에서 메소드를 호출할 때 파라미터를 전달하는 방법에는 크게 두 가지가 있습니다. 이는 값에 의한 전달(Call by Value)과 참조에 의한 전달(Call by Reference)입니다. 각각의 전달 방식에 대해 설명하고, 샘플 코드를 통해 자세히 알아보겠습니다.
1. 값에 의한 전달 (Call by Value):
값에 의한 전달은 메소드에 파라미터로 전달되는 값의 복사본을 전달하는 방식입니다. 메소드 내에서 전달된 값을 변경하더라도 원본 변수에는 영향을 주지 않습니다.
아래는 값에 의한 전달의 예시 코드입니다:
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`의 복사본이 전달되었기 때문입니다.
2. 참조에 의한 전달 (Call by Reference):
참조에 의한 전달은 메소드에 파라미터로 전달되는 변수의 참조를 전달하는 방식입니다. 이 경우 메소드 내에서 전달된 참조를 통해 변수의 값을 변경할 수 있으며, 변경된 값은 원본 변수에도 영향을 줍니다.
아래는 참조에 의한 전달의 예시 코드입니다:
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` 메소드에 배열의 참조가 전달되었기 때문입니다.
이와 같이 자바에서는 값에 의한 전달과 참조에 의한 전달 두 가지 방식을 사용하여 메소드에 파라미터를 전달할 수 있습니다. 각각의 방식은 다른 동작을 하며, 이를 이해하고 적절하게 사용하는 것이 중요합니다.
'Java' 카테고리의 다른 글
Abstract (0) | 2024.04.08 |
---|---|
String Class (0) | 2024.04.08 |
try-catch-finally (0) | 2024.04.08 |
Anonymous Class (0) | 2024.04.08 |
Nested Classes(중첩 클래스) (0) | 2024.04.08 |