✔️ Call by value : 기본 자료형 전달
- 메모리에 저장되어 있는 값 (value) 을 복사하여 보냄
- method 안에 값을 조작해도 원래 값에 영향이 가지 않음.
👉🏻 객체를 메소드로 넘길때 참조하는 지역변수의 실제 주소를 넘기는 것이 아닌 가리키고있는 힙 메모리 영역의 객체를 가르켜서 새로운 지역변수를 생성하는 방식. 그러므로 조작해도 값이 변하지 않는다.
public class CallByValue {
private static int a;
private static int b;
public static void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
public static void main(String[] args) {
a = 10;
b = 20;
System.out.println("swap() 호출 전 : a = " + a + ", b = " + b);
swap(a, b);
System.out.println("swap() 호출 후 : a = " + a + ", b = " + b);
}
}
swap() 호출 전 : a = 10, b = 20
swap() 호출 후 : a = 10, b = 20


🌟 자바는 기본형 참조형 타입 변수 상관없이 call by value 방식으로 인자값을 받는다.
- 대신 기본형 타입은 값을 복사해주고 참조형 값은 주소(래퍼런스)가 복사된다.
✔️ Call by reference : 참조형 데이터 값이 아닌 참조가 전달
- 사용하는 인자 값의 메모리에 저장되어있는 주소(address) 를 복사하여 보냄
- 호출한 메소드의 데이터에 영향
- 매개 변수로 참조 자료형을 넘길 경우, 메소드 안에서 객체의 상태를 변경한 결과에 영향 받음.
public class CallByReference {
int value;
CallByReference(int value) {
this.value = value;
}
public static void swap(CallByReference x, CallByReference y) {
int temp = x.value;
x.value = y.value;
y.value = temp;
}
public static void main(String[] args) {
CallByReference a = new CallByReference(10);
CallByReference b = new CallByReference(20);
System.out.println("swap() 호출 전 : a = " + a.value + ", b = " + b.value);
swap(a, b);
System.out.println("swap() 호출 전 : a = " + a.value + ", b = " + b.value);
}
}
swap() 호출 전 : a = 10, b = 20
swap() 호출 후 : a = 20, b = 10

** CallByReference 는 객체의 주소값을 저장하기 때문에 swap() 메서드 호출시 a 와 b 는 메모리가 저장된 주소값을 저장한다. swap() 메서드에서 주소값이 변경되으로 메인메소드로 돌아왔을때 변경된 값을 볼수 있다.
'🌈 Java > Back to Basic 101' 카테고리의 다른 글
| 3주차 과제: 연산자 (0) | 2021.03.30 |
|---|---|
| 10주차 과제: 멀티쓰레드 프로그래밍 (0) | 2021.03.29 |
| 자바 기초 정리: @Overloading vs. @Overriding (0) | 2021.03.03 |
| 자바 기초 정리: ArrayList vs. LinkedList (0) | 2021.03.03 |
| 자바 기초 정리: IF vs. Switch (0) | 2021.03.03 |