# 묵찌빠게임 README > 프로젝트 기간 2022/08/22 ~ 2022/08/26 > 팀원: [애종](https://github.com/jonghancha), [Mangdi](https://github.com/MangDi-L) / 리뷰어: 수꿍 # 목차 - [프로젝트 소개](#소개) - [개발환경 및 라이브러리](#개발환경-및-라이브러리) - [타임라인](#타임라인) - [키워드](#키워드) - [그라운드 룰](#그라운드-룰) <!-- - [순서도](#순서도) - [Step1](##Step1) - [Step2](##Step2) - [코딩 컨벤션](##코딩-컨벤션) - [STEP 0](#STEP-0) - [고민한 점](#고민한-점) - [배운 개념](#배운개념) - [STEP 1](#STEP-1) - [고민한 점](#고민한-점) - [배운 개념](#배운개념) --> - [실행 화면](#실행-화면) - [트러블 슈팅](#트러블-슈팅) ## 소개 > 가위바위보 승패로 선공을 정한 후 묵찌빠에서 비길경우 승리하거나 패배하고 비기지않을경우 가위바위로방식으로 선공을 정하고 다시 묵찌빠를 진행합니다. ## 개발환경 및 라이브러리 [![swift](https://img.shields.io/badge/swift-5.6-orange)]() [![xcode](https://img.shields.io/badge/Xcode-13.4-blue)]() ## 타임라인 [Commit History](https://github.com/MangDi-L/ios-rock-paper-scissors/commits/step2) ## 키워드 - `재귀함수`, `while`, `switch`, `guard` - `연산 프로퍼티`, `enum`, `class`, `상속` - `파일 분리`, `함수 세분화` ## 그라운드 룰 ### - 연락 가능시간(회의 가능시간) 평일 애종 : 오전 오후 언제든 가능 (* 월 수 금 운동 7시 ~ 10시 (조정가능)) Mangdi : 보통 언제든 가능 (오후 9 ~ 10시 전까지만!) 스크럼 시간 : 오전 9시 (15분~ 20분 정도) 내용 : 어제 공부한 부분, 오늘의 공부 목표(프로젝트 관련 포함) 회의하고 오전 시작 ### - 목표 - 주중안에 끝내기! ## 순서도 ![step0_flowchart](https://user-images.githubusercontent.com/59204352/185026725-9ae94505-86b0-4786-bc5b-30406be1cc5e.svg) ## 실행 화면 ![RockScissorsPaperGame_DemonstrationGIF](https://user-images.githubusercontent.com/49121469/186836536-9b273734-ed38-4332-b1f5-f0185e6565d5.gif) ## 트러블 슈팅 ### 🤔겪었던 문제점, 고민했던 부분 → 😎해결책 > 1) 가위 바위 보를 숫자 1,2,3으로 받을때 매직넘버임을 인지하고 이것을 어떻게 해결할까 고민 -> enum타입을 생성하여 case별로 rock,scissors,paper를 나누어 rawValue로 지정 > 2) 스위치문이 너무 길어서 최대한 압축해서 쓸방법이 없을까 고민 -> 튜플을 이용해서 스위치문의 여러 case들을 하나로 압축 > 3) if 를 사용할 것인가, guard를 사용할 것인가? -> if와 guard의 차이점 중에는 if는 블록 안에서 변수를 사용하고 guard는 else문 바깥에서 변수를 사용한다는 점이 있다. 때문에 코드의 depth가 길어질수록 guard를 사용하는 것이 가독성이 높을 수 있다. 중요한건 어떤 코드를 작성하더라도 근거가 필요하다. > 4) 서로다른클래스가 같은 내용의 함수를 공유하면 이를 어떻게 분배를 할까 고민했다. -> 같은내용을 쓰는 함수를 다른 파일로 분리하여 서로다른클래스가 상속하여 사용할수있게 했다. ### 😮알게 된 점 - enum 내부에서 랜덤으로 요소 뽑아내기 : enum 타입 옆에 `CaseIterable` 추가 -> EnumName.allCases.randomElement() 사용 - 삼항연산자(a ? b : c) : a 조건문이 true라면 b를 return,false라면 c return - import foundation : 프레임워크. 보통의 경우 swift standard library만으로도 정상적으로 돌아가지만 foundation이 필요한 경우엔 import 해줘야 한다 ### 😭해결하지 못한 점 - 10줄 이내의 코드로 함수 구성하기 - 함수가 하나의 기능만을 맡기 - class, struct, enum의 적극적인 사용