이번에도 추상클래스, 추상 메소드를 사용하여 추상화된 프로그램을 구현해볼 것이다.
기본적으로 자동차 모델 클래스를 만든다음 좋은 차의 버전과 비교적 Low한 차의 버전 클래스를 만들어서 구현해 볼 것이다.
먼저 스펙을 미리 상수로 저장해둘 것 이다.
CarSpecs.java
package com.javalec.makecarex;
public class CarSpecs {
public static final String COLOR_RED = "레드";
public static final String COLOR_BLUE = "블루";
public static final String TIRE_NORMAL = "일반타이어";
public static final String TIRE_WILD = "광폭타이어";
public static final int DISPLACEMENT_2000 = 2000;
public static final int DISPLACEMENT_2200 = 2200;
public static final String HANDLE_NORMAL = "일반핸들";
public static final String HANDLE_POWER = "파워핸들";
}
자동차의 스펙을 상수로 나타내었다.
StarCar.java
package com.javalec.makecarex;
public abstract class StarCar {
public String color;
public String tire;
public int displacement;
public String handle;
public StarCar(String color, String tire, int displacement, String handle) {
this.color = color;
this.tire = tire;
this.displacement = displacement;
this.handle = handle;
}
public abstract void getSpec();
}
기본적으로 필요한 변수들과 getSpec()이라는 추상 메소드를 선언해주었다. 이것을 이용해서 각각 low, high 스텍의 차 클래스를 설정할 수 있다.
StarCarHighGrade.java
package com.javalec.makecarex;
public class StarCarHighGrade extends StarCar {
private int tax = 1000;
public StarCarHighGrade(String color, String tire, int displacement, String handle) {
super(color, tire, displacement, handle);
}
@Override
public void getSpec() {
System.out.println("****************************");
System.out.println("색상 : " + color);
System.out.println("타이어 : " + tire);
System.out.println("배기량 : " + displacement);
System.out.println("핸들 : " + handle);
if(displacement > 2000) tax = 1500;
System.out.println("세금 : " + tax);
System.out.println("****************************");
}
}
어차피 두 차의 클래스는 거의 동일한 코드일 것이다. 기본적으로 세금을 1000을 내는데 displacement 이 2000천 이상 즉, high 등급의 차이면 1500을 낸다.
StarCarLowGrade.java
package com.javalec.makecarex;
public class StarCarLowGrade extends StarCar {
private int tax = 1000;
public StarCarLowGrade(String color, String tire, int displacement, String handle) {
super(color, tire, displacement, handle);
}
@Override
public void getSpec() {
System.out.println("****************************");
System.out.println("색상 : " + color);
System.out.println("타이어 : " + tire);
System.out.println("배기량 : " + displacement);
System.out.println("핸들 : " + handle);
if(displacement > 2000) tax = 1500;
System.out.println("세금 : " + tax);
System.out.println("****************************");
}
}
코드가 같은 것을 볼 수 있다. 이것또한 똑같은 로직으로 이루어져있다. 메인을 보자.
MainCalss.java
package com.javalec.makecarex;
public class MainClass {
public static void main(String[] args) {
StarCar starCarLowGrade = new StarCarLowGrade(CarSpecs.COLOR_BLUE, CarSpecs.TIRE_NORMAL, CarSpecs.DISPLACEMENT_2000, CarSpecs.HANDLE_POWER);
StarCar starCarHighGrade = new StarCarHighGrade(CarSpecs.COLOR_RED, CarSpecs.TIRE_WILD, CarSpecs.DISPLACEMENT_2200, CarSpecs.HANDLE_NORMAL);
starCarLowGrade.getSpec();
starCarHighGrade.getSpec();
}
}
메인클래스에서 상수들로 high스펙의 자동차엔 high스펙에 해당하는 상수를, low스펙의 자동차엔 low스펙에 해당하는 상수를 주었다. getSpec()메소드 호출해서 출력할 수 있다.
출력
색상 : 블루
타이어 : 일반타이어
배기량 : 2000
핸들 : 파워핸들
세금 : 1000
색상 : 레드
타이어 : 광폭타이어
배기량 : 2200
핸들 : 일반핸들
세금 : 1500
위처럼 출력되는 것을 확인 할 수 있다.
저번 식대 프로그램이랑 비슷한 로직으로 이루어진 자동차 프로그램을 구현해보았다.