▣ LAB · SPRING

인자 전달 직접 실험

Call by Value — 실습 / 약 15분

📍 지금 어디를 만지고 있나요?
브라우저
Tomcat
JVM
Controller
DB

사전 준비

이번 실습의 목표

세 가지 케이스(기본형 / 객체 필드 변경 / 참조 교체)를 직접 실행하며 결과를 눈으로 확인합니다.

1
테스트 클래스 만들기

CallByValue.java 파일에 다음 코드:

class User {
    String name;
    User(String name) { this.name = name; }
}

public class CallByValue {

    static void changeNumber(int x) { x = 999; }
    static void changeName(User u) { u.name = "Bob"; }
    static void replaceUser(User u) { u = new User("Bob"); }

    public static void main(String[] args) {
        // 케이스 1: 기본형
        int a = 1;
        changeNumber(a);
        System.out.println("케이스 1: " + a);

        // 케이스 2: 객체 필드 변경
        User user1 = new User("Alice");
        changeName(user1);
        System.out.println("케이스 2: " + user1.name);

        // 케이스 3: 참조 교체
        User user2 = new User("Alice");
        replaceUser(user2);
        System.out.println("케이스 3: " + user2.name);
    }
}
2
컴파일 + 실행
$ javac CallByValue.java
$ java CallByValue
케이스 1: 1
케이스 2: Bob
케이스 3: Alice
CHECKPOINT
  • 케이스 1: 왜 999 가 아니라 1 인가요? (정답: 기본형은 값 복사, 원본 무관)
  • 케이스 2: 왜 Bob 으로 바뀌었나요? (정답: 같은 객체의 필드를 변경)
  • 케이스 3: 왜 Alice 그대로인가요? (정답: 매개변수 u 가 가리키는 곳만 다른 객체로 변경. 원본 user2 는 무관)
3
한 줄 외움법
  • 객체 내용 변경 = 원본에 보임
  • 변수에 다른 객체 대입 = 원본에 안 보임

실습 완료 체크리스트

세 케이스를 직접 실행하고 결과를 봤다
각 결과의 이유를 한 문장으로 말할 수 있다
자바가 항상 Call by Value 라는 사실을 안다