본문 바로가기
정리하기 이전 자료 ( before 20-11 )/Java

Call by value VS Call by reference

by IMSfromSeoul 2020. 3. 25.

Call by value

 

말 그대로

 

값에 의한 호출 vs 참조에 의한 호출

 

public static void swap(int x, int y) {
        int temp = x;
        x = y;
        y = temp;
    }
    public static void main(String[] args) {
        int a = 10;
        int 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

값을 바꾼 것은 a,b가 아니라 swap 내부에 생성된 x,y 이므로 a,b의 값은 바뀌지 않았다.

 

Call by value -> 값만 보낸다

 

 

Call by reference

 

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

 

Call by Reference 는 참조값(인스턴스) 를 넘겨 주어서 인스턴스 내의 값을 직접적으로 변경하기 때문에 값이 바뀐다.

라고 생각하면 이해하기 쉽다.

참조사이트:

 

https://re-build.tistory.com/3

 

[Java] Call by value와 Call by reference

이번에 다룰 주제는 Call by value, Call by reference 입니다. 함수의 호출 방식에는 Call by value와 Call by reference가 있습니다. 말 그대로 '값에 의한 호출'이냐, '참조에 의한 호출'이냐 라고 할 수 있는..

re-build.tistory.com

 

'정리하기 이전 자료 ( before 20-11 ) > Java' 카테고리의 다른 글

배열 ( Array )  (0) 2020.03.27
Singleton Pattern  (0) 2020.03.25
StringBuilder  (0) 2020.03.23
Buffered Reader/Writer  (0) 2020.03.16
자바 8 Optional  (0) 2020.03.11

댓글