자바에서는 주로 두 가지 방식으로 메서드에 데이터를 전달합니다: 값에 의한 호출(call by value)과 참조 값에 의한 호출(call by value of the reference). 이 두 방식을 이해하면 자바의 기본적인 작동 원리를 더 잘 이해할 수 있습니다.
값에 의한 호출 (Call by Value)
값에 의한 호출에서는 변수의 실제 값을 메서드에 전달합니다. 이 경우, 메서드 내에서 변수 값을 변경해도 원래 변수의 값에는 영향을 주지 않습니다. 기본 데이터 타입(primitive data types)인 int, float, double 등이 이 방식으로 데이터를 전달합니다.
예제:
public class Test {
public static void main(String[] args) {
int x = 10;
changeValue(x);
System.out.println(x); // 출력: 10
}
public static void changeValue(int y) {
y = 20;
}
}
위 예제에서 changeValue
메서드는 x
의 값을 변경하려고 시도하지만, x
의 실제 값은 변경되지 않습니다. 여기서 x
의 값이 changeValue
메서드로 복사되어 전달되기 때문입니다.
참조 값에 의한 호출 (Call by Value of the Reference)
자바에서는 모든 객체가 참조에 의해 전달됩니다. 이를 흔히 참조 값에 의한 호출이라고 하지만, 정확히는 메모리 주소의 복사본(즉, 참조 값)을 전달하는 것입니다. 따라서 메서드 내에서 객체의 상태를 변경하면, 원본 객체에도 영향을 미칩니다.
예제:
public class Test {
public static void main(String[] args) {
MyNumber myNum = new MyNumber();
myNum.number = 10;
changeValue(myNum);
System.out.println(myNum.number); // 출력: 20
}
public static void changeValue(MyNumber num) {
num.number = 20;
}
}
class MyNumber {
int number;
}
위 예제에서 changeValue
메서드는 MyNumber
객체의 number
필드 값을 변경합니다. 이 경우, myNum
객체의 실제 메모리 주소가 changeValue
메서드에 전달되므로, 메서드 내에서 객체의 상태를 변경하면 원본 객체에도 영향을 미칩니다.
정리
- 값에 의한 호출 : 메서드에 변수의 실제 값을 복사하여 전달. 메서드 내에서 변수 값을 변경해도 원본 변수에 영향을 주지 않음.
- 참조 값에 의한 호출 : 객체의 메모리 주소(참조 값)를 복사하여 메서드에 전달. 메서드 내에서 객체의 상태를 변경하면, 원본 객체에도 영향을 미침.
이 개념들을 이해하면 자바에서 데이터가 어떻게 전달되고, 메서드 내에서 변수와 객체가 어떻게 처리되는지 더 잘 이해할 수 있습니다.
'Java' 카테고리의 다른 글
Java에서 For Loop 활용하기: 입문자를 위한 실전 예제 모음 (0) | 2024.02.15 |
---|---|
실무에서 바로 쓰는 Java While 루프: 기본부터 고급 활용까지 (0) | 2024.02.15 |
java switch 심화 예제 모음 (1) | 2024.02.11 |
java switch 기본 - 3. Enum 타입 비교 (0) | 2024.02.11 |
java switch 기본 - 2. 문자열 비교 (0) | 2024.02.11 |
댓글