본문 바로가기
프로그래밍/Java

[Java] Call by Reference와 Call by Value의 차이

by 시간많은백수 2023. 10. 12.
반응형

Call by Reference와 Call by Value는 프로그래밍 언어에서 함수나 메소드로 값을 전달하는 방식에 관한 중요한 개념입니다. 두 방식의 주요 차이점은 값을 어떻게 전달하고 메모리에 어떻게 저장하는가에 있습니다. 이제 두 방식을 자세히 알아보겠습니다.

 

💡 Call by Value (값에 의한 호출)

  • 매개변수로 전달되는 값(인자)의 복사본이 함수에 전달됩니다.
  • 이 복사본을 함수 내에서 사용하며, 함수 내에서 변수 값 변경은 호출자(caller)에게 영향을 미치지 않습니다.
  • Call by Value는 주로 기본 데이터 타입(정수, 실수, 불린 등)에 대해 적용됩니다.
  • 호출자와 호출된 함수가 서로 다른 메모리 공간에 위치한 복사본을 사용하는 방식입니다.
1
2
3
4
5
6
7
8
9
10
11
void modifyValue(int x) {
    x = 10; // 함수 내에서 x를 변경
}
 
int main() {
    int num = 5;
    modifyValue(num);
    // num의 값은 여전히 5입니다.
    return 0;
}
 
cs

 

💡 Call by Reference (참조에 의한 호출)

  • 매개변수로 전달되는 것은 변수의 주소(참조)입니다. 함수는 해당 변수에 직접 접근하고 변경할 수 있습니다.
  • 함수 내에서 변수 값의 변경은 호출자에게 영향을 미칩니다.
  • Call by Reference는 주로 객체, 배열 등의 참조 타입에 대해 적용됩니다.
  • 호출자와 호출된 함수가 동일한 메모리 위치를 참조하며, 변수에 대한 변경이 서로 영향을 미치는 방식입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Student {
    int id;
 
    Student(int id) {
        this.id = id;
    }
}
 
void modifyReference(Student student) {
    student.id = 100// student 객체의 id 변경
}
 
public static void main(String[] args) {
    Student s = new Student(42);
    modifyReference(s);
    // s.id는 이제 100입니다.
}
 
 
cs

 

💻결론

요약하면, Call by Value는 값 복사본을 함수로 전달하는 방식이며, Call by Reference는 변수의 참조를 전달하는 방식입니다. Call by Reference는 객체나 배열과 같은 자료 구조를 다룰 때 많이 사용되며, 값에 의한 호출과 참조에 의한 호출의 차이를 이해하는 것은 프로그램 동작 이해에 중요합니다.

반응형