2026-03-07
Call by Value와 Call by Reference
Call by Value (값에 의한 호출)
변수의 값을 복사해서 전달하는 방식
- 원본 값 변경되지 않음
- 함수 내부에서 변경해도 외부 변수 영향 없음
void change(int x) {
x = 20;
}
int a = 10;
change(a);
결과
a = 10
⇒ 값이 복사됐기 때문
Call by Reference (참조에 의한 호출)
변수의 주소(참조값)를 전달하는 방식
- 함수에서 값 변경하면 원본 값도 변경됨
예
void change(int &x) {
x = 20;
}
결과
a = 20
⇒ 같은 메모리를 가리키기 때문
Java는 어떤 방식인가?
⇒ Java는 무조건 Call by Value다
- 하지만 객체를 넘기면 참조값이 복사되어 전달된다.
Java에서 헷갈리는 이유
예
class User {
int age;
}
void change(User u) {
u.age = 30;
}
호출
User user = new User();
change(user);
결과
user.age = 30
실제 동작
Java는 객체의 “참조값”을 복사해서 전달한다.
user ----> 객체
함수에 전달될 때
u ----> 같은 객체
그래서 객체 내부 값은 바뀐다.
void change(User u) {
u = new User();
}
하지만 이렇게 하면 원본 user는 안 바뀐다.
요약
Call by Value는 값을 복사해서 전달하는 방식이고, Call by Reference는 변수의 주소를 전달하는 방식입니다. Java는 기본적으로 Call by Value만 지원하며, 객체를 전달할 경우 객체의 참조값이 복사되어 전달됩니다.
참고자료
- https://velog.io/@kwontae1313/JS%EC%9D%98-Call-by-Value-%EC%99%80-Call-by-Reference
- https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%9E%90%EB%B0%94%EB%8A%94-Call-by-reference-%EA%B0%9C%EB%85%90%EC%9D%B4-%EC%97%86%EB%8B%A4-%E2%9D%93
- https://f-lab.kr/insight/understanding-call-by-value-and-reference
- https://bcp0109.tistory.com/360