더북(TheBook)

정답

public class Taxi implements Meter {
    public void start() {
    }
    public int stop(int distance) {
        return distance * 2;
    }
}

 

해설

인터페이스를 구현하기 위한 키워드는 implements입니다. TaxiMeter 인터페이스를 구현하기 위해서는 Taxi를 정의할 때 implements Meter라고 정의해야 합니다. 인터페이스를 구현하고 난 뒤에는 인터페이스가 정의한 메서드를 모두 구현해야 합니다. Meter 인터페이스는 start(), stop() 메서드를 정의하므로 Taxi 클래스는 두 메서드를 반드시 구현해야 합니다. stop 메서드의 요구 사항이 distance × 2로 요금을 계산해서 리턴하는 것이므로 요구 사항에 맞게 메서드를 구현합니다.

 

 

문제 2 다음 코드를 실행해보세요. TaxiExam.java의 4행에서 "cannot assign a value to final variable BASE_FARE"라는 에러가 발생합니다. Meter 인터페이스에서 정의한 BASE_FARE(기본요금)라는 변수의 값을 변경하려고 하기 때문입니다. 인터페이스에서 정의한 변수는 모두 상수이기 때문에 변경할 수 없습니다.

BASE_FARE의 값을 변경하고 싶으면 어떻게 해야 할까요? BASE_FARE를 정의한 부분을 Meter 인터페이스가 아닌 Taxi 클래스로 옮기면 됩니다. 한번 옮겨보세요.

package javaStudy;
public interface Meter {
    public int BASE_FARE = 3000; 
    // 기본요금(인터페이스에 정의한 변수는 상수라서 변경할 수 없습니다.)
    public abstract void start();
    public abstract int stop(int distance);
}
package javaStudy;
public class Taxi implements Meter{
    public void start() {
        System.out.println("운행을 시작합니다.");
    }

    public int stop(int distance) {
        int fare = BASE_FARE + distance * 2;
        System.out.println("운행을 종료합니다. 요금은 " + fare + "원입니다.");
        return fare;
    }
}
package javaStudy;
public class TaxiExam{
    public static void main(String []args) {
        Taxi taxi = new Taxi();
        System.out.println("기본요금 변경 전!!");
        taxi.stop(20);
        taxi.BASE_FARE = 2500;
        System.out.println("기본요금 변경 후!!");
        taxi.stop(20); 
    }
}

 

실행결과

기본요금 변경 전!!
운행을 종료합니다. 요금은 3040원입니다.
기본요금 변경 후!!
운행을 종료합니다. 요금은 2540원입니다.

 

정답

Meter 인터페이스에 선언한 다음 코드를 Taxi 클래스로 옮깁니다.

 

public int BASE_FARE = 3000;

 

해설

인터페이스에 선언한 변수는 무조건 상수로 처리됩니다. 이렇게 선언한 변수는 실행 중에 값을 바꿀 수 없습니다. 실행 중에 값을 바꾸고 싶다면 어떻게 해야 할까요? 인터페이스에 선언하면 안 되겠죠? 이 문제는 인터페이스에 선언한 변수를 어떻게 사용하는지 확인하는 문제였습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.