본문 바로가기
JAVA

Call by Value vs Call by Reference

by 융디's 2024. 3. 31.
728x90
Call by Value vs Call by Reference

Call by Value vs Call by Reference

@2024.03.19

메서드에 매개변수로 어떤 것이 전달되는지에 따라 두 가지 방식으로 나뉜다.

Call by Value

💡
메서드의 매개변수로 이 복사되어 함수의 인자로 전달되는 방식
  • 매개 변수는 스택 영역에 새로운 변수로 할당되고, 그 값을 복사 받는다.
  • 메서드 내에서 값의 변경이 메서드 호출한 곳에 영향을 주지 않는다.
  • 예시
    public class CallByValueExample {
        public static void main(String[] args) {
            int x = 10;
            System.out.println("Before calling method, x = " + x);
            modifyValue(x);
            System.out.println("After calling method, x = " + x);
        }
        
        public static void modifyValue(int num) {
            num = num + 5;
            System.out.println("Inside method, num = " + num);
        }
    }

Call by Reference

💡
메서드의 매개변수로 참조가 인자로 전달되는 방식
  • 전달받은 변수가 메모리 영역에서 가리키는 주소 영역 자체를 넘겨받는다.
  • 메서드 내에서 값의 변경이 메서드 호출한 곳에 영향을 준다.
  • 예시
    public class CallByReferenceExample {
        public static void main(String[] args) {
            MyClass obj = new MyClass(10);
            System.out.println("Before calling method, obj.value = " + obj.value);
            modifyReference(obj); // Call by Reference
            System.out.println("After calling method, obj.value = " + obj.value);
        }
        
        public static void modifyReference(MyClass obj) {
            obj.value = obj.value + 5;
            System.out.println("Inside method, obj.value = " + obj.value);
        }
    }
    
    class MyClass {
        int value;
        
        MyClass(int value) {
            this.value = value;
        }
    }

728x90

'JAVA' 카테고리의 다른 글

클래스  (0) 2024.03.31
네이밍 컨벤션  (0) 2024.03.31
얕은복사 vs 깊은복사  (0) 2024.03.31
Scanner 클래스  (0) 2024.03.31
정적 변수 vs 인스턴스 변수  (0) 2024.03.31