루틴

준비


View


InputView


Controller


private <T> T repeat(Supplier<T> inputReader) {
    try {
        return inputReader.get();
    } catch (IllegalArgumentException e) {
        outputView.printError(e.getMessage());
        return repeat(inputReader);
    }
}

Domain


EnumClass

Substring