[BE]우테코 프리코스 4주차 회고

Amyhds·2022년 11월 25일
0

📎PR 링크

4주차_다리 건너기

📝문제 풀이

문제 링크

  • Application
    • main: BridgeController 객체 생성 후 메서드 호출
  • BridgeController
    • start: 시작 메시지 출력
    • enterBridgeSize: inputView 통해서 다리 길이 입력받고 예외 발생 하면 다시 입력하도록 함
    • makeBridge: BridgeMaker로 다리 생성
    • playGame: enterMoving, makeMap, showMap 호출
      만약 다리 건너기 실패("X")하면 reGame으로 넘어감
    • enterMoving: 위칸 or 아래칸 입력받고 예회 발생 시 다시 입력
    • makeMap: map 생성
    • showMap: map 출력
    • isMismatch: 사용자의 moving이 틀렸을 경우 true를 리턴
    • reGame: enterGameCommand 호출하고 재시도 시 시도 횟수+1 한 후에 map 초기화 후 playGame 메서드 실행
      종료 시 결과를 "실패"로 변경 후 return한다
    • enterGameCommand: 재시도 or 종료를 입력받고 예외 발생 시 다시 입력
    • showResult: outputView로 최종 결과 출력 메서드 호출
  • BridgeGame
    • move: 다리와 사용자 입력이 같은지 판단하여 check("O" or "X")를 리턴
    • retry: 사용자 명령이 "R"인지 "Q"인지 판별하여 0 또는 1을 리턴
  • BridgeMaker
    • makeBridge: 생성자에서 BridgeNumberGenerator를 BridgeRandeomNumberGenerator로 받아서 0이면 "D", 1이면 "U"을 저장
  • BridgeSize
    • BridgeSize: 다리 길이 검증 후 선언
    • getBridgeSize: 다리 길이 반환
  • GameCommand
    • validateInput: 사용자 명령 검증 후 선언
    • getGameCommand: 명령 반환
  • Moving
    • validateInput: 이동 검증 후 선언
    • getMoving: 이동 반환
  • Map
    • makeMap: moving과 check를 인자로 받아서 "U"일 경우 makeUpMap을 호출, "D"일 경우 makeDownMap 호출
    • makeUpMap: 첫번째 이동이면 upMap에 바로 check를 추가, 그 다음이면 " | "을 추가하고 check 추가
    • makeDownMap: 첫번째 이동이면 downMap에 바로 check를 추가, 그 다음이면 " | "을 추가하고 check 추가
    • getUpMap: upMap을 반환
    • getDownMap: downMap을 반환
    • resetMap: map을 초기화
  • ErrorMessage: 에러 메시지 출력 enum 클래스
  • GameMessage: 안내 메시지 출력 enum 클래스
  • GameCommandResult: "R"이면 1을, "Q"이면 "실패"를 반환하는 enum 클래스
  • MovingRandomNumber: 1이면 "U"를, 0이면 "D"를 반환하는 enum 클래스
  • Converter
    • convertToNumber: 문자열을 숫자로 변환
  • Validator
    • validateNumber: 문자열을 받아 숫자인지 검증
    • validateRange: 숫자의 범위 검증
    • validateLength: 문자열의 길이 검증
    • validateMoving: moving 입력 검증
    • validateGameCommand: gameCommand 입력 검증
  • InputView
    • readBridgeSize: 다리 길이 입력
    • readMoving: 이동 칸 입력
    • readGameCommand: 재시도 여부 입력
  • OutputView
    • printMap: 다리 상태 출력
    • pringResult: 최종 결과 출력
    • printSuccessOrFail: 성공 여부 출력
    • printAttempt: 시도 횟수 출력

📓배운 것

1. 인터페이스

예전에 C++을 배울 때 배웠던 것 같은데 자바에서도 나온다. 개념이 좀 헷갈려서 처음에는 BridgeNumberGenerator와 BridgeRandomNumberGenerator 클래스를 이해하지 못하고 헤맸다. 그래서 인터페이스에 대해 찾아봤고 어떻게 코드에서 활용할지 감을 잡았다.

2. enum 클래스

저번 과제에서는 단순히 게임 내 메시지들을 정리하려는 용도였는데 피드백으로 받았던 Rank 클래스를 보고 저렇게 쓰는 거구나, 하고 깨달았다. 그래서 다리를 생성할 때 1은 "U", 0은 "D"로 변환되어야 하므로 둘을 묶어서 코드를 짜봤다.

📌고칠 것

1. 메서드 길이 줄이기

요구사항을 못 지켜서 너무 아쉽다...아무리 줄여보려 애를 썼지만..더이상 줄일 수 없었기에 나의 한계를 인정하고 걍 내버렸다. 다른 분들은 어떻게 했는지 봐야겠다.

2. 한 클래스(객체)에 너무 많은 역할 부여하지 않기

BridgeController 클래스에 너무 많은 메서드가 있는 것 같아 아쉽다. 이 역시도 다른 코드를 보면서 개선점을 찾아야겠다.

❗느낀 것

드디어 마지막 주였다. 개인 사정으로 짧은 기간 내에 완성해야 했어서 조급하기도 했지만 그래도 재밌었다. 힘듦에서 재미를 발견하는 나...어쩌면 대단할지도?😎 특히 구현은 다했는데 테스트 코드가 안 돌아가서 문제를 찾고 해결했을 때 너무 기뻤다.
코수타에서의 말씀처럼 이게 끝이 아니고 계속 해야 진정한 개발자로 거듭날 수 있다. (하지만 며칠만 쉬려고요..^^) 정말 자바 노베에서 시작했기 때문에 아직 갈길이 너~무 멀다. 어디서부터 시작해야 할지 몰라서 정말 간절하게 우테코 합격을 원하지만..안 될 걸 예상하고 스스로 공부 루틴을 짜야겠다. 시원섭섭한 끝이다.

profile
배우는 중입니다

0개의 댓글