IT/개발자 면접

java Call by Value와 Call by Reference

Collin 2025. 11. 21. 08:00
반응형

자바에서 Call by Value(값에 의한 호출)와 Call by Reference(참조에 의한 호출)의 차이는 '무엇이 전달되는가'에 있습니다. 자바는 기본적으로 Call by Value만 지원합니다.


🔍 핵심 차이 요약

항목 Call by Value (값에 의한 호출) Call by Reference (참조에 의한 호출)

전달 방식 변수의 값을 복사해서 전달 변수의 *주소(참조)*를 전달
원본 데이터 영향 메서드 내에서 변경해도 원본에 영향 없음 메서드 내에서 변경 시 원본 데이터도 변경됨
자바에서의 지원 ✅ 기본형(primitive type)에 적용됨 ❌ 자바는 엄밀히 말해 Call by Reference를 지원하지 않음
객체 전달 시 객체의 참조값이 복사되어 전달됨 → 객체 내부는 변경 가능 참조 자체를 바꾸는 건 불가능 (새 객체 할당 시 원본 영향 없음)

🧪 예시로 이해하기

class Dog {
    String name;
}

public class Test {
    public static void changeName(Dog d) {
        d.name = "Max"; // 객체 내부 값 변경 → 원본 영향 O
        d = new Dog();  // 새로운 객체 할당 → 원본 영향 X
        d.name = "Charlie";
    }

    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name = "Buddy";
        changeName(dog);
        System.out.println(dog.name); // 결과: "Max"
    }
}
  • d.name = "Max"는 원본 객체의 필드를 변경 → 영향 있음
  • d = new Dog()는 참조 자체를 바꿈 → 원본 객체에는 영향 없음

🧠 정리

  • 자바는 모든 메서드 호출을 Call by Value로 처리합니다.
  • 객체를 전달할 때도 *참조값(reference)*을 복사해서 전달하므로, 객체의 내부 상태는 변경 가능하지만, 참조 자체를 바꾸면 원본에는 영향 없음입니다.
  • C++ 같은 언어는 진짜 Call by Reference를 지원하지만, 자바는 그렇지 않습니다

 

 

728x90
반응형