반응형
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는 객체나 배열과 같은 자료 구조를 다룰 때 많이 사용되며, 값에 의한 호출과 참조에 의한 호출의 차이를 이해하는 것은 프로그램 동작 이해에 중요합니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java] HashMap vs HashTable vs ConcurrentHashMap의 차이 (2) | 2023.10.13 |
---|---|
[Java] Java가 Call by Value인 이유 (0) | 2023.10.12 |
[Java] CheckedException과 UncheckedException의 차이 (1) | 2023.10.11 |
[Java] Interface와 Abstract Class의 차이 (0) | 2023.10.11 |
[Java] 클래스, 객체, 인스턴스의 차이 (2) | 2023.10.10 |