반응형
자바에서 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
반응형
'IT > 개발자 면접' 카테고리의 다른 글
| 대규모 트래픽을 효율적으로 처리하기 위해 어떤 접근과 기술을 사용할 수 있나요? (0) | 2025.12.10 |
|---|---|
| SLOW SQL 수정할 때 고려사항 (1) | 2025.11.22 |
| 웹 서버 취약점 목록 및 요약 (0) | 2025.11.21 |
| java Overloading과 Overriding (0) | 2025.11.20 |
| DB 복합 인덱스 (0) | 2025.11.20 |