본문 바로가기
Oracle 1z0-808 Exam

Oracle 1z0-808 Exam 2024: Question #1

by Status Code 2024. 2. 18.

질문 원본 내용

Question #1
Consider the following code:

class Product {
    double price;
}

public class Test {
    public void updatePrice(Product product, double price) {
        price = price * 2;
        product.price = product.price + price;
    }

    public static void main(String[] args) {
        Product prt = new Product();
        prt.price = 200;
        double newPrice = 100;

        Test t = new Test();
        t.updatePrice(prt, newPrice);
        System.out.println(prt.price + " : " + newPrice);
    }
}

What is the result?
A. 200.0 : 100.0
B. 400.0 : 200.0
C. 400.0 : 100.0
D. Compilation fails.

질문 번역

Oracle 1z0-808 Exam: Question #1 해설

다음 Java 코드에 대한 문제입니다:

class Product {
    double price;
}

public class Test {
    public void updatePrice(Product product, double price) {
        price = price * 2;
        product.price = product.price + price;
    }

    public static void main(String[] args) {
        Product prt = new Product();
        prt.price = 200;
        double newPrice = 100;

        Test t = new Test();
        t.updatePrice(prt, newPrice);
        System.out.println(prt.price + " : " + newPrice);
    }
}

실행 결과, 어떤 출력이 나올까요?

A. 200.0 : 100.0
B. 400.0 : 200.0
C. 400.0 : 100.0
D. Compilation fails.

정답: C. 400.0 : 100.0

해설

이 코드는 Java의 변수 전달 방식, 특히 "값에 의한 전달(call by value)"와 객체 참조의 처리 방식을 이해하는 데 중요한 문제입니다.

  • 변수 전달 방식 : Java에서 기본 타입 변수는 값에 의한 전달 방식으로 처리됩니다. 이는 updatePrice 메소드에 newPrice를 전달할 때 적용됩니다. 메소드의 price 매개변수는 newPrice의 값 100을 복사하여 받습니다. 따라서 메소드 내에서 price 값을 변경해도, 원본 newPrice 값에는 영향을 주지 않습니다.
  • 객체 참조 처리 : 반면, Product 객체는 참조 값에 의한 전달 방식으로 처리됩니다. 여기서 중요한 점은 Java가 객체 참조를 전달할 때 참조의 "값"을 전달한다는 것입니다. 즉, updatePrice 메소드의 product 매개변수는 prt 객체를 가리키는 참조의 복사본을 받습니다. 이 참조를 통해 product.price를 변경하면 원본 prt 객체의 상태가 변경됩니다.

updatePrice 메소드에서 price는 처음에 100이었지만, 2배 증가하여 200이 됩니다. 이 새로운 값 200은 prt 객체의 price에 더해져, 최종적으로 prt.price는 400이 됩니다. 하지만 newPrice는 메소드 내에서 변경된 price 변수와는 독립적으로 여전히 100으로 남아 있습니다.

따라서 최종 출력은 400.0 : 100.0이 됩니다. 이는 Java의 기본 타입 변수가 값에 의해 전달되며, 객체 참조는 참조 값이 전달되지만 실제 객체를 가리키는 참조로 작동하여 객체의 상태를 변경할 수 있다는 중요한 개념을 보여줍니다.

나머지 선택지는 이러한 Java의 변수 전달 메커니즘을 정확히 반영하지 않기 때문에 정답이 될 수 없습니다.

댓글