개발공부/CS

Call by Value란?

카슈밀 2025. 2. 16. 00:23
반응형

📌 Call by Value란?

 

**Call by Value(값에 의한 호출)**은 함수 호출 시, 인자로 전달된 값을 복사하여 함수 내부에서 사용하는 방식이야.

➡️ 즉, 함수가 인자로 받은 변수의 복사본을 사용하므로, 함수 내부에서 변경해도 원래 변수에는 영향을 주지 않아!

 

✅ Call by Value 특징

 

값이 복사됨 → 원본 데이터가 변경되지 않음

독립적인 메모리 공간 사용 → 함수 내 변수는 원본과 별개

✔ **기본 데이터 타입(Primitive Type)**에서 주로 사용됨 (예: int, float, char 등)

 

📌 Call by Value 예제 (Java)

 

💡 값을 복사해서 전달하기 때문에 원래 변수에는 영향이 없음!

 

class Example {

    static void modifyValue(int num) {

        num = 10; // 여기서 변경해도 원본 변수에는 영향 없음

        System.out.println("함수 내부 num: " + num);

    }

 

    public static void main(String[] args) {

        int num = 5;

        modifyValue(num);

        System.out.println("함수 호출 후 num: " + num); // 원본 값 그대로 5

    }

}

 

✅ 실행 결과

 

함수 내부 num: 10

함수 호출 후 num: 5  // 원본 값 유지됨

 

📌 함수 내부에서 num을 10으로 바꿨지만, 원래 변수(num = 5)는 그대로 남아있음!

 

📌 Call by Value vs. Call by Reference 차이점

 

구분 Call by Value (값에 의한 호출) Call by Reference (참조에 의한 호출)

데이터 전달 방식 값 자체를 복사하여 전달 변수의 참조(주소)를 전달

원본 데이터 변경 여부 변경되지 않음 변경됨

사용되는 데이터 타입 기본형 데이터 (int, float 등) 객체, 배열, 리스트 등

메모리 할당 새로운 메모리 공간 할당 같은 메모리를 참조

 

📌 Call by Reference 예제 (Java)

 

💡 객체는 참조(reference)로 전달되므로 함수 내부에서 변경하면 원본도 바뀜!

 

class Example {

    static void modifyArray(int[] arr) {

        arr[0] = 10; // 원본 배열이 변경됨

    }

 

    public static void main(String[] args) {

        int[] arr = {5, 6, 7};

        modifyArray(arr);

        System.out.println("함수 호출 후 arr[0]: " + arr[0]); // 10으로 변경됨

    }

}

 

✅ 실행 결과

 

함수 호출 후 arr[0]: 10  // 원본 배열 변경됨

 

📌 배열은 참조형 데이터이므로 함수 내부에서 변경하면 원본도 바뀜!

 

📌 결론

 

Call by Value → 값이 복사됨, 원본 데이터 변경 X (기본 데이터 타입)

Call by Reference → 참조가 전달됨, 원본 데이터 변경 O (객체, 배열 등)

 

이제 차이 확실히 알겠지? 😊 더 궁금한 거 있으면 질문해 줘! 🚀🔥

728x90