본문 바로가기
CS/JAVA

기술면접2 : Call by value와 Call by reference

by agong이 2025. 7. 1.

Call by value호출 방식은 함수가 호출 될 때 전달 되는 변수 값을 복사해서 함수 인자로 전달합니다. 이때 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에 local value 속성을 가집니다.

 

Call by reference는 함수가 호출 될 때 전달 되는 변수의 참조 값을 전달합니다. 따라서 함수 안에서 해당 인자 값이 변경되면, 전달된 객체의 값도 변경됩니다. 

 

자바의 경우는 항상 Call by value호출 방식을 사용합니다. reference Type을 넘길 때에도 해당 객체의 주소값을 복사해서 전달하는 것이기 때문에, 객체 자체를 변경할 수는 없습니다.

 

import java.util.*;
public class test {

    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        callByValue(arr);
        System.out.println(arr.get(0)); //1을 출력
    }

    private static void callByValue(List<Integer> a) {
        a = new ArrayList<>();
        a.add(3);
    }
}

 

정리

Call by value의 경우, 데이터 값을 복사해서 함수로 전달하기 때문에 원본 데이터가 변경될 가능성이 없다. 하지만 인자를 넘겨줄 때마다 메모리 공간을 할당해야해서 메모리 공간을 더 잡아먹는다.

Call by reference의 경우 메모리 공간 할당 문제는 해결했지만, 원본 값이 변경될 수 있다는 위험이 존재한다.

Spring에서는 Call By Value만을 제공한다.

'CS > JAVA' 카테고리의 다른 글

기술 면접 3 : Primitive type & Reference type  (1) 2025.07.01
기술면접1 : JAVA의 컴파일 과정  (1) 2025.06.28

댓글