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

리뷰: > 개인적으로 이 부분의 흐름 처리가 조금 아쉽다고 생각합니다. 우선 아래의 `inputMoving()` 메서드의 역할이 조금 많고 , `playOneRount()`를 반복하는 로직도 while 문을 사용하면 좀 더 직관적으로 보이지 않을까 생각됩니다! 한번쯤 고민해보시면 좋을 것 같아요!

기존에 재귀로 구성했던 코드를 while로 바꿀 생각을 못했네요.. 굳이 조건걸어서 재귀를 하기보다 의견주신 while을 사용하는게 확실히 더 좋아보이긴 합니다 ! 감사합니다