질문 원본 내용
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의 변수 전달 메커니즘을 정확히 반영하지 않기 때문에 정답이 될 수 없습니다.
'Oracle 1z0-808 Exam' 카테고리의 다른 글
Oracle 1z0-808 Exam 2024: Question #6 (0) | 2024.02.19 |
---|---|
Oracle 1z0-808 Exam 2024: Question #5 (0) | 2024.02.18 |
Oracle 1z0-808 Exam 2024: Question #4 (0) | 2024.02.18 |
Oracle 1z0-808 Exam 2024: Question #3 (1) | 2024.02.18 |
Oracle 1z0-808 Exam 2024: Question #2 (0) | 2024.02.18 |
댓글