꾸준히 기록하자
[Java] Call by Value & Reference 본문
728x90
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("이름", "신짱구");
}
끝.
반응형
'IT > Java' 카테고리의 다른 글
[Java] Remove HTML tags (0) | 2023.04.13 |
---|---|
[Java] Regular expression (0) | 2023.03.10 |
[Java] Good Coding (PMD) (0) | 2022.12.27 |
[Java] distinct() (0) | 2022.12.15 |
[Java] Iterator() (0) | 2022.11.02 |
Comments