@@ -8,71 +8,72 @@
 import bridge.view.OutputView;
 
 public class BridgeGameController {
-    private final OutputView outputView = new OutputView();
-    private final InputView inputView = new InputView();
+    private final OutputView outputView;
+    private final InputView inputView;
     private BridgeGame bridgeGame;
-    private boolean isGameEndStatus = false;
-    private boolean isGameRunning = false;
+
+    public BridgeGameController(OutputView outputView, InputView inputView) {
+        this.outputView = outputView;
+        this.inputView = inputView;
+    }
 
     public void play() {
         outputView.initGame();
         Bridge bridge = initBridge();
         bridgeGame = new BridgeGame(bridge);
-        while (!isGameRunning) {
+        while (bridgeGame.isRunning()) {
             playOneRound(bridge);
         }
-        outputView.printResult(isGameEndStatus, bridgeGame.getTryCount());
+        outputView.printResult(bridgeGame.isGameSuccess(), bridgeGame.getTryCount());
+    }
+
+
+    private void playOneRound(Bridge bridge) {
+        checkMove(bridge);
+        bridgeGame.isGameEnd();
+        if (bridgeGame.isGameSuccess()) {
+            return;
+        }
+        playOneRound(bridge);
+    }
+
+
+    private void checkMove(Bridge bridge) {
+        inputMoving();
+        outputView.printMap(bridgeGame.getUserBridge().getUserBridge(), bridge.getBridge());
+        if (!bridgeGame.isRunning()) {
+            retry();
+        }
     }
 
     private Bridge initBridge() {
         try {
             int bridgeSize = inputView.readBridgeSize();
-            return new Bridge(new BridgeMaker(new BridgeRandomNumberGenerator()).makeBridge(bridgeSize));
+            BridgeMaker bridgeMaker = new BridgeMaker(new BridgeRandomNumberGenerator());
+            return new Bridge(bridgeMaker.makeBridge(bridgeSize));
         } catch (IllegalArgumentException e) {
             outputView.printErrorMessage(e.getMessage());
             return initBridge();
         }
     }
 
-    private boolean inputMoving() {
+    private void inputMoving() {
         try {
             String moveCommand = inputView.readMoving();
-            return bridgeGame.move(moveCommand);
+            bridgeGame.move(moveCommand);
         } catch (IllegalArgumentException e) {
             outputView.printErrorMessage(e.getMessage());
-            return inputMoving();
-        }
-    }
-
-    private void playOneRound(Bridge bridge) {
-        checkMove(bridge);
-        isGameEndStatus = bridgeGame.isGameEnd();
-        if (isGameEndStatus) {
-            return;
-        }
-        playOneRound(bridge);
-    }
-
-    private void checkMove(Bridge bridge) {
-        boolean isMove = inputMoving();
-        outputView.printMap(bridgeGame.getUserBridge().getUserBridge(), bridge.getBridge());
-        if (!isMove) {
-            if (!retry()) {
-                isGameEndStatus = false;
-                isGameRunning = false;
-                return;
-            }
+            inputMoving();
         }
-        isGameRunning = true;
     }
 
-    private boolean retry() {
+    private void retry() {
         try {
             String gameCommand = inputView.readGameCommand();
-            return bridgeGame.retry(gameCommand);
+            bridgeGame.retry(gameCommand);
         } catch (IllegalArgumentException e) {
             outputView.printErrorMessage(e.getMessage());
-            return retry();
+            retry();
         }
     }
 

리뷰: > 메서드의 역할이 조금 많은 것 같습니다! 움직임 입력을 받는 메서드에서 `bridgeGame.move()` 가 존재하는 것은 조금 어색합니다!

음.. 그럴까요 ? 메서드 명이 어색한걸까요 메서드 역할이 문제일까요 ?
저는 컨트롤러라고 생각해서 '입력을 통해서 실행한다' 가 하나의 역할을 한다고 생각했는데 그게 아니었을까요.. 정말 어렵긴하네요