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

results matching ""

    No results matching ""