Language/JAVA

Call by Value & Call by Reference

자바에서 메서드 호출 시 매개변수를 전달하는 방식은 
Call by Value와 Call by Reference 두 가지가 있습니다. 
두 방식의 차이점과 사용 방법에 대해 자세히 알아보도록 하겠습니다.


Call by Value


Call by Value는 메서드 호출 시 인자로 전달되는 값의 복사본을 전달하는 방식입니다. 

따라서 메서드 내에서 매개변수의 값을 변경하더라도, 호출한 쪽에는 영향을 미치지 않습니다. 

이 방식은 자바에서 기본 자료형(primitive type)을 매개변수로 전달할 때 사용됩니다.

아래의 코드에서 changeValue 메서드는 int형 변수 num을 매개변수로 받아 num의 값을 10으로 변경합니다. 

하지만 main 메서드에서 num의 값은 변경되지 않습니다.

 

public class CallByValueExample {
    public static void main(String[] args) {
        int num = 5;
        changeValue(num);
        System.out.println(num); // 출력 결과: 5
    }

    public static void changeValue(int num) {
        num = 10;
    }
}

 

Call by Reference


Call by Reference는 메서드 호출 시 인자로 전달되는 값의 주소를 전달하는 방식입니다. 

따라서 메서드 내에서 매개변수의 값을 변경하면, 호출한 쪽에서도 변경된 값을 확인할 수 있습니다. 

이 방식은 자바에서 객체(Object)를 매개변수로 전달할 때 사용됩니다.

아래의 코드에서 changeValue 메서드는 배열 arr을 매개변수로 받아 arr[0]의 값을 10으로 변경합니다.

 이 때, main 메서드에서도 arr[0]의 값이 변경됩니다.

public class CallByReferenceExample {
    public static void main(String[] args) {
        int[] arr = {5};
        changeValue(arr);
        System.out.println(arr[0]); // 출력 결과: 10
    }

    public static void changeValue(int[] arr) {
        arr[0] = 10;
    }
}


정리

Call by Value: 
메서드 호출 시 인자로 전달되는 값의 복사본을 전달하는 방식으로,
자바에서 기본 자료형을 매개변수로 전달할 때 사용됩니다.

Call by Reference: 
메서드 호출 시 인자로 전달되는 값의 주소를 전달하는 방식으로, 
자바에서 객체(Object)를 매개변수로 전달할 때 사용됩니다.

따라서 개발자는 메서드 호출 시 매개변수를 전달하는 방식을 구분하여 적절한 방식을 선택해야 합니다.