yeoseon / tip-archive

트러블 슈팅 및 팁을 모아두는 레포 (Today I Learned)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Java] 추상 클래스/메소드의 도출

yeoseon opened this issue · comments

Enum 에서의 추상 메소드 사용

아이템 34. int 상수 대신 열거 타입을 사용해라 참고

인터페이스의 구현체가 중복되는 경우 추상 클래스의 도출

next-step/java-bowling#116 (comment) 참고

변경 전

State 인터페이스

package bowling.domain.state;

public interface State {
    public State play(int newFelledPin);

    boolean isEndedState();

    String getString();
}

Strike (구현체)

...
public class Strike implements State {
    ....
    @Override
    public boolean isEndedState() {
        return true;
    }
    ....
}

Playing 클래스 (구현체)

....
public class Playing implements State{
    ....
    @Override
    public boolean isEndedState() {
        return false;
    }
    ....
}

변경 후

이 외에도 여러 상태가 있는데, 각 상태별로, isEndedState()가 중복되어 있었다.
따라서 추상 클래스로 분리해주었다.

Finished 추상 클래스

package bowling.domain.state;

abstract class Finished implements State {

    @Override
    public boolean isEndedState() {
        return true;
    }
}

NotFinished 추상 클래스

package bowling.domain.state;

abstract class NotFinished implements State {

    @Override
    public boolean isEndedState() {
        return false;
    }
}

Strike 클래스

public class Strike extends Finished {
...
}

Playing 클래스

public class Playing extends NotFinished {
...
}