2018-4-17 볼링에서 상속적용하기

Bowling 구현하기(1)

상속을 적용해보자

  • 볼링으로 5일정도 엄청나게 스트레스를 받았었다. 지금은 어제보다 덜 하지만, 그래도 어제 산하나를 넘고, 오늘은 볼링에서 상속을 상태값에 적용을 해봤다.
//Status.java
package status;

import game.Pin;

public class Status {
    private Pin firstPin;
    private Pin secondPin;

    public Status(Pin firstPin) {
        this.firstPin = firstPin;
    }

    public Status(Pin firstPin, Pin secondPin) {
        this.firstPin = firstPin;
        this.secondPin = secondPin;
    }

    public Pin getSecondPin() {
        return secondPin;
    }

    public Pin getFirstPin() {
        return firstPin;
    }
}
  • 볼링에서 스트라이크, 스페어, 미싱, 노말 이렇게 4가지의 상태가 존재를 하게 된다. 핀을 쓰러트리고 나서 그것을 바탕으로 상태값을 판단을 하는 메소드를 구현을 하게 되었는데, 처음에는 Strike, Spare, Missing, Normal을 위의 Status객체에 구현을 했는데, toString 및 좀 더 간결하게 하기 위해서 상속을 적용을 시키보았다.
// Strike.java
public class Strike extends Status {
    public Strike(Pin firstPin) {
        super(firstPin);
    }

    public boolean checkStrike() {
        if (getFirstPin().checkFinish() && getSecondPin() == null) {
            System.out.println("스트라이크");
            return true;
        }
        return false;
    }

    @Override
    public String toString() {
        return "X";
    }
}
  • 결국에는 4가지 상태중 하나인것이고 각각의 상태들은 스트라이크를 제외하고 firstPin, secondPin을 가지고 있다. 스트라이크는 firstPin만을 가지고 있기에, Status 생성자에서 firstPin만 입력을 받는 생성자를 만들었다.
  • Strike클래스는 위의 firstPin값을 super를 통해서 입력을 받고, check메소드를 통해서 boolean타입을 반환을 하게 된다.
  • 그리고 toString메소드를 통해서 “X”를 리턴하게된다. 콘솔에서 볼링점수판을 호출을 하게될때 편의성을 위해서 이렇게 상속을 통해서 나누게 되었다.
//Spare.java
public class Spare extends Status {
    public Spare(Pin firstPin, Pin secondPin) {
        super(firstPin, secondPin);
    }

    public boolean spareCheck() {
        if (getFirstPin().getPinFall() != Pin.getMaxFall() && (getFirstPin().getPinFall() + getSecondPin().getPinFall() == 10)) {
            System.out.println("스페어");
            return true;
        }
        return false;
    }

    @Override
    public String toString() {
        return "/";
    }
}
  • 스페어의 경우 super를 통해서 firstPin, secondPin의 값을 입력을 받고, check를 통해서 boolean 타입을 리턴하게 된다.
  • toString을 통해서 “/”를 리턴하게 된다.

오늘의 느낀점

  • 만약에 Status를 통해서 4가지 상태값을 호출을 하고, 4개의 상태를 나타내는 문자열을 만들수도 있었지만 그렇게 되면 복잡하게 되고 Status클래스에 상태값에 관련된 메소드들만 8개를 구현을 하게된다. 복잡하고 또 계속 그림을 그리면서 메소드를 만들던 과정중에 상속을 적용을 할 수 있게 되서 좋았다. 자바를 공부를 하면서 가장 어려웠던 부분은 아마도 상속, 인터페이스, 예외처리 이 3가지가 나에게 적용을 하는 것이 어려웠다. 오늘은 어제보다 한 걸음 더 나아가고 발전을 하게 되서 감사합니다 :)
Written on April 17, 2018