@@ -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();
         }
     }
 

리뷰: 그렇게 하나로 볼 수도 있다고 생각합니다! 
다만 제가 생각했을 때는 입력 받기 -> 움직인다 까지가 하나의 round 로 묶이고, 
isSuccess(끝에 도달함) 나 떨어짐 상태가 되었을 때 다시 흐름을 제어하는 로직이 하나의 더 큰 메서드로 
round를 반복시키는 것이 좋다고 생각했습니다! 

정답은 없으니 한번 고민해보시고 더 적절하다고 느끼는 구조를 잡아가는 것이 중요하다고 생각합니다!