우테코 2주 차 프리코스 회고 (baseball)

squareyun·2022년 11월 7일
0

회고

목록 보기
1/4
post-thumbnail

멍하다고 해야 할까, 지금까지 해왔던 공부에 대해 다시 생각해봤다.

체계화된 객체 지향 애플리케이션 개발을 해보았는가 하고 질문한다면, 내 대답은 아니오이다. 지금까지 책임과 역할에 대해 곰곰이 생각하고 신중하게 코드를 작성해보지 않았다. 타인의 고민과 노력이 깃든 코드를 그저 타이핑 해왔다. 요구 사항을 분석하고 어떻게 프로그램을 설계해 나갈지 고민하고 또 고민하는 시간을 가지지 못했다.

멍한 기분 뒤에 두근거림이 시작되었다. 객체 지향 프로그램 설계의 매력은 생각보다 더 가슴 뛰게 하였고, 나를 책상 앞에 앉도록 이끌었다. 2주 차 코스가 대단한 프로그램을 개발하라는 것도 아니었지만, 소중하고 의미 있는 개발 시간이었다.


기능 목록 작성

주어진 요구 사항을 읽으며 바로 코드를 작성하는 것이 아닌, 앞으로 구현해야 할 기능들을 내 손으로 적어보는 과정이다. 요구 사항 중 놓치는 부분이 생기지 않고, 개발 중요도를 파악할 수 있다. 이것이 커밋 단위가 되기도 하다.

내가 작성한 기능 목록

  • 컴퓨터가 1에서 9까지 서로 다른 임의의 수 3개 선택
  • 게임 플레이어가 서로 다른 3개의 숫자를 입력
  • 게임 결과 판별 후 출력
    • 모두 맞추면 게임 종료
    • 스트라이크 판별
    • 판별
    • 낫싱 판별
  • 잘못된 값을 입력할 경우 IllegalArgumentException 발생 후 애플리케이션 종료
  • 게임 종료 시 게임 지속 여부 확인
    • 1은 게임 새로 시작
    • 2는 게임 완전히 종료

개발 과정

클래스

요구 사항에서 의미를 가지는 객체가 무엇인지 고민했다. 전체적인 게임 진행을 담당하는 BaseballGame, 자신만의 숫자를 지니는 ComputerUser, 스트라이크와 볼의 정보를 지니는 Result로 나누었다. 이 객체들이 하는 행위를 메소드로 구현하였고, 각 객체들이 어떤 메세지를 주고 받을 지를 고민하였다.

상수

상수 관리에 한 번도 고민해본 적이 없었으나, 여러 클래스에서 사용하는 변수들에 대해 체계적으로 관리할 방법이 필요했다. 프로그램을 쉽게 유지 보수하기 위한 방법을 말이다. 가령 현재 요구 사항에서는 3자리 숫자이지만, 만약 4자리 숫자로 변경해야 한다면? 클래스를 일일이 뒤져가며 수정하는 것은 신사답지 못하다.

상수 클래스를 두어 공통으로 사용할 변수와 출력을 위한 메시지를 선언하였다.

변수명

1주 차 과정의 공통 피드백에서 짚었던 내용을 한 번 더 고민하면서 변수명을 지었다. 시간은 소요되지만, 미래의 시간을 절약할 수 있으리라 생각한다. 변수명 짓기 사이트에서 도움받기도 했다.

1주 차 공통 피드백에서..

이름을 통해 의도를 드러낸다. 나 자신, 다른 개발자와의 소통을 위해 가장 중요한 활동 중의 하나가 좋은 이름 짓기이다. 변수 이름, 함수(메서드) 이름, 클래스 이름을 짓는데 시간을 투자하라.

축약하지 않는다. 의도를 드러낼 수 있다면 이름이 길어져도 괜찮다.

리팩토링

프로그래밍 요구사항 중 다음을 유의하며 리팩토링을 진행했다.
1. Java 코드 컨벤션을 가이드를 준수하며 프로그래밍한다.
2. indent depth를 3이 넘지 않도록 구현한다.
3. 함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라.

제시된 Java 컨벤션은 구글 스타일이었고, intellij에서 해당 스타일을 다운받아 적용하였다. 단, 블록 들여쓰기는 4 스페이스, 들여쓰기 지속은 8 스페이스를 옵션 수정하였다.

리팩토링하면서 메서드가 한 가지 일만 할 수 있도록 고치는 데에 힘썼다. 메서드가 어떤 역할인지 명확하게 파악하고 그 의미에 부합하는 행위는 따로 분리하였다. 메서드가 훨씬 간결해지고 가독성이 높아졌다.

REFERENCE

  • 이미지: 작가 rawpixel.com 출처 Freepik
profile
백엔드 엔지니어

0개의 댓글