CS Study 2주차: [Java] Call by value와 Call by reference

hjern·2024년 2월 25일
0

CS Study

목록 보기
2/10

대원칙: 자바는 항상 변수의 값을 복사해서 대입한다.

Call by value(값에 의한 호출)

Call by Value 방식은 함수가 호출될 때 실제 함수에 전달되는 매개변수의 값은 복사본이며, 따라서 함수 내에서 매개변수가 변경되더라도 원본 값에 영향을 주지 않는다. 이 방식은 원본 값에 영향을 주지 않아 값의 불변성을 유지 하는 데 용이하다. 주로 Java, C, C++와 같은 프로그래밍 언어에서 기본 데이터 타입 (정수, 실수, 불리언 등)을 다룰 때 함께 사용된다.

  • 장점 : 복사하여 처리하기 때문에 안전하다. 원래의 값이 보존이 된다.
  • 단점 : 복사를 하기 때문에 메모리가 사용량이 늘어난다.

public class CallByValueExample {
    public static void increment(int x) {
        x++;
        System.out.println("Inside method: " + x);
    }

    public static void main(String[] args) {
        int num = 5;
        increment(num);
        System.out.println("Outside method: " + num);
    }
}

/*
Inside method: 6
Outside method: 5
*/

Call by reference(참조에 의한 호출)

Call by Reference 방식은 함수를 호출할 때 매개변수의 참조 값을 함수 내부로 전달하는 방식이다. 변수의 주소(참조)를 전달하기 때문에, 함수 내에서 해당 변수의 값을 변경하면 호출한 쪽의 변수 값도 변경된다. 주로 배열이나 객체 같은 참조형 데이터 타입을 다룰 때 사용된다.

  • 장점 : 복사하지 않고 직접 참조를 하기에 빠르다.
  • 단점 : 직접 참조를 하기에 원래 값이 영향을 받는다(리스크).

import java.util.ArrayList;

public class CallByReferenceExample {
    public static void changeList(ArrayList<Integer> list) {
        list.add(4);
        System.out.println("Inside method: " + list);
    }

    public static void main(String[] args) {
        ArrayList<Integer> myList = new ArrayList<>();
        myList.add(1);
        myList.add(2);
        myList.add(3);
        
        changeList(myList);
        System.out.println("Outside method: " + myList);
    }
}

/*
Inside method: [1, 2, 3, 4]
Outside method: [1, 2, 3, 4]
*/

예상 질문

  1. Call by value와 Call by reference의 차이는 무엇인가요?
    ✅ Call by value: 함수에 값을 전달할 때, 값의 복사본이 함수로 전달됩니다. 함수 내에서 매개변수의 값이 변경되어도 원본 변수에는 영향을 주지 않습니다.
    Call by reference: 함수에 변수의 참조(메모리 주소)가 전달됩니다. 함수 내에서 매개변수의 값이 변경되면 원본 변수의 값도 변경됩니다.

  2. Call by value와 Call by reference는 어떤 상황에서 사용되나요? 각각의 장단점은 무엇인가요?
    ✅ Call by value는 변수의 값이 변경되면 안 되는 경우에 사용됩니다. 장점으로는 예측 가능성이 높고 변수의 값이 보존되지만, 복사본이 생성되어 메모리 소비가 높을 수 있습니다.
    Call by reference는 함수 내에서 변수의 값을 변경해야 하는 경우에 사용됩니다. 메모리 사용량이 낮고 복사 시간이 없지만, 원본 변수의 값이 변경될 수 있어 예측하기 어려울 수 있습니다.

  3. Call by value와 Call by reference를 구현하는 방법에 대해 설명해주세요.
    ✅ Call by value는 값의 복사본을 전달하는 것으로 구현됩니다. 함수 내에서 매개변수로 받은 값을 수정하더라도 원본 값은 변경되지 않습니다.
    Call by reference는 변수의 참조(메모리 주소)를 전달하는 것으로 구현됩니다. 함수 내에서 매개변수를 통해 받은 변수를 수정하면 원본 변수의 값도 변경됩니다.

  4. Call by value와 Call by reference가 메모리 관리 측면에서 어떻게 다른가요?
    ✅ Call by value는 값의 복사본을 전달하므로 메모리 사용량이 더 많을 수 있습니다.
    Call by reference는 변수의 참조를 전달하므로 메모리 사용량이 적고, 효율적입니다.

profile
주니어의 굴레는 언제 벗어날 것인가

0개의 댓글