반응형
https://perfectacle.github.io/2017/10/30/js-014-call-by-value-vs-call-by-reference/
Call by value vs Call by reference
간단하게 말하자면
Call by value는 값을 넘기는 것
Call by reference는 변수의 주소를 넘기는 것이다.
자바는 Call by value이기 때문에 서로 다른 공간 ( 클래스, 메소드 등등...)에서 선언된 변수는 다른 공간으로 공유되지 않는다. 값을 복사해서 저장하기 때문이다.
class Test {
private static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
public static void main(String args[]) {
int a = 1;
int b = 2;
System.out.println("a => " + a);
System.out.println("b => " + b);
swap(a, b);
System.out.println("------- swap 후 -------");
System.out.println("a => " + a);
System.out.println("b => " + b);
}
}
위의 스왑 예제를 보면
스왑된 a와 b 변수는 메인메소드의 a, b변수에 영향을 끼치지 않는 것을 볼 수 있다.
그렇다면 객체를 reference로 넘기는 방법은 없을까?
class Test {
int value;
Test(int value) {
this.value = value;
}
private static void swap(Test a, Test b) {
int temp = a.value;
a.value = b.value;
b.value = temp;
}
public static void main(String args[]) {
Test a = new Test(1);
Test b = new Test(2);
System.out.println("a => " + a.value);
System.out.println("b => " + b.value);
swap(a, b);
System.out.println("------- swap 후 -------");
System.out.println("a => " + a.value);
System.out.println("b => " + b.value);
}
}
위의 예제처럼 값을 그대로 넘기는 것이 아니라 변수를 메모리에 담아서 넘기게 되면 reference로 넘기기가 가능하다!
출력된 값을 확인해봐도 제대로 a와 b의 값이 바뀐 것을 볼 수 있다.
반응형
'Study > JAVA' 카테고리의 다른 글
[JAVA] 전달인자(Argument)와 매개변수(Parameter) (0) | 2021.11.02 |
---|---|
[점프투자바] 06 입출력 06-1 콘솔 입출력 (0) | 2021.11.02 |
[JAVA] 기본형(primitive)과 참조형(reference) 매개 변수 (0) | 2021.10.28 |
[JAVA] class, object, instance 차이 (0) | 2021.10.27 |
[점프투자바] 05 객체지향 프로그래밍 05-5 생성자 (0) | 2021.10.22 |