우아한 테크코스 예전 문제인 다리 건너기 게임을 풀고 있는데 3번 정도 코드를 갈아엎고 나서야 설계의 중요성을 깨닫게 되었다. 사실 설계의 중요성은 이전에도 알고 있었지만 간단한 게임 정도는 기능 요구 사항 작성만으로 충분할 줄 알았다.(큰 오산)
다리 건너기 게임은 게임 진행이 간단한 편이지만 결과 출력이 정말 까다로운 문제이다.
위쪽 다리와 아래쪽 다리를 동시에 기록하면서 동시에 출력해야 하기 때문에 메서드에서 필요로 하는 값을 정하기 어려웠다.
그래서 이번에는 코드를 작성하기 전에 UML을 작성한 후 구현에 들어가려고 한다.
UML 종류가 워낙 많아서 어떤 타입으로 작성할지 고민했지만 가장 많이 사용되는 클래스 다이어그램으로 작성했다.
까다로운 다리 출력
처음 구현했을 때 정말 정말 지저분하게 다리 출력을 구현했었다.
코드를 작성하면서도 "이건 아니다"라는 게 느껴질 정도였다.
두 번째 구현할 때도 최대한 깔끔하게 작성하려고 했으나 처음과 별반 다를 게 없어서 설계를 갈아엎었다.
위 사진이 어떻게 하면 다리를 깔끔하게 출력할 수 있을까 고민한 흔적이다.
별거 없어 보이지만 많은 도움이 됐다!
밑부터는 세 번째 구현을 위해 작성한 기능 요구사항과 다이어그램이다.
내가 작성한 기능 요구 사항
우선 필수 기능만 정리하고 예외처리나 부가기능은 구현하면서 추가할 예정이다.
클래스 다이어그램으로 작성한 UML
완벽한 다이어그램은 아니다.
OutputView의 printMap()을 보면 map을 파라미터로 받아야 하는데 아무것도 받지 않는다.
사실 처음에는 OutputView에 BridgeMap을 필드로 선언하고 getBridgeMap()으로 Map을 받아오려고 했는데, 이렇게 되면 OutputView에서 BridgeMap을 관리해야 돼서 책임 분리가 제대로 되지 않는다.
때문에 printMap()에서 getBridgeMap()의 리턴값을 받을 수 있도록 BridgeGame에 작성해 줄 예정이다.
'IT' 카테고리의 다른 글
[우아한테크세미나] 우아한객체지향 By 우아한형제들 개발실장 조영호님 (0) | 2024.03.02 |
---|---|
3-Tier Architecture란? (0) | 2023.09.18 |
책임과 협력 (0) | 2023.08.17 |