Giter Club home page Giter Club logo

ios-number-baseball's Introduction

숫자야구 프로젝트 저장소

프로젝트 기간 2022.02.08 ~ 2022.02.10
팀원 : @malrang @saafaaari / 리뷰어 : @leeari95

숫자야구 게임규칙

  • 컴퓨터가 생성한 임의의 수 세 개와 사용자가 입력한 임의의 수 세 개를 비교하여
  • 위치와 값이 같으면 스트라이크 숫자만 같으면 볼 입니다.
  • 새로운 게임이 시작되면 컴퓨터가 생성한 임의의수 3개는 변경합니다.
  • 도전 횟수는 9번이며 9번 내로 사용자가 3스트라이크가 되면 사용자의 승리
    3스트라이크를 내지 못하면 컴퓨터의 승리입니다.
  • 수의 범위는 1~9 이며 중복된 수는 없습니다.

순서도

STEP 1 기능 구현

  • makeRandomNumber 함수
    • 겹치지 않는 랜덤 숫자 생성하여 반환
  • checkScore 함수
    • 사용자 입력값과 컴퓨터값 비교하며 스트라이크/볼 카운트 판정
  • getScore 함수
    • 스트라이크/볼 카운트 합산하여 반환
  • printGameResult 함수
    • 조건을 검사해 승리 메세지를 출력하고 스트라이크/볼 카운트 출력
  • startGame 함수
    • 게임 시작

의문점

  • 프로젝트 제약사항의 들여쓰기 기준

고민했던 것들

  • 순서도 작성 방법과 기준
  • commit 메세지 스타일
  • 변수 및 함수 네이밍
  • 중복되지 않은 값을 보유할 변수의 타입에대해 고민
  • 여러 함수에서 여러 번 사용되는 변수를 전역변수로 선언하는게 나을지 파라미터로 연달아서 전달하는게 나을지 고민
  • 한 개 이상의 값을 반환받을 때 어떻게 해야할지 고민
  • 난수 발생 시, 반복문이 발생하는 난수의 개수만큼만 반복되게 하는 방법

배운 개념

  • 코드 컨밴션에 대해
  • random()와 randomElement()의 기능과 사용법
  • Set타입의 정의와 특성, 사용법
  • Tuple타입의 정의와 특성, 사용법
  • map()의 기능과 사용법
  • joined()의 기능과 사용법
  • reduce() 기능과 사용법

PR 후 개선사항

  • 랜덤한 정수값을 반환 하는 함수와 중복되지않는 값을 파라미터 정수값 만큼 반환 해주는 함수 결합
    • randomInt함수 + makeNonOverlappingNumber함수 결합, 네이밍변경 = makeRandomNumber함수
  • 반복문이 의도치 않게 불필요한 반복을 추가로 실행하는 makeRandomNumber함수 내부 수정
    • Set타입 변수의 Element 갯수가 3개가될때 까지 반복하여 랜덤한 정수값을 할당해주는 기능 -> 겹치지않는 정수값을 가지고있는 변수에서 랜덤하게 하나씩 다른 변수에 할당해주고 할당해준 값은 제거해도록 수정
  • 범위 연산자를 수정하여 코드의 가독성을 높임
    • 기존 for문의 반복 조건 0...answerNumber.count - 1 에서 0../<answerNumber.count 로 변경
  • 들여쓰기 제한 조건 충족 위해 함수 내의 기능을 함수로 분리
    • checkScore함수 스트라이크/ 볼 카운트 합산 기능 → getScore함수로 분리
  • 가독성 향상, 휴먼에러 및 하드코딩 방지
    • 정수 0 → .zero 이용
  • 반복문을 사용해 속성값들을 출력하는 기능 수정
    • foreach를 이용해 반복하여 속성값을 출력하는 기능 -> map과 joined를 이용해 String로 출력할수있도록 수정
  • if문을 사용해 조건이true일 경우와 false경우로 분기로 나누었던 코드를 수정
    • guard문을 사용해 특정 조건만을 예외처리 하도록 수정
  • 함수 재사용성을 고려하여 3으로 지정했던 부분 수정
    • 3에서 -> count 파라미터로 받을수있도록 수정
  • 역할에 맞게 변수명 및 함수명 수정
  • 함수의 리턴값을 할당 받는 변수에 타입을 명시하여 가독성이 좋아지도록 수정

STEP 2 기능구현

  • selectGameMenu 함수
    • 사용자 메뉴를 출력하고 메뉴를 입력받는 함수
  • inputPlayNumber 함수
    • 사용자에게 입력값을 받는 함수
  • checkPlayNumber 함수
    • 입력값에 대해 게임에 유효한지 체크, 유효하지 않다고 판단되면, "입력한 수가 잘 못 됐다"라는 문구 출력
  • outputPlayNumber 함수
    • 유효성 체크가 완료된 수를 반환해주는 함수

의문점

고민했던 것들

  • 입력받은 [String]타입을 [Int]타입으로 변환하는 방법에 대한 고민
  • 입력한 수에 대해 유효성 검사에게 효율적인 검사 방법에 대해 고민
  • 입력값이 잘못되었을때 오류메세지를 출력하는 방법에 대해 고민
  • 함수 기능을 분리 할때, 어디까지 분리에 대한 고민
  • 반복적으로 사용되는 값을 전역변수로 두는 것에 대한 고민

배운 개념

  • Switch를 이용한 옵셔널바인딩
  • Optional과 Non-Optional의 값을 비교할 수 있는것
  • compactMap()을 활용하여 타입 변환시 nil이 아닌 값만 반환할 수 있는것
  • Set타입의 교집합, 차집합, 합집합에 대해
  • guard문법에 대한 이해

PR 후 개선사항

  • 기존 selectGameMenu함수 내부에서 입력값을 옵셔널바인딩을 해준뒤 swich문에서 사용함
    • 입력값을 바인딩해주던 guard문을 제거하고 입력값을 받는 상수로 선언함. switch문을 사용하여 옵셔널의 값이 nil이라면 default구문을 실행하도록 수정
  • Switch문 내부 스타일변경
    • 내려쓰기 없이 case 와 case내부를 한줄로 작성 -> 내려쓰기 하여 가독성 case내부가 눈에 잘들어오도록 수정
  • outputPlayNumber함수 [Int]?을 [Int]로 변경
    • checkPlayNumber 함수에서 유효성 검사를 완료하고, 반환하는 값에 대해선 nil이 아닌 것이 확정이기에 일반 타입으로 수정

ios-number-baseball's People

Contributors

malrang-malrang avatar siwon-l avatar yagom avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.