본문 바로가기
전산 관련 시험/프로그래밍(C, JAVA, Python)

[JAVA] 프로그래밍 언어 (ex. 29) 값 전달 vs 참조 전달

by 응_비 2024. 10. 15.



코드 설명:

class A { 
    int x;
}

public class Eunwoo {
    public static void main(String[] args) {
        A a = new A();         // 새로운 A 객체 생성
        a.x = 50;              // a.x에 50을 할당
        change1(a.x);          // a.x의 값(50)을 change1 메소드로 전달
        System.out.println(a.x);  // a.x의 값 출력 (50 출력)
        change2(a);            // 객체 a의 참조를 change2 메소드로 전달
        System.out.println(a.x);  // a.x의 값 출력 (100 출력)
    }

    static void change1(int x) {
        x = 100;               // 로컬 변수 x 값 변경 (a.x는 영향 없음)
        System.out.println(x);  // 100 출력
    }

    static void change2(A a) {
        a.x = 100;             // 객체 a의 x 값 변경
        System.out.println(a.x);  // 100 출력
    }
}



실행 결과 설명:

1. a.x는 처음에 50으로 설정됩니다.
2. change1(a.x) 메소드는 값 자체를 넘겨주기 때문에 로컬 변수 x만 100으로 변경되고, a.x는 여전히 50입니다.
3. System.out.println(a.x);는 change1 호출 후에 a.x가 변하지 않았기 때문에 50을 출력합니다.
4. change2(a)는 객체 a의 참조를 넘겨주므로 실제로 a.x의 값이 100으로 변경됩니다.
5. System.out.println(a.x);는 change2 호출 후 a.x가 100으로 변경되었기 때문에 100을 출력합니다.

실행 결과:

100
50
100

이미지에서 손으로 적힌 내용은 값 전달(call by value)과 참조 전달(call by reference)의 차이를 설명하며, 위 코드의 실행 흐름과 일치합니다.

댓글