Skip to content

Commit

Permalink
필드는private / getter,setter는 public으로 캡슐화 추가_8일차
Browse files Browse the repository at this point in the history
  • Loading branch information
Kim-HJ1986 committed May 16, 2022
1 parent 7e4c066 commit a82271b
Show file tree
Hide file tree
Showing 11 changed files with 231 additions and 40 deletions.
6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified out/production/OOP_homework/Bus.class
Binary file not shown.
Binary file modified out/production/OOP_homework/Car.class
Binary file not shown.
Binary file modified out/production/OOP_homework/Main.class
Binary file not shown.
Binary file added out/production/OOP_homework/Taxi.class
Binary file not shown.
33 changes: 18 additions & 15 deletions src/Bus.java
@@ -1,49 +1,52 @@
import java.util.UUID;

public class Bus extends Car implements PassengerBording, ChangeSpeed{

public Bus(int maxCnt, long price, String busNum, long gasAmount, long currentSpeed){
super(maxCnt, 0, price, busNum, gasAmount, currentSpeed, Status.DRIVE);
public Bus(int maxCnt, long price, long gasAmount, long currentSpeed){
super(maxCnt, 0, price, UUID.randomUUID().toString(), gasAmount, currentSpeed, Status.DRIVE);
}

public void reduceGasAmount(int amount){
this.gasAmount -= amount;
System.out.println("현재 주유량은: " + this.gasAmount);
setGasAmount(-amount);
System.out.println("현재 주유량은: " + getGasAmount());
}

public void changeBusStatus(boolean EndDrive) {
if( this.gasAmount <= 0 ){
this.status = Status.TOGARAGE;
if( getGasAmount() <= 0 ){
setStatus(Status.TOGARAGE);
setCurrentSpeed(-getCurrentSpeed());
System.out.println("주유량이 부족하여 차고지행으로 변경됩니다.");
}else if ( this.gasAmount < 10 ){
}else if ( getGasAmount()< 10 ){
System.out.println("주유가 필요합니다!!!");
}

if (EndDrive){
this.status = Status.TOGARAGE;
setStatus(Status.TOGARAGE);
System.out.println("차고지행으로 변경되었습니다.");
}
}

public void passengerBoarding(int passengerCnt){
if (this.status == Status.TOGARAGE){
if (getStatus() == Status.TOGARAGE){
System.out.println("현재 버스는 운행중이 아닙니다.");
}else{
if (maxCnt < this.currentCnt + passengerCnt) {
if (getMaxCnt() < getCurrentCnt() + passengerCnt) {
System.out.println("정원 초과입니다. 다음 버스를 탑승하세요");
}else{
this.currentCnt += passengerCnt;
System.out.println(passengerCnt + "명이 탑승하여 현재 " + this.currentCnt + "명 입니다.");
setCurrentCnt(passengerCnt);
System.out.println(passengerCnt + "명이 탑승하여 현재 " + getCurrentCnt() + "명 입니다.");
}
}
}

public void changeSpeed(long changeSpeedAmount){
System.out.println(this.toString());

if( this.gasAmount <10){
if( getGasAmount() <10){
System.out.println("쥬유량을 확인해주세요.");
}else{
this.currentSpeed += changeSpeedAmount;
System.out.println("현재 속도는 " + this.currentSpeed);
setCurrentSpeed(changeSpeedAmount);
System.out.println("현재 속도는 " + getCurrentSpeed());
}
}

Expand Down
91 changes: 79 additions & 12 deletions src/Car.java
@@ -1,23 +1,90 @@
public abstract class Car {
int maxCnt;
int currentCnt;
long price;
String carNum;
long gasAmount;
long currentSpeed;
Status status;
// 필드를 전부 private으로 제어하여 외부에서 필드 값을 바꾸지 못하게 막는다.
// Getter Setter만 public으로 제공하여 접근 가능하게 한다!
private int maxCnt;
private int currentCnt;
private long price;
private String carNum;
private long gasAmount;
private long currentSpeed;
private Status status;

//Getter Setter 변경!

public Car(int maxCnt, int currentCnt, long price, String carNum, long gasAmount, long currentSpeed, Status status) {

public void setMaxCnt(int maxCnt) {
this.maxCnt = maxCnt;
this.currentCnt = currentCnt;
}

public int getCurrentCnt() {
return currentCnt;
}

public void setCurrentCnt(int passengerCnt) {
this.currentCnt += passengerCnt;
}

public long getPrice() {
return price;
}

public void setPrice(long price) {
this.price = price;
this.carNum = carNum;
this.gasAmount = gasAmount;
this.currentSpeed = currentSpeed;
}

public long getGasAmount() {
return gasAmount;
}

public void setGasAmount(long gasAmount) {
this.gasAmount += gasAmount;
}

public long getCurrentSpeed() {
return currentSpeed;
}

public void setCurrentSpeed(long changeSpeedAmount) {
this.currentSpeed += changeSpeedAmount;
}

public Status getStatus() {
return status;
}

public void setStatus(Status status) {
this.status = status;
}

public int getMaxCnt() {
return maxCnt;
}

public String getCarNum() {
return carNum;
}

public void setCarNum(String carNum) {
this.carNum = carNum;
}

public Car(int maxCnt, int currentCnt, long price, String carNum, long gasAmount, long currentSpeed, Status status) {
setMaxCnt(maxCnt);
setCurrentCnt(currentCnt);
setPrice(price);
setCarNum(carNum);
setGasAmount(gasAmount);
setCurrentSpeed(currentSpeed);
setStatus(status);
}

public Car(String carNum, long gasAmount, long currentSpeed, Status status){
setCarNum(carNum);
setGasAmount(gasAmount);
setCurrentSpeed(currentSpeed);
setStatus(status);
}

@Override
public String toString() {
return "Car{" +
Expand Down
2 changes: 1 addition & 1 deletion src/ChangeSpeed.java
@@ -1,3 +1,3 @@
public interface ChangeSpeed {
public void changeSpeed(long changeSpeedAmount);
void changeSpeed(long changeSpeedAmount);
}
29 changes: 18 additions & 11 deletions src/Main.java
Expand Up @@ -2,7 +2,9 @@

public class Main {
public static void main(String[] args){
Bus bus = new Bus(20, 1250, UUID.randomUUID().toString(), 30, 0);
Bus bus = new Bus(20, 1250, 30, 0);
Taxi taxi = new Taxi(30);
Taxi taxi2 = new Taxi(9);

//((PassengerBording) bus).passengerBoarding(10);
bus.passengerBoarding(10);
Expand All @@ -13,18 +15,23 @@ public static void main(String[] args){
bus.passengerBoarding(1);
bus.reduceGasAmount(15);
bus.changeBusStatus(false);
bus.passengerBoarding(1);
System.out.println(bus.toString());
System.out.println("============================================");

// 출력 결과!
// 10명이 탑승하여 현재 10명 입니다.
// Car{maxCnt=20, currentCnt=10, price=1250, carNum='d1da6703-3547-4c7b-afde-e7d5bbcf0f75', gasAmount=30, currentSpeed=0, status=DRIVE}
// 현재 속도는 10
// 현재 주유량은: 15
// 10명이 탑승하여 현재 20명 입니다.
// 정원 초과입니다. 다음 버스를 탑승하세요
// 현재 주유량은: 0
// 주유량이 부족하여 차고지행으로 변경됩니다.
// Car{maxCnt=20, currentCnt=20, price=1250, carNum='d1da6703-3547-4c7b-afde-e7d5bbcf0f75', gasAmount=0, currentSpeed=10, status=TOGARAGE}
System.out.println(taxi.toString());
taxi.startDrive();
taxi.passengerBoarding(2);
taxi.setDestination("구디");
taxi.setToDestinationDistance(128);
taxi.changeSpeed(60);
taxi.addFee();
taxi.printFinalFee();
System.out.println(taxi.toString());
System.out.println("============================================");

System.out.println(taxi2.toString());
//
taxi2.startDrive();
}
}
2 changes: 1 addition & 1 deletion src/PassengerBording.java
@@ -1,3 +1,3 @@
public interface PassengerBording {
public void passengerBoarding(int passengerCnt);
void passengerBoarding(int passengerCnt);
}
108 changes: 108 additions & 0 deletions src/Taxi.java
@@ -0,0 +1,108 @@
import java.util.UUID;

public class Taxi extends Car implements PassengerBording, ChangeSpeed{
private String destination;
private long defaultDistance;
private long toDestinationDistance;
private long defaultFee;
private long perDistanceFee;

public String getDestination() {
return destination;
}

public void setDestination(String destination) {
this.destination = destination;
}

public long getDefaultDistance() {
return defaultDistance;
}

public void setDefaultDistance(long defaultDistance) {
this.defaultDistance = defaultDistance;
}

public long getToDestinationDistance() {
return toDestinationDistance;
}

public void setToDestinationDistance(long toDestinationDistance) {
this.toDestinationDistance = toDestinationDistance;
}

public long getDefaultFee() {
return defaultFee;
}

public void setDefaultFee(long defaultFee) {
this.defaultFee = defaultFee;
}

public long getPerDistanceFee() {
return perDistanceFee;
}

public void setPerDistanceFee(long perDistanceFee) {
this.perDistanceFee = perDistanceFee;
}

public Taxi(long gasAmount) {
super(UUID.randomUUID().toString(), gasAmount, 0, Status.NORMAL);
setDefaultFee(3200);
setDefaultDistance(100);
setPerDistanceFee(200);
}

@Override
public String toString() {
return "Taxi{" +
"destination='" + destination + '\'' +
", defaultDistance=" + defaultDistance +
", toDestinationDistance=" + toDestinationDistance +
", defaultFee=" + defaultFee +
", perDistanceFee=" + perDistanceFee +
", price=" + getPrice() +
", carNum=" + getCarNum() +
", status=" + getStatus() +
", curSpeed=" + getCurrentSpeed() +
'}';
}

public void startDrive(){
if(getGasAmount() < 10){
System.out.println("주유량이 부족합니다. 주유해주세요.");
}else {
System.out.println("운행 가능합니다. 안전벨트를 매주세요");
}
}

public void addFee(){
if(getToDestinationDistance() < getDefaultDistance()){
System.out.println("추가요금이 없습니다.");
}else{
setPrice((getToDestinationDistance() - getDefaultDistance()) * getPerDistanceFee());
System.out.println("추가 요금은 " + (getPrice() - getDefaultFee()) +"원 입니다.");
}
}

public void printFinalFee(){
System.out.println("전체 요금은 "+ getPrice() + "원 입니다.");
}

@Override
public void changeSpeed(long changeSpeedAmount) {
setCurrentSpeed(changeSpeedAmount);
System.out.println("현재 속도는" + getCurrentSpeed() + " 입니다.");
}

@Override
public void passengerBoarding(int passengerCnt) {
if(getStatus() != Status.NORMAL){
System.out.println("탑승 가능한 상태가 아닙니다. 다음 택시를 이용하세요!");
}else{
System.out.println(passengerCnt + "명의 손님이 탑승했습니다. 운행을 시작합니다.");
setStatus(Status.DRIVE);
}
}
}

0 comments on commit a82271b

Please sign in to comment.