정답
public class Taxi implements Meter { public void start() { } public int stop(int distance) { return distance * 2; } }
해설
인터페이스를 구현하기 위한 키워드는 implements입니다. Taxi가 Meter 인터페이스를 구현하기 위해서는 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;
해설
인터페이스에 선언한 변수는 무조건 상수로 처리됩니다. 이렇게 선언한 변수는 실행 중에 값을 바꿀 수 없습니다. 실행 중에 값을 바꾸고 싶다면 어떻게 해야 할까요? 인터페이스에 선언하면 안 되겠죠? 이 문제는 인터페이스에 선언한 변수를 어떻게 사용하는지 확인하는 문제였습니다.