# ๐Ÿ‘Š ๋ฌต์ฐŒ๋น  ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ ## ๐Ÿ“š ๋ชฉ์ฐจ - [์†Œ๊ฐœ](#-์†Œ๊ฐœ) - [ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ์ค‘ ํ•ต์‹ฌ ๊ฒฝํ—˜](#-ํ”„๋กœ์ ํŠธ-์ˆ˜ํ–‰-์ค‘-ํ•ต์‹ฌ-๊ฒฝํ—˜) - [ํƒ€์ž„๋ผ์ธ](#-ํƒ€์ž„๋ผ์ธ) - [ํŒŒ์ผ๊ตฌ์กฐ](#-ํŒŒ์ผ๊ตฌ์กฐ) - [์ˆœ์„œ๋„](#-์ˆœ์„œ๋„) - [์‹คํ–‰ํ™”๋ฉด](#-์‹คํ–‰ํ™”๋ฉด) - [ํŒ€ ๊ทœ์น™](#-ํŒ€-๊ทœ์น™) - [ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…](#-ํŠธ๋Ÿฌ๋ธ”-์ŠˆํŒ…) - [์ฐธ๊ณ  ๋งํฌ](#์ฐธ๊ณ -๋งํฌ) - [7ํŒ€ ํšŒ๊ณ ](#7ํŒ€-ํšŒ๊ณ ) ## ๐Ÿ—ฃ ์†Œ๊ฐœ ### ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ #### ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : 22.12.26 ~ 22.12.30 - ๊ฐ€์œ„๋ฐ”์œ„๋ณด๋ฅผ ์Šน์ž๊ฐ€ ๋‚  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.(0 ๋ˆ„๋ฅด๋ฉด ์ข…๋ฃŒ) - ๊ฐ€์œ„๋ฐ”์œ„๋ณด ์Šน์ž๊ฐ€ ํ„ด์„ ์žก๊ณ  ๋ฌต์ฐŒ๋น  ๊ฒŒ์ž„์„ ํ•œ๋‹ค.(0 ๋ˆ„๋ฅด๋ฉด ์ข…๋ฃŒ) - ํ„ด์„ ์žก๊ณ  ์žˆ์„๋•Œ ๊ฐ™์€ ๋ชจ์–‘์„ ๋‚ด๋ฉด ๋ฌต์ฐŒ๋น  ๊ฒŒ์ž„์„ ์Šน๋ฆฌํ•œ๋‹ค. - ๊ฐ™์€ ๋ชจ์–‘์ด ๋‚˜์˜ค์ง€ ์•Š์œผ๋ฉด ๊ฒŒ์ž„์„ ๋ฐ˜๋ณตํ•œ๋‹ค. (0 ๋ˆ„๋ฅด๋ฉด ์ข…๋ฃŒ) ### ํŒ€ ์†Œ๊ฐœ - ํŒ€ ๊ตฌ์„ฑ์›(2์ธ) | vetto | ์†ก์ค€ | | :--------: | :--------: | | <img src="https://cdn.discordapp.com/attachments/535779947118329866/1055718870951940146/1671110054020-0.jpg" width="300" height="350"/> | <img src="https://user-images.githubusercontent.com/88870642/210026753-591175fe-27c1-4335-a2cb-f883bfeb2784.png" width="300" height="300"/>| |Navigator, Driver|Navigator, Driver| ## ๐Ÿ“ ํ”„๋กœ์ ํŠธ ์ˆ˜ํ–‰ ์ค‘ ํ•ต์‹ฌ ๊ฒฝํ—˜ <details> <summary><big>ํ•ต์‹ฌ ๊ฒฝํ—˜</big></summary> - Swift์˜ Optional ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ<br> - if์™€ switch ์กฐ๊ฑด๋ฌธ์˜ ์ฐจ์ด์™€ ์žฅ๋‹จ์  ๋น„๊ตํ•ด๋ณด๊ธฐ<br> - ์ˆœํ™˜ํ•จ์ˆ˜(์žฌ๊ท€ํ•จ์ˆ˜)์™€ ๋ฐ˜๋ณต๋ฌธ์˜ ์žฅ๋‹จ์  ๋น„๊ตํ•ด๋ณด๊ธฐ<br> - ํ•จ์ˆ˜๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ๊ธฐ๋Šฅ ๋ถ„๋ฆฌํ•˜๊ธฐ<br> - guard ๊ตฌ๋ฌธ์˜ ์ดํ•ด์™€ ํ™œ์šฉ<br> - Git์˜ ์ปค๋ฐ‹๋‹จ์œ„ ๊ณ ๋ฏผํ•˜๊ณ  ์ปค๋ฐ‹์— ์ ์šฉํ•˜๊ธฐ<br> - Git ์ปค๋ฐ‹ ๋กœ๊ทธ ํ˜•์‹์— ๋งž์ถฐ ์ปค๋ฐ‹ํ•˜๊ธฐ<br> - ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ ๊ณ ๋ฏผํ•˜๊ธฐ<br> - ๋™๋ฃŒ์™€ ํ˜‘์—…์ž์„ธ ๊ณ ๋ฏผํ•˜๊ธฐ<br> </details> ## โฑ ํƒ€์ž„๋ผ์ธ #### STEP 1 [2022.12.26~2022.12.27] - **2022.12.26** - ์ˆซ์ž ์ž…๋ ฅ ํ•จ์ˆ˜ ๊ตฌํ˜„, ์ปดํ“จํ„ฐ ์ˆซ์ž ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ ๊ตฌํ˜„ - ์ˆซ์ž๋ฅผ ๊ฐ€์œ„๋ฐ”์œ„๋ณด๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„ - ๋น„๊ตํ•˜์—ฌ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ ๊ตฌํ˜„ - **2022.12.27** - ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๋ฉ”๋‰ด ์ถœ๋ ฅ ํ•จ์ˆ˜ ๊ตฌํ˜„ - ๋น„๊ตํ•˜๋Š” ํ•จ์ˆ˜ Naming ๋ณ€๊ฒฝ ๋ฐ refactoring - ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•จ์ˆ˜ ๊ตฌํ˜„ #### STEP 2 [2022.12.28~2022.12.30] - **2022.12.28** - ์Šน์ž ํƒ€์ž… ๋ถ„๋ฆฌ - ์ž…๋ ฅ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋กœ ๊ตฌํ˜„ - ํ„ด๊ณผ ๋ฌต์ฐŒ๋น  ๋ฉ”๋‰ด ์ถœ๋ ฅ ํ•จ์ˆ˜ ๊ตฌํ˜„ - ์ˆซ์ž๋ฅผ ๋ฌต์ฐŒ๋น ๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„ - ๋ฌต์ฐŒ๋น  ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ ๊ตฌํ˜„ - **2022.12.29** - ๋ฌต์ฐŒ๋น  ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜ refactoring - ๊ฐ€์œ„๋ฐ”์œ„๋ณด ํ•จ์ˆ˜ refactoring - runGameํ•จ์ˆ˜ ๊ตฌํ˜„ - ๋ฌต์ฐŒ๋น  ๊ฒฐ๊ณผ ์ถœ๋ ฅํ•จ์ˆ˜ ๊ตฌํ˜„ ## ๐Ÿ“‚ ํŒŒ์ผ๊ตฌ์กฐ ```bash! RockPaperScissors โ”œโ”€โ”€ Error.swift โ”œโ”€โ”€ MookZziBbaGame.swift โ”œโ”€โ”€ ReturnNumberLibrary.swift โ”œโ”€โ”€ RockPaperScissorsGame.swift โ”œโ”€โ”€ StartGame.swift โ”œโ”€โ”€ Type โ”‚ โ”œโ”€โ”€ MookZziBbaType.swift โ”‚ โ”œโ”€โ”€ RockPaperScissorsType.swift โ”‚ โ””โ”€โ”€ WinnerType.swift โ””โ”€โ”€ main.swift ``` ## ๐Ÿ“Š ์ˆœ์„œ๋„ <details> <summary><big>STEP 1 ์ˆœ์„œ๋„</big></summary> <img src="https://cdn.discordapp.com/attachments/1056776760622071858/1058265379266363402/RockPaperScissorsGame.drawio.png"/> </details> <details> <summary><big>STEP 2 ์ˆœ์„œ๋„</big></summary> <img src="https://cdn.discordapp.com/attachments/1056776760622071858/1058266474327855145/MookZziBbaGame.drawio.png"/> </details> ## ๐Ÿ’ป ์‹คํ–‰ํ™”๋ฉด |**๊ฒŒ์ž„ ์‹คํ–‰**| |---| |![แ„แ…ฅแ†ทแ„‘แ…ฒแ„แ…ฅแ„‰แ…ณแ†ผแ„…แ…ต](https://user-images.githubusercontent.com/88870642/210028600-7db422a6-2f80-4ed3-9d25-7515aec3a589.gif)| |**๊ฒŒ์ž„ ์ข…๋ฃŒ**| |![แ„€แ…ฆแ„‹แ…ตแ†ทแ„Œแ…ฉแ†ผแ„…แ…ญ](https://user-images.githubusercontent.com/88870642/210028798-19f927b4-6857-454d-886f-c5893fe22612.gif)| |**์ž…๋ ฅ ์˜ค๋ฅ˜**| |![แ„Œแ…กแ†ฏแ„†แ…ฉแ†บแ„ƒแ…ฌแ†ซ แ„‹แ…ตแ†ธแ„…แ…งแ†จ](https://user-images.githubusercontent.com/88870642/210028731-ad50bc47-de29-4815-a288-396d9b9ea202.gif)| |**๋ฌต์ฐŒ๋น  ์ž…๋ ฅ์˜ค๋ฅ˜ ์‹œ ํ„ด ๋„˜๊น€**| |![แ„†แ…ฎแ†จแ„แ…ตแ„ˆแ…กแ„Œแ…กแ†ฏแ„†แ…ฉแ†บแ„‹แ…ตแ†ธแ„…แ…งแ†จ](https://user-images.githubusercontent.com/88870642/210028821-3f210ce5-8b6c-489c-8c95-b5847a732072.gif)| ## ๐Ÿ‘ฅ ํŒ€ ๊ทœ์น™ ### ์ฝ”๋“œ ์ปจ๋ฒค์…˜ - ํ•จ์ˆ˜ ์„ ์–ธ ์‹œ 100์ž ์ด์ƒ์œผ๋กœ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค„๋ฐ”๊พธ๊ธฐ - ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ์ƒ์ˆ˜ ์ด๋ฆ„์€ CamelCase ์‚ฌ์šฉํ•˜๊ธฐ - ๋ณ€์ˆ˜๋ช… ๋ชจํ˜ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ธฐ - ๋ถ€ํ˜ธ, ๋“ฑํ˜ธ ์–‘์ชฝ์œผ๋กœ ๋„์–ด์จ์ฃผ๊ธฐ - ๋งฅ๋ฝ์ƒ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉด ์ค„๋ฐ”๊พธ๊ธฐ ### ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ - feat : ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ) - refactor : ๋ฆฌํŒฉํ† ๋ง (๋„ค์ด๋ฐ ์ˆ˜์ • ๋“ฑ) - docs : ๋ฌธ์„œ ๋ณ€๊ฒฝ (๋ฌธ์„œ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ) - chore : ๊ธฐํƒ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ (์ฝ”๋“œ์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ์‚ฐ์ ์ธ ๊ฒƒ์ด ์•„๋‹Œ ๊ฒƒ ์ˆ˜์ •) ## ๐Ÿ”ฅ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ### 1๏ธโƒฃ Naming ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•จ์— ์žˆ์–ด Naming์ด ์ •๋ง ๊นŒ๋‹ค๋กœ์› ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์‚ฌ์šฉ์ž ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋žฌ๋˜๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด class ํƒ€์ž…์œผ๋กœ "RockPaperScissors"๋กœ ์„ค์ •์„ ํ•ด์ฃผ์—ˆ๋‹ค๋ฉด, ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜์˜ ํ•จ์ˆ˜๋ช…์—์„œ "RockPaperScissors"๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. **- class ์‚ฌ์šฉ** ```swift= class RockPaperScissors { func decideWinner() { // ์Šน๋ฆฌ์ž๋ฅผ ๊ฒฐ์ • ์ง€์Œ } func printWinner() { // ์Šน๋ฆฌ์ž๋ฅผ ํ”„๋ฆฐํŠธํ•จ } } ``` **- class ๋ฏธ์‚ฌ์šฉ** ```swift= func decideRockPaperScissorsGameWinner() { } func printRockPaperScissorsGameWinner() { } ``` ํด๋ž˜์Šค ํƒ€์ž…์˜ ์šฉ๋„์™€ ๊ธฐ๋Šฅ์€ ๋‹ค์–‘ํ•˜์ง€๋งŒ, ํด๋ž˜์Šค์™€ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๋ฌถ์–ด์คŒ์œผ๋กœ์จ ํ•จ์ˆ˜์˜ Naming์„ ๋‹จ์ถ•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ------ ### 2๏ธโƒฃ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๋กœ์ง ๊ตฌํ˜„ ๊ฐ€์œ„๋ฐ”์œ„๋ณด ๋กœ์ง ๊ตฌํ˜„์— ์žˆ์–ด์„œ ์‚ฌ์šฉ์ž์˜ ์ˆซ์ž์™€ ์ปดํ“จํ„ฐ์˜ ์ˆซ์ž๋ฅผ ๋นผ์„œ ์ŠนํŒจ๋ฅผ ๊ฒฐ์ •์ง“๋Š” ๋กœ์ง์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ๊ฐ€์œ„๋ฐ”์œ„๋ณด๋ฅผ ๊ฒฐ์ • ์ง“๋Š” ์ˆซ์ž๋“ค์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ „์ฒด์ ์ธ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ€์œ„,๋ฐ”์œ„,๋ณด๋กœ ์ŠนํŒจ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ • ์ค‘ enum์„ ํ†ตํ•ด ์ œํ•œ์ ์ธ ์กฐ๊ฑด์œผ๋กœ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด๋ฅผ ์„ ์–ธํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. **- ์ˆ˜์ • ์ „(์ˆซ์ž๋กœ ๋กœ์ง์ฒ˜๋ฆฌ)** ์ˆซ์ž๊ฐ’์˜ ๋บ„์…ˆ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ, ์ˆซ์ž๊ฐ€ ๋ณ€๊ฒฝ๋  ์‹œ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ```swift= func compareHand(computerHand: Int, userHand: Int) -> String { let status: String if result == 0 { status = "Draw" } else if result == -2 || result == 1 { status = "Win" } else { status = "Lose" } return status } ``` **- ์ˆ˜์ • ํ›„(๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด๋กœ ๋กœ์ง์ฒ˜๋ฆฌ)** ์—ด๊ฑฐ์ฒดํ˜•ํƒœ๋กœ ์ˆซ์ž๊ฐ€ ๋ณ€๊ฒฝ๋˜๋„ ๊ฐ€์œ„, ๋ฐ”์œ„, ๋ณด๊ฐ€ ์„ ์–ธ๋œ ์—ด๊ฑฐ์ฒด์—์„œ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ```swift= func decideRockPaperScissorWinner(_ userHand: RockPaperScissors, _ computerHand: RockPaperScissors) -> Winner { switch (userHand, computerHand) { case (.scissors, .paper), (.rock, .scissors), (.paper, .rock): return .user case (.scissors, .rock), (.rock, .paper), (.paper, .scissors): return .computer default: return .draw } } ``` **- Enum ํƒ€์ž…** ```swift= enum RockPaperScissors: Int { case scissors = 1 case rock = 2 case paper = 3 case wrongHand } ``` --- ### 3๏ธโƒฃ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ฒ˜์Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋‘์ง€ ์•Š๊ณ  ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” step1์—์„œ๋Š” ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•ด๋„ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ step2๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋ณด๋‹ˆ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ project์—์„œ ์š”๊ตฌํ•˜๋Š” ์‚ฌํ•ญ๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ฝ”๋“œ์•ˆ์— ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•˜์˜€๊ณ  ์ €ํฌ๊ฐ€ ์›ํ•˜๋˜ ๊ธฐ๋Šฅ๋ถ„๋ฆฌ์—๋„ ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. --- ### 4๏ธโƒฃ ๊ธฐ๋Šฅ๋ถ„๋ฆฌ - ํ•จ์ˆ˜๊ฐ€ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๋„๋ก ๋ถ„๋ฆฌ์‹œํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์žฌ์‚ฌ์šฉ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•จ์ˆ˜ ์ค‘ ํ•œ๊ฐœ์˜ ๊ธฐ๋Šฅ๋งŒ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ, ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. - makeRandomComputerNumber(), func inputUserNumber()๊ฐ€ ๊ธฐ๋Šฅ๋ถ„๋ฆฌ๊ฐ€ ์ž˜๋œ ์ผ€์ด์Šค์ž…๋‹ˆ๋‹ค. --- ### 5๏ธโƒฃ enum enumํƒ€์ž…์„ ํ†ตํ•ด ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ "**rawValue**"๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. .rawValue"๋Š” ํ˜ธ์ถœ๋ ๋•Œ ๋ถˆ๋ช…ํ™•ํ•œ ์ด๋ฆ„์œผ๋กœ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด enumํƒ€์ž…์—์„œ ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ".rawValue"๊ฐ€ ์•„๋‹Œ "name"์ด๋ผ๊ณ  ์ง€์ •ํ•˜์—ฌ ๋ชจํ˜ธํ•จ์„ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. **- ๋ณ€๊ฒฝ ์ „** ```swift= enum winner: String { case user = "์‚ฌ์šฉ์ž" case computer = "์ปดํ“จํ„ฐ" case draw } ``` **- ๋ณ€๊ฒฝ ํ›„** ```swift= enum Winner { case user case computer case draw var name: String { switch self { case .user: return "์‚ฌ์šฉ์ž" case .computer: return "์ปดํ“จํ„ฐ" case .draw: return "๋ฌด์Šน๋ถ€" } } } ``` **- ํ˜ธ์ถœ์‹œ** ```swift= print(Winner.rawValue) //๋ณ€๊ฒฝ ์ „ print(Winner.name) //๋ณ€๊ฒฝ ํ›„ ``` --- ### 6๏ธโƒฃ ํ•จ์ˆ˜์˜ ์žฌ์‚ฌ์šฉ์„ฑ - ๋ฌต์ฐŒ๋น ๊ฒŒ์ž„๊ณผ ๊ฐ€์œ„๋ฐ”์œ„๋ณด๊ฒŒ์ž„์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จ๋œ "**inputUserNumber**"ํ•จ์ˆ˜๋ฅผ ๋ฆฌํŒฉํ† ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. - ์ˆ˜์ •์ „์—๋Š” "**printMenu()**"(๊ฐ€์œ„๋ฐ”์œ„๋ณด๋กœ์ง์— ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜)๊ฐ€ ์žˆ์–ด์„œ ๋ฌต์ฐŒ๋น  ๊ฒŒ์ž„์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ, "**printMenu()**"์‚ญ์ œ, ๊ฐ„๋‹จํ•œ ๋กœ์ง ๋ณ€๊ฒฝ ๋“ฑ์˜ ๋ฆฌํŒฉํ† ๋ง์„ ๊ฑฐ์ณ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. **- ์ˆ˜์ • ์ „** ```swift= func inputUserNumber() -> Int { printMenu() guard let userInput = readLine() else { return inputUserNumber() } guard let userNumber = Int(userInput) else { print("์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.") return inputUserNumber() } return userNumber } ``` **- ์ˆ˜์ • ํ›„** ```swift= func inputUserNumber() throws -> Int { guard let userInput = readLine(), let userNumber = Int(userInput) else { throw InputError.invalidInput } return userNumber } ``` ## ์ฐธ๊ณ  ๋งํฌ * [draw.io](https://app.diagrams.net/) * [Swift API Design Guideline](https://www.swift.org/documentation/api-design-guidelines/) * [Swift Properties](https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties) * [Swift Enum](https://jusung.gitbook.io/the-swift-language-guide/language-guide/08-enumerations) * [Swift Generics](https://docs.swift.org/swift-book/LanguageGuide/Generics.html#) * [Switch control Flow](https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html#) * [The Swift Language Guide](https://jusung.gitbook.io/the-swift-language-guide/) ## 7ํŒ€ ํšŒ๊ณ  * [7ํŒ€ ํšŒ๊ณ ](https://github.com/gzzjk159/ios-rock-paper-scissors/blob/step2/7%ED%8C%80%20%ED%9A%8C%EA%B3%A0.md)