학습 목표
- 자바의 데이터 전달 방식을 안다
- 참조형도 「값 복사」가 적용됨을 안다
- 메서드 안 변경이 원본에 보일지 판단할 수 있다
1. 핵심 규칙
자바는 항상 값 복사 (Call by Value). 단, 「값」의 정체가 다름:
- 기본형 → 숫자 그 자체
- 참조형 → 객체의 「주소」
2. 세 가지 케이스
| 케이스 | 결과 | 이유 |
| 기본형 변경 | 원본 그대로 | 값(숫자) 복사 → 사본만 변경 |
| 객체 필드 변경 | 원본도 변경 | 같은 객체 가리킴 → 같은 메모리 변경 |
참조 교체 (u = new ...) | 원본 그대로 | 매개변수만 다른 곳 가리킴 |
3. 코드 예시
int a = 1;
changeNumber(a); // 매개변수 x = 1 복사 → x = 999 → a 무관
// 결과: a == 1
User u = new User("A");
changeName(u); // 매개변수 같은 객체 가리킴 → name 변경
// 결과: u.name == "B"
User u = new User("A");
replaceUser(u); // 매개변수만 새 객체 가리킴 → 원본 무관
// 결과: u.name == "A"
한 줄 외움: 객체 「내용 변경」 = 보임 / 변수에 「다른 객체 대입」 = 안 보임.
학습 확인 체크리스트
- 자바가 Call by Value 라는 사실을 안다
- 세 케이스의 결과와 이유를 말할 수 있다
- 객체 필드 변경과 참조 교체의 차이를 안다