Java
[Java] Call by Value & Reference
seungwonlee
2023. 1. 15. 21:19
Call by Value(Pass by Value)와 Call by Reference(Pass by Reference)에 대해 알아보겠습니다.
Java의 메서드 호출 방식은 Call by Value이지만 인자 값이 원시 또는 참조 자료형에 따라 부르는 명칭만 다른 거 같습니다.
Call by Value는 메서드 안에서 인자 값을(원시 자료형) 변경해도 인수 값은 변경되지 않습니다.
Call by Reference는 객체의 주소값을(참조 자료형) 넘겨주기 때문에 객체 변수의 값을 변경할 수 있습니다.
아래 코드블록은 Call by Value 예제입니다.
* 인자 값은 변경이 되지만 인수값은 변경되지 않는 걸 확인할 수 있습니다.
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a + ", " + b);
// 결과: 1, 2
swap(a, b);
System.out.println(a + ", " + b);
// 결과: 1, 2
}
public static void swap(int a, int b) {
a = 100;
b = 200;
System.out.println(a + ", " + b);
// 결과: 100, 200
}
아래 코드블록은 Call by Reference 예제입니다.
* 객체 안에 있는 값이 변경되는 걸 확인할 수 있습니다.
public static class Test{
String value = "전";
}
public static void chgValue(Test t){
t.value = "후";
}
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.value);
// 결과: 전
chgValue(t);
System.out.println(t.value);
// 결과: 후
}
public static void main(String[] args) {
Map<String, Object> info = new HashMap<String, Object>();
info.put("이름", "짱구");
info.put("국적", "일본");
System.out.println(info);
// 결과: {국적=일본, 이름=짱구}
addInfo(info);
System.out.println(info);
// 결과: {국적=일본, 이름=신짱구, 나이=7살}
}
public static void addInfo(Map<String, Object> info) {
Map<String, Object> rtnMap = info;
rtnMap.put("나이", "7살");
rtnMap.put("이름", "신짱구");
}
끝.
728x90