Oracle 1z0-808 Exam : Question #9 해설
질문 원본 내용
Given these two classes:
public class Customer {
ElectricAccount acct = new ElectricAccount();
public void useElectricity(double kWh) {
acct.addKWh(kWh);
}
}
public class ElectricAccount {
private double kWh;
private double rate = 0.07;
private double bill;
// methods should be written here at line n1
}
Any amount of electricity used by a customer (represented by an instance of the Customer class) must contribute to the customer's bill (represented by the member variable bill) through the useElectricity method. An instance of the Customer class should never be able to tamper with or decrease the value of the member variable bill. How should you write methods in the ElectricAccount class at line n1 so that the member variable bill is always equal to the value of the member variable kWh multiplied by the member variable rate?
A.
public void addKWh(double kWh) {
this.kWh += kWh;
this.bill = this.kWh * this.rate;
}
B.
public void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
this.bill = this.kWh * this.rate;
}
}
C.
private void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
this.bill = this.kWh * this.rate;
}
}
D.
public void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
setBill(this.kWh);
}
}
public void setBill(double kWh) {
bill = kWh * rate;
}
질문 번역
다음은 두 개의 Java 클래스에 대한 코드 예시입니다:
public class Customer {
ElectricAccount acct = new ElectricAccount();
public void useElectricity(double kWh){
acct.addKWh(kWh);
}
}
public class ElectricAccount {
private double kWh;
private double rate = 0.07;
private double bill;
// 여기에 메소드를 작성합니다. // line n1
}
그리고 다음은 이러한 코드를 어떻게 작성해야 하는지에 대한 설명입니다:
고객이 사용한 전기량(‘Customer’ 클래스의 인스턴스에 의해 표현됨)은 useElectricity
메소드를 통해 고객의 요금(‘bill’ 멤버 변수로 표현됨)에 반드시 반영되어야 합니다. ‘ElectricAccount’ 클래스의 인스턴스는 외부에서 ‘bill’ 멤버 변수의 값을 조작하거나 줄일 수 없어야 합니다. ‘ElectricAccount’ 클래스의 line n1에서 어떻게 메소드를 작성해야 ‘bill’ 멤버 변수의 값이 항상 ‘kWh’ 멤버 변수에 ‘rate’ 멤버 변수를 곱한 값과 동일하게 유지되는지에 대한 설명입니다.
다음 중 어떤 메소드가 line n1에서 요구 사항을 충족합니까?
A.
public void addKWh(double kWh) {
this.kWh += kWh;
this.bill = this.kWh*this.rate;
}
B.
public void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
this.bill = this.kWh * this.rate;
}
}
C.
private void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
this.bill = this.kWh*this.rate;
}
}
D.
public void addKWh(double kWh) {
if (kWh > 0) {
this.kWh += kWh;
setBill(this.kWh);
}
}
public void setBill(double kWh) {
bill = kWh*rate;
}
정답: B와 D
해설
이 문제에서는 ElectricAccount
클래스 내부의 bill
변수를 보호하고 적절히 관리할 수 있는 메소드를 작성하는 방법을 묻고 있습니다.
- 옵션 A는
public
메소드를 제공하지만, 양수 값에 대한 검사가 없어서 잘못된 값을 전달할 수 있습니다. - 옵션 B는
addKWh
메소드가public
이고 kWh가 양수일 때만 kWh를 추가하고 요금을 계산합니다. 이는 외부에서bill
에 직접 접근하지 못하게 하고,kWh
의 값을 검증함으로써bill
멤버 변수의 값을 조작할 수 없도록 합니다. - 옵션 C는 메소드를
private
으로 만들어 클래스 외부에서는 이 메소드를 호출할 수 없으므로,Customer
클래스가useElectricity
메소드를 통해 전기 사용량을 추가할 수 없게 만듭니다. - 옵션 D는 kWh가 양수일 때만
addKWh
메소드를 통해 kWh를 추가하고, 별도의setBill
메소드를 통해 요금을 설정합니다.setBill
메소드는private
이므로 클래스 외부에서 직접 호출할 수 없어bill
멤버 변수를 보호합니다. 이 방법도 요구 사항을 만족합니다.
따라서, 요구 사항을 충족하는 메소드 구현은 옵션 B와 D입니다.
'Oracle 1z0-808 Exam' 카테고리의 다른 글
Oracle 1z0-808 Exam 2024: Question #11 (0) | 2024.02.23 |
---|---|
Oracle 1z0-808 Exam 2024: Question #10 (0) | 2024.02.21 |
Oracle 1z0-808 Exam 2024: Question #8 (0) | 2024.02.20 |
Oracle 1z0-808 Exam 2024: Question #7 (0) | 2024.02.19 |
Oracle 1z0-808 Exam 2024: Question #6 (0) | 2024.02.19 |
댓글