꾸준히 기록하자

[Java] Call by Value & Reference 본문

IT/Java

[Java] Call by Value & Reference

seungwonlee 2023. 1. 15. 21:19
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