---
# System prepended metadata

title: Untitled

---

묵찌빠게임 [STEP 1] 웅, 메네

@derrickkim0109

안녕하세요 데릭! STEP 1 완료하고 PR 드립니다.

처음 제가 folk 해온 프로젝트에 Collaborator 설정을 해주지 않고 커밋을 했더니 웅이 pull했을 때 main 브랜치만 보여지는 현상이 있었고, `git branch -a` 명령으로 숨겨진 브랜치를 확인하여 이동하고 push했을 때 억세스 할 수 없다는 에러메세지가 보여졌습니다. 그래서 처음에 제가 2번의 commit을 했는데 나머지 부분은 번갈아가며 커밋하였습니다. 다음부터는`콜라보레이터` 등록 잘 하겠습니다. 😭 

Enum을 사용해서 가위, 바위, 보 `Hand` 타입을 설정하고 `CaseIterable` 프로토콜을 이용하여 랜덤 컴퓨터 핸드 값을 생성하도록 구현해보았습니다.

STEP 2에서 묵찌빠 게임을 하면서 유저 인풋을 한번 더 받아야 하는 것으로 알고 있어서, 유저인풋을 받아 `Int`로 반환하는 함수를 분리하고 싶었으나, `inputNumber`에서 0, 1, 2, 3이 떨어지고 그 값을 받아 처리할때 계속해서 0을 어떻게 처리해야 할 지, 고민하였습니다.

사용자 핸드를 반환하는 `makeUserHand` 함수에서도 0,1,2,3이 들어오기 때문에 1,2,3에 각각의 결과를 switch를 사용하여 반환하고 싶었지만 `Hand` 타입을 반환하는 문제로 0을 처리할 수 없어서 `if`로 변경해서 사용을 하였고 함수 바깥쪽에서 0번 처리를 먼저 해주고 `inputNumber == 3`은 else 문을 사용하여 구현하도록 수정하였습니다.

컴퓨터 핸드와 유저 핸드를 비교하는 `checkResult` 함수에서도 숫자로 비교하는 것보다 `Hand.scissor`와 `Hand.rock`을 비교하는 방식이 좀 더 직관적일 수 있을 것 같아 이렇게 구현하여 보았습니다.

## 고민했던 점
- 유저입력 값에 대한 오류처리를 어떻게 해줘야 할 지에 대해서 고민했습니다. 
(do-catch와 guard 문을 고민한 결과, 결국 간단하게 할 수 있는 guard문을 채택하여 작성하였습니다.)


## 조언을 얻고 싶은 부분
- func `makeUserHand` 의 반환값을 -> `Hand`로 지정 해줬는데 0을 입력했을 때 

  저희는 switch를 먼저 시도했다가 default를 해결하지 못하고 0을 먼저 제거한 값을 if 로 받아서 구현하였는데 저희가 사용한 방법보다 좋은 방법이 있을까요?

- func `gameStart` 의 출력문 & guard let 문장을 분리해주려고 시도하였으나, return 값을 요구하여 분리해주지 못하였습니다. 
(혹시 분리 할 수 있는 해결 방법이 있을까요?) 

    `gameStart` 에서 유저입력 부분을 함수로 분리하여 추후 재사용하려고 생각했는데, 0 처리가 더 복잡해질 수 있을 것 같아 유지하는 것으로 결정했습니다.