oh-my-oop 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (660) hide show
  1. package/MCP_STRUCTURE.md +301 -0
  2. package/README.md +167 -0
  3. package/SCOPE.md +27 -0
  4. package/dist/application/discovery.d.ts +133 -0
  5. package/dist/application/discovery.js +62 -0
  6. package/dist/application/discovery.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +80 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +16 -0
  11. package/dist/config.js +32 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/domain/collaborators.d.ts +2 -0
  14. package/dist/domain/collaborators.js +26 -0
  15. package/dist/domain/collaborators.js.map +1 -0
  16. package/dist/domain/ids.d.ts +4 -0
  17. package/dist/domain/ids.js +23 -0
  18. package/dist/domain/ids.js.map +1 -0
  19. package/dist/domain/model.d.ts +71 -0
  20. package/dist/domain/model.js +2 -0
  21. package/dist/domain/model.js.map +1 -0
  22. package/dist/domain/schemas.d.ts +213 -0
  23. package/dist/domain/schemas.js +79 -0
  24. package/dist/domain/schemas.js.map +1 -0
  25. package/dist/domain/stereotypes.d.ts +7 -0
  26. package/dist/domain/stereotypes.js +65 -0
  27. package/dist/domain/stereotypes.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +21 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/io/classStore.d.ts +9 -0
  32. package/dist/io/classStore.js +39 -0
  33. package/dist/io/classStore.js.map +1 -0
  34. package/dist/io/collaborationStore.d.ts +7 -0
  35. package/dist/io/collaborationStore.js +32 -0
  36. package/dist/io/collaborationStore.js.map +1 -0
  37. package/dist/io/design.d.ts +3 -0
  38. package/dist/io/design.js +22 -0
  39. package/dist/io/design.js.map +1 -0
  40. package/dist/io/designIndex.d.ts +6 -0
  41. package/dist/io/designIndex.js +49 -0
  42. package/dist/io/designIndex.js.map +1 -0
  43. package/dist/io/frontmatter.d.ts +8 -0
  44. package/dist/io/frontmatter.js +31 -0
  45. package/dist/io/frontmatter.js.map +1 -0
  46. package/dist/io/history.d.ts +10 -0
  47. package/dist/io/history.js +38 -0
  48. package/dist/io/history.js.map +1 -0
  49. package/dist/io/useCaseStore.d.ts +8 -0
  50. package/dist/io/useCaseStore.js +36 -0
  51. package/dist/io/useCaseStore.js.map +1 -0
  52. package/dist/io/workspace.d.ts +14 -0
  53. package/dist/io/workspace.js +82 -0
  54. package/dist/io/workspace.js.map +1 -0
  55. package/dist/oop/commands.d.ts +446 -0
  56. package/dist/oop/commands.js +319 -0
  57. package/dist/oop/commands.js.map +1 -0
  58. package/dist/oop/conformance.d.ts +16 -0
  59. package/dist/oop/conformance.js +30 -0
  60. package/dist/oop/conformance.js.map +1 -0
  61. package/dist/prompts/discovery.d.ts +2 -0
  62. package/dist/prompts/discovery.js +41 -0
  63. package/dist/prompts/discovery.js.map +1 -0
  64. package/dist/prompts/imagineWithoutController.d.ts +2 -0
  65. package/dist/prompts/imagineWithoutController.js +75 -0
  66. package/dist/prompts/imagineWithoutController.js.map +1 -0
  67. package/dist/prompts/index.d.ts +2 -0
  68. package/dist/prompts/index.js +17 -0
  69. package/dist/prompts/index.js.map +1 -0
  70. package/dist/prompts/phasePressureTest.d.ts +2 -0
  71. package/dist/prompts/phasePressureTest.js +69 -0
  72. package/dist/prompts/phasePressureTest.js.map +1 -0
  73. package/dist/prompts/rddIntro.d.ts +2 -0
  74. package/dist/prompts/rddIntro.js +53 -0
  75. package/dist/prompts/rddIntro.js.map +1 -0
  76. package/dist/prompts/review.d.ts +2 -0
  77. package/dist/prompts/review.js +45 -0
  78. package/dist/prompts/review.js.map +1 -0
  79. package/dist/prompts/stateMachineIntrospect.d.ts +2 -0
  80. package/dist/prompts/stateMachineIntrospect.js +80 -0
  81. package/dist/prompts/stateMachineIntrospect.js.map +1 -0
  82. package/dist/prompts/tellDontAskRephrase.d.ts +2 -0
  83. package/dist/prompts/tellDontAskRephrase.js +66 -0
  84. package/dist/prompts/tellDontAskRephrase.js.map +1 -0
  85. package/dist/render/diff.d.ts +21 -0
  86. package/dist/render/diff.js +84 -0
  87. package/dist/render/diff.js.map +1 -0
  88. package/dist/render/mermaid.d.ts +24 -0
  89. package/dist/render/mermaid.js +53 -0
  90. package/dist/render/mermaid.js.map +1 -0
  91. package/dist/render/sideBySide.d.ts +14 -0
  92. package/dist/render/sideBySide.js +91 -0
  93. package/dist/render/sideBySide.js.map +1 -0
  94. package/dist/resources/index.d.ts +2 -0
  95. package/dist/resources/index.js +349 -0
  96. package/dist/resources/index.js.map +1 -0
  97. package/dist/server.d.ts +2 -0
  98. package/dist/server.js +22 -0
  99. package/dist/server.js.map +1 -0
  100. package/dist/tools/alternatives.d.ts +2 -0
  101. package/dist/tools/alternatives.js +9 -0
  102. package/dist/tools/alternatives.js.map +1 -0
  103. package/dist/tools/classes.d.ts +2 -0
  104. package/dist/tools/classes.js +13 -0
  105. package/dist/tools/classes.js.map +1 -0
  106. package/dist/tools/collaborations.d.ts +2 -0
  107. package/dist/tools/collaborations.js +8 -0
  108. package/dist/tools/collaborations.js.map +1 -0
  109. package/dist/tools/compare.d.ts +2 -0
  110. package/dist/tools/compare.js +9 -0
  111. package/dist/tools/compare.js.map +1 -0
  112. package/dist/tools/conformance.d.ts +3 -0
  113. package/dist/tools/conformance.js +11 -0
  114. package/dist/tools/conformance.js.map +1 -0
  115. package/dist/tools/diagram.d.ts +2 -0
  116. package/dist/tools/diagram.js +9 -0
  117. package/dist/tools/diagram.js.map +1 -0
  118. package/dist/tools/discovery.d.ts +2 -0
  119. package/dist/tools/discovery.js +23 -0
  120. package/dist/tools/discovery.js.map +1 -0
  121. package/dist/tools/index.d.ts +2 -0
  122. package/dist/tools/index.js +27 -0
  123. package/dist/tools/index.js.map +1 -0
  124. package/dist/tools/init.d.ts +2 -0
  125. package/dist/tools/init.js +9 -0
  126. package/dist/tools/init.js.map +1 -0
  127. package/dist/tools/oop.d.ts +9 -0
  128. package/dist/tools/oop.js +26 -0
  129. package/dist/tools/oop.js.map +1 -0
  130. package/dist/tools/responsibilities.d.ts +2 -0
  131. package/dist/tools/responsibilities.js +13 -0
  132. package/dist/tools/responsibilities.js.map +1 -0
  133. package/dist/tools/state.d.ts +2 -0
  134. package/dist/tools/state.js +8 -0
  135. package/dist/tools/state.js.map +1 -0
  136. package/dist/tools/useCases.d.ts +2 -0
  137. package/dist/tools/useCases.js +18 -0
  138. package/dist/tools/useCases.js.map +1 -0
  139. package/dist/tools/validate.d.ts +2 -0
  140. package/dist/tools/validate.js +9 -0
  141. package/dist/tools/validate.js.map +1 -0
  142. package/dist/tradeoff/engine.d.ts +61 -0
  143. package/dist/tradeoff/engine.js +171 -0
  144. package/dist/tradeoff/engine.js.map +1 -0
  145. package/dist/tradeoff/heuristics/classSplit.d.ts +3 -0
  146. package/dist/tradeoff/heuristics/classSplit.js +94 -0
  147. package/dist/tradeoff/heuristics/classSplit.js.map +1 -0
  148. package/dist/tradeoff/heuristics/collaborationShape.d.ts +2 -0
  149. package/dist/tradeoff/heuristics/collaborationShape.js +82 -0
  150. package/dist/tradeoff/heuristics/collaborationShape.js.map +1 -0
  151. package/dist/tradeoff/heuristics/collectionShape.d.ts +2 -0
  152. package/dist/tradeoff/heuristics/collectionShape.js +113 -0
  153. package/dist/tradeoff/heuristics/collectionShape.js.map +1 -0
  154. package/dist/tradeoff/heuristics/dualSubjectComparison.d.ts +2 -0
  155. package/dist/tradeoff/heuristics/dualSubjectComparison.js +114 -0
  156. package/dist/tradeoff/heuristics/dualSubjectComparison.js.map +1 -0
  157. package/dist/tradeoff/heuristics/errorHandling.d.ts +2 -0
  158. package/dist/tradeoff/heuristics/errorHandling.js +110 -0
  159. package/dist/tradeoff/heuristics/errorHandling.js.map +1 -0
  160. package/dist/tradeoff/heuristics/responsibilitySplit.d.ts +23 -0
  161. package/dist/tradeoff/heuristics/responsibilitySplit.js +183 -0
  162. package/dist/tradeoff/heuristics/responsibilitySplit.js.map +1 -0
  163. package/dist/tradeoff/heuristics/stereotypeChoice.d.ts +2 -0
  164. package/dist/tradeoff/heuristics/stereotypeChoice.js +23 -0
  165. package/dist/tradeoff/heuristics/stereotypeChoice.js.map +1 -0
  166. package/dist/tradeoff/heuristics/strategyOrPolicy.d.ts +2 -0
  167. package/dist/tradeoff/heuristics/strategyOrPolicy.js +110 -0
  168. package/dist/tradeoff/heuristics/strategyOrPolicy.js.map +1 -0
  169. package/dist/tradeoff/heuristics/valueObjectShape.d.ts +2 -0
  170. package/dist/tradeoff/heuristics/valueObjectShape.js +111 -0
  171. package/dist/tradeoff/heuristics/valueObjectShape.js.map +1 -0
  172. package/dist/tradeoff/templates.d.ts +2 -0
  173. package/dist/tradeoff/templates.js +33 -0
  174. package/dist/tradeoff/templates.js.map +1 -0
  175. package/dist/util/log.d.ts +1 -0
  176. package/dist/util/log.js +7 -0
  177. package/dist/util/log.js.map +1 -0
  178. package/dist/util/mcp.d.ts +4 -0
  179. package/dist/util/mcp.js +18 -0
  180. package/dist/util/mcp.js.map +1 -0
  181. package/dist/validate/cohesion.d.ts +3 -0
  182. package/dist/validate/cohesion.js +88 -0
  183. package/dist/validate/cohesion.js.map +1 -0
  184. package/dist/validate/collectionWrapper.d.ts +3 -0
  185. package/dist/validate/collectionWrapper.js +131 -0
  186. package/dist/validate/collectionWrapper.js.map +1 -0
  187. package/dist/validate/coupling.d.ts +3 -0
  188. package/dist/validate/coupling.js +47 -0
  189. package/dist/validate/coupling.js.map +1 -0
  190. package/dist/validate/cycle.d.ts +3 -0
  191. package/dist/validate/cycle.js +101 -0
  192. package/dist/validate/cycle.js.map +1 -0
  193. package/dist/validate/dataDuplication.d.ts +3 -0
  194. package/dist/validate/dataDuplication.js +150 -0
  195. package/dist/validate/dataDuplication.js.map +1 -0
  196. package/dist/validate/dependencyDirection.d.ts +3 -0
  197. package/dist/validate/dependencyDirection.js +106 -0
  198. package/dist/validate/dependencyDirection.js.map +1 -0
  199. package/dist/validate/dualUseKnowing.d.ts +3 -0
  200. package/dist/validate/dualUseKnowing.js +137 -0
  201. package/dist/validate/dualUseKnowing.js.map +1 -0
  202. package/dist/validate/emptyObjectFill.d.ts +3 -0
  203. package/dist/validate/emptyObjectFill.js +119 -0
  204. package/dist/validate/emptyObjectFill.js.map +1 -0
  205. package/dist/validate/findings.d.ts +22 -0
  206. package/dist/validate/findings.js +12 -0
  207. package/dist/validate/findings.js.map +1 -0
  208. package/dist/validate/functionDecompositionExcess.d.ts +3 -0
  209. package/dist/validate/functionDecompositionExcess.js +120 -0
  210. package/dist/validate/functionDecompositionExcess.js.map +1 -0
  211. package/dist/validate/functionNotObject.d.ts +3 -0
  212. package/dist/validate/functionNotObject.js +80 -0
  213. package/dist/validate/functionNotObject.js.map +1 -0
  214. package/dist/validate/godObject.d.ts +6 -0
  215. package/dist/validate/godObject.js +76 -0
  216. package/dist/validate/godObject.js.map +1 -0
  217. package/dist/validate/presentationInDomain.d.ts +3 -0
  218. package/dist/validate/presentationInDomain.js +57 -0
  219. package/dist/validate/presentationInDomain.js.map +1 -0
  220. package/dist/validate/primitiveWrapper.d.ts +3 -0
  221. package/dist/validate/primitiveWrapper.js +106 -0
  222. package/dist/validate/primitiveWrapper.js.map +1 -0
  223. package/dist/validate/rules.d.ts +24 -0
  224. package/dist/validate/rules.js +269 -0
  225. package/dist/validate/rules.js.map +1 -0
  226. package/dist/validate/singletonStatefulHolder.d.ts +3 -0
  227. package/dist/validate/singletonStatefulHolder.js +128 -0
  228. package/dist/validate/singletonStatefulHolder.js.map +1 -0
  229. package/dist/validate/strategyAsymmetry.d.ts +3 -0
  230. package/dist/validate/strategyAsymmetry.js +131 -0
  231. package/dist/validate/strategyAsymmetry.js.map +1 -0
  232. package/dist/validate/testability.d.ts +5 -0
  233. package/dist/validate/testability.js +157 -0
  234. package/dist/validate/testability.js.map +1 -0
  235. package/dist/validate/vagueName.d.ts +3 -0
  236. package/dist/validate/vagueName.js +136 -0
  237. package/dist/validate/vagueName.js.map +1 -0
  238. package/dist/validate/validationLocation.d.ts +3 -0
  239. package/dist/validate/validationLocation.js +120 -0
  240. package/dist/validate/validationLocation.js.map +1 -0
  241. package/lessons/STYLE_GUIDE.md +304 -0
  242. package/lessons/woowacourse-kotlin-blackjack/2chang5/33-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +293 -0
  243. package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/52-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +106 -0
  244. package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/9-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
  245. package/lessons/woowacourse-kotlin-blackjack/DYGames/14-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +182 -0
  246. package/lessons/woowacourse-kotlin-blackjack/DYGames/37-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +122 -0
  247. package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/12-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +117 -0
  248. package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/38-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +291 -0
  249. package/lessons/woowacourse-kotlin-blackjack/HANDOVER.md +1475 -0
  250. package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/119-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +251 -0
  251. package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/137-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +459 -0
  252. package/lessons/woowacourse-kotlin-blackjack/Hevton/100-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
  253. package/lessons/woowacourse-kotlin-blackjack/Hevton/82-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +303 -0
  254. package/lessons/woowacourse-kotlin-blackjack/Hogu59/71-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +134 -0
  255. package/lessons/woowacourse-kotlin-blackjack/Hogu59/96-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +323 -0
  256. package/lessons/woowacourse-kotlin-blackjack/JoYehyun99/66-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +210 -0
  257. package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/101-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +191 -0
  258. package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/80-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
  259. package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/108-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +516 -0
  260. package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/133-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +541 -0
  261. package/lessons/woowacourse-kotlin-blackjack/RightHennessy/22-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
  262. package/lessons/woowacourse-kotlin-blackjack/RightHennessy/48-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
  263. package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/16-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +228 -0
  264. package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/54-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +227 -0
  265. package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/76-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
  266. package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +203 -0
  267. package/lessons/woowacourse-kotlin-blackjack/aprilgom/105-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +162 -0
  268. package/lessons/woowacourse-kotlin-blackjack/aprilgom/64-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
  269. package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/18-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
  270. package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/36-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +769 -0
  271. package/lessons/woowacourse-kotlin-blackjack/briandr97/19-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +226 -0
  272. package/lessons/woowacourse-kotlin-blackjack/briandr97/59-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +193 -0
  273. package/lessons/woowacourse-kotlin-blackjack/chaehyuns/70-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
  274. package/lessons/woowacourse-kotlin-blackjack/chaehyuns/98-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
  275. package/lessons/woowacourse-kotlin-blackjack/chanho0908/123-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +277 -0
  276. package/lessons/woowacourse-kotlin-blackjack/chanho0908/150-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
  277. package/lessons/woowacourse-kotlin-blackjack/chws0508/26-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +259 -0
  278. package/lessons/woowacourse-kotlin-blackjack/chws0508/43-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +189 -0
  279. package/lessons/woowacourse-kotlin-blackjack/cucumber99/109-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +351 -0
  280. package/lessons/woowacourse-kotlin-blackjack/cucumber99/149-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +147 -0
  281. package/lessons/woowacourse-kotlin-blackjack/devfeijoa/121-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +168 -0
  282. package/lessons/woowacourse-kotlin-blackjack/devfeijoa/153-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +116 -0
  283. package/lessons/woowacourse-kotlin-blackjack/doabletuple/126-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +680 -0
  284. package/lessons/woowacourse-kotlin-blackjack/doabletuple/142-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +739 -0
  285. package/lessons/woowacourse-kotlin-blackjack/donghyun81/116-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
  286. package/lessons/woowacourse-kotlin-blackjack/donghyun81/147-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +244 -0
  287. package/lessons/woowacourse-kotlin-blackjack/dpcks0509/78-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +232 -0
  288. package/lessons/woowacourse-kotlin-blackjack/dpcks0509/88-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +137 -0
  289. package/lessons/woowacourse-kotlin-blackjack/etama123/112-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
  290. package/lessons/woowacourse-kotlin-blackjack/etama123/148-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +240 -0
  291. package/lessons/woowacourse-kotlin-blackjack/gaeun5744/102-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +146 -0
  292. package/lessons/woowacourse-kotlin-blackjack/gaeun5744/69-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
  293. package/lessons/woowacourse-kotlin-blackjack/gahyunkim/118-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +397 -0
  294. package/lessons/woowacourse-kotlin-blackjack/gahyunkim/141-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +215 -0
  295. package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/106-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +395 -0
  296. package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/134-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
  297. package/lessons/woowacourse-kotlin-blackjack/haeum808/62-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +230 -0
  298. package/lessons/woowacourse-kotlin-blackjack/haeum808/89-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +169 -0
  299. package/lessons/woowacourse-kotlin-blackjack/hwannow/110-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
  300. package/lessons/woowacourse-kotlin-blackjack/hwannow/132-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +573 -0
  301. package/lessons/woowacourse-kotlin-blackjack/hxeyexn/103-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
  302. package/lessons/woowacourse-kotlin-blackjack/hxeyexn/81-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +301 -0
  303. package/lessons/woowacourse-kotlin-blackjack/hyemdooly/21-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +613 -0
  304. package/lessons/woowacourse-kotlin-blackjack/hyemdooly/35-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +691 -0
  305. package/lessons/woowacourse-kotlin-blackjack/hyunji1203/13-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
  306. package/lessons/woowacourse-kotlin-blackjack/ii2001/79-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +153 -0
  307. package/lessons/woowacourse-kotlin-blackjack/ii2001/85-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +318 -0
  308. package/lessons/woowacourse-kotlin-blackjack/ijh1298/128-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
  309. package/lessons/woowacourse-kotlin-blackjack/ijh1298/135-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
  310. package/lessons/woowacourse-kotlin-blackjack/inseonyun/28-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +346 -0
  311. package/lessons/woowacourse-kotlin-blackjack/inseonyun/49-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +360 -0
  312. package/lessons/woowacourse-kotlin-blackjack/ippnsj/30-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +152 -0
  313. package/lessons/woowacourse-kotlin-blackjack/ippnsj/42-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +213 -0
  314. package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/73-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +247 -0
  315. package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/87-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +900 -0
  316. package/lessons/woowacourse-kotlin-blackjack/jerry8282/125-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +248 -0
  317. package/lessons/woowacourse-kotlin-blackjack/jerry8282/151-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +243 -0
  318. package/lessons/woowacourse-kotlin-blackjack/jinuemong/63-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +281 -0
  319. package/lessons/woowacourse-kotlin-blackjack/jinuemong/92-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +283 -0
  320. package/lessons/woowacourse-kotlin-blackjack/jiyuneel/113-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +348 -0
  321. package/lessons/woowacourse-kotlin-blackjack/jiyuneel/140-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
  322. package/lessons/woowacourse-kotlin-blackjack/junjange/61-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +270 -0
  323. package/lessons/woowacourse-kotlin-blackjack/junjange/93-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +465 -0
  324. package/lessons/woowacourse-kotlin-blackjack/junseo511/107-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +296 -0
  325. package/lessons/woowacourse-kotlin-blackjack/junseo511/145-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +316 -0
  326. package/lessons/woowacourse-kotlin-blackjack/ki960213/11-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
  327. package/lessons/woowacourse-kotlin-blackjack/kimhm0728/72-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +458 -0
  328. package/lessons/woowacourse-kotlin-blackjack/kimhm0728/97-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +225 -0
  329. package/lessons/woowacourse-kotlin-blackjack/kkosang/68-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
  330. package/lessons/woowacourse-kotlin-blackjack/kkosang/94-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +158 -0
  331. package/lessons/woowacourse-kotlin-blackjack/kmkim2689/65-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +252 -0
  332. package/lessons/woowacourse-kotlin-blackjack/kmkim2689/90-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +460 -0
  333. package/lessons/woowacourse-kotlin-blackjack/krrong/32-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
  334. package/lessons/woowacourse-kotlin-blackjack/krrong/46-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +285 -0
  335. package/lessons/woowacourse-kotlin-blackjack/m6z1/122-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +177 -0
  336. package/lessons/woowacourse-kotlin-blackjack/m6z1/144-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +155 -0
  337. package/lessons/woowacourse-kotlin-blackjack/medAndro/130-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
  338. package/lessons/woowacourse-kotlin-blackjack/medAndro/143-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +678 -0
  339. package/lessons/woowacourse-kotlin-blackjack/moondev03/114-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +262 -0
  340. package/lessons/woowacourse-kotlin-blackjack/moondev03/131-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +498 -0
  341. package/lessons/woowacourse-kotlin-blackjack/murjune/77-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +287 -0
  342. package/lessons/woowacourse-kotlin-blackjack/murjune/91-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +280 -0
  343. package/lessons/woowacourse-kotlin-blackjack/no1msh/31-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
  344. package/lessons/woowacourse-kotlin-blackjack/otter66/24-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +302 -0
  345. package/lessons/woowacourse-kotlin-blackjack/otter66/58-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +391 -0
  346. package/lessons/woowacourse-kotlin-blackjack/oungsi2000/111-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
  347. package/lessons/woowacourse-kotlin-blackjack/oungsi2000/136-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +540 -0
  348. package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/117-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +819 -0
  349. package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/139-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
  350. package/lessons/woowacourse-kotlin-blackjack/pingu244/20-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +258 -0
  351. package/lessons/woowacourse-kotlin-blackjack/pingu244/41-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +171 -0
  352. package/lessons/woowacourse-kotlin-blackjack/re4rk/34-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +289 -0
  353. package/lessons/woowacourse-kotlin-blackjack/re4rk/8-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
  354. package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/17-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
  355. package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/50-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +145 -0
  356. package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/23-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
  357. package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/39-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
  358. package/lessons/woowacourse-kotlin-blackjack/rosemin928/129-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +726 -0
  359. package/lessons/woowacourse-kotlin-blackjack/rosemin928/138-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +845 -0
  360. package/lessons/woowacourse-kotlin-blackjack/s6m1n/67-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +220 -0
  361. package/lessons/woowacourse-kotlin-blackjack/s6m1n/99-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +229 -0
  362. package/lessons/woowacourse-kotlin-blackjack/s9hn/10-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +284 -0
  363. package/lessons/woowacourse-kotlin-blackjack/sh1mj1/75-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
  364. package/lessons/woowacourse-kotlin-blackjack/songpink/74-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
  365. package/lessons/woowacourse-kotlin-blackjack/songpink/95-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
  366. package/lessons/woowacourse-kotlin-blackjack/sujin9/15-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +132 -0
  367. package/lessons/woowacourse-kotlin-blackjack/sujin9/47-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
  368. package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/29-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
  369. package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/51-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
  370. package/lessons/woowacourse-kotlin-blackjack/tobae-time/115-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
  371. package/lessons/woowacourse-kotlin-blackjack/tobae-time/154-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +298 -0
  372. package/lessons/woowacourse-kotlin-blackjack/whk06061/25-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +235 -0
  373. package/lessons/woowacourse-kotlin-blackjack/whk06061/53-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +130 -0
  374. package/lessons/woowacourse-kotlin-blackjack/wondroid-world/124-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +486 -0
  375. package/lessons/woowacourse-kotlin-blackjack/wondroid-world/152-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +482 -0
  376. package/lessons/woowacourse-kotlin-blackjack/yrsel/120-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +194 -0
  377. package/lessons/woowacourse-kotlin-blackjack/yrsel/146-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +444 -0
  378. package/lessons/woowacourse-kotlin-lotto/2chang5/27-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
  379. package/lessons/woowacourse-kotlin-lotto/2chang5/52-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +187 -0
  380. package/lessons/woowacourse-kotlin-lotto/Choisehyeon/14-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +206 -0
  381. package/lessons/woowacourse-kotlin-lotto/Choisehyeon/47-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
  382. package/lessons/woowacourse-kotlin-lotto/DYGames/2-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
  383. package/lessons/woowacourse-kotlin-lotto/DYGames/34-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +88 -0
  384. package/lessons/woowacourse-kotlin-lotto/EmilyCh0/12-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
  385. package/lessons/woowacourse-kotlin-lotto/EmilyCh0/40-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +135 -0
  386. package/lessons/woowacourse-kotlin-lotto/HANDOVER.md +217 -0
  387. package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/121-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
  388. package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/139-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +75 -0
  389. package/lessons/woowacourse-kotlin-lotto/Hevton/76-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
  390. package/lessons/woowacourse-kotlin-lotto/Hevton/92-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +122 -0
  391. package/lessons/woowacourse-kotlin-lotto/Hogu59/100-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +110 -0
  392. package/lessons/woowacourse-kotlin-lotto/Hogu59/68-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +84 -0
  393. package/lessons/woowacourse-kotlin-lotto/JoYehyun99/60-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
  394. package/lessons/woowacourse-kotlin-lotto/JoYehyun99/96-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
  395. package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/61-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
  396. package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/93-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +16 -0
  397. package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/109-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +57 -0
  398. package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/135-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
  399. package/lessons/woowacourse-kotlin-lotto/PROGRESS.md +160 -0
  400. package/lessons/woowacourse-kotlin-lotto/README.md +77 -0
  401. package/lessons/woowacourse-kotlin-lotto/RightHennessy/32-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
  402. package/lessons/woowacourse-kotlin-lotto/RightHennessy/5-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
  403. package/lessons/woowacourse-kotlin-lotto/SUMMARY.md +369 -0
  404. package/lessons/woowacourse-kotlin-lotto/SeongHoonC/25-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
  405. package/lessons/woowacourse-kotlin-lotto/SeongHoonC/37-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +27 -0
  406. package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/72-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +137 -0
  407. package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +17 -0
  408. package/lessons/woowacourse-kotlin-lotto/aprilgom/102-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +62 -0
  409. package/lessons/woowacourse-kotlin-lotto/aprilgom/64-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
  410. package/lessons/woowacourse-kotlin-lotto/boogi-woogi/11-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
  411. package/lessons/woowacourse-kotlin-lotto/boogi-woogi/29-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
  412. package/lessons/woowacourse-kotlin-lotto/briandr97/26-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
  413. package/lessons/woowacourse-kotlin-lotto/briandr97/51-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +123 -0
  414. package/lessons/woowacourse-kotlin-lotto/chaehyuns/71-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
  415. package/lessons/woowacourse-kotlin-lotto/chaehyuns/97-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
  416. package/lessons/woowacourse-kotlin-lotto/chanho0908/124-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
  417. package/lessons/woowacourse-kotlin-lotto/chanho0908/129-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
  418. package/lessons/woowacourse-kotlin-lotto/chws0508/24-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +117 -0
  419. package/lessons/woowacourse-kotlin-lotto/chws0508/50-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +167 -0
  420. package/lessons/woowacourse-kotlin-lotto/cucumber99/116-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
  421. package/lessons/woowacourse-kotlin-lotto/cucumber99/147-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +223 -0
  422. package/lessons/woowacourse-kotlin-lotto/devfeijoa/125-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
  423. package/lessons/woowacourse-kotlin-lotto/devfeijoa/153-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
  424. package/lessons/woowacourse-kotlin-lotto/doabletuple/119-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
  425. package/lessons/woowacourse-kotlin-lotto/doabletuple/138-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +77 -0
  426. package/lessons/woowacourse-kotlin-lotto/donghyun81/111-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
  427. package/lessons/woowacourse-kotlin-lotto/donghyun81/152-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
  428. package/lessons/woowacourse-kotlin-lotto/dpcks0509/80-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
  429. package/lessons/woowacourse-kotlin-lotto/dpcks0509/87-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +134 -0
  430. package/lessons/woowacourse-kotlin-lotto/etama123/112-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +170 -0
  431. package/lessons/woowacourse-kotlin-lotto/etama123/148-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +183 -0
  432. package/lessons/woowacourse-kotlin-lotto/gaeun5744/101-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
  433. package/lessons/woowacourse-kotlin-lotto/gaeun5744/78-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
  434. package/lessons/woowacourse-kotlin-lotto/gahyunkim/107-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
  435. package/lessons/woowacourse-kotlin-lotto/gahyunkim/136-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
  436. package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/106-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
  437. package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/137-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +111 -0
  438. package/lessons/woowacourse-kotlin-lotto/haeum808/67-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
  439. package/lessons/woowacourse-kotlin-lotto/haeum808/95-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
  440. package/lessons/woowacourse-kotlin-lotto/hwannow/113-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +235 -0
  441. package/lessons/woowacourse-kotlin-lotto/hwannow/132-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
  442. package/lessons/woowacourse-kotlin-lotto/hxeyexn/77-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
  443. package/lessons/woowacourse-kotlin-lotto/hxeyexn/98-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +162 -0
  444. package/lessons/woowacourse-kotlin-lotto/hyemdooly/17-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
  445. package/lessons/woowacourse-kotlin-lotto/hyemdooly/28-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +23 -0
  446. package/lessons/woowacourse-kotlin-lotto/hyunji1203/15-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
  447. package/lessons/woowacourse-kotlin-lotto/hyunji1203/48-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
  448. package/lessons/woowacourse-kotlin-lotto/ii2001/62-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
  449. package/lessons/woowacourse-kotlin-lotto/ii2001/88-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
  450. package/lessons/woowacourse-kotlin-lotto/ijh1298/122-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
  451. package/lessons/woowacourse-kotlin-lotto/ijh1298/133-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
  452. package/lessons/woowacourse-kotlin-lotto/inseonyun/3-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +222 -0
  453. package/lessons/woowacourse-kotlin-lotto/inseonyun/49-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +166 -0
  454. package/lessons/woowacourse-kotlin-lotto/ippnsj/16-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +154 -0
  455. package/lessons/woowacourse-kotlin-lotto/ippnsj/55-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
  456. package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/59-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
  457. package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/83-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +53 -0
  458. package/lessons/woowacourse-kotlin-lotto/jerry8282/115-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
  459. package/lessons/woowacourse-kotlin-lotto/jerry8282/134-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
  460. package/lessons/woowacourse-kotlin-lotto/jinuemong/63-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +144 -0
  461. package/lessons/woowacourse-kotlin-lotto/jinuemong/89-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
  462. package/lessons/woowacourse-kotlin-lotto/jiyuneel/128-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
  463. package/lessons/woowacourse-kotlin-lotto/jiyuneel/144-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
  464. package/lessons/woowacourse-kotlin-lotto/junjange/58-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
  465. package/lessons/woowacourse-kotlin-lotto/junjange/81-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
  466. package/lessons/woowacourse-kotlin-lotto/junseo511/120-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
  467. package/lessons/woowacourse-kotlin-lotto/junseo511/131-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +188 -0
  468. package/lessons/woowacourse-kotlin-lotto/ki960213/43-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +24 -0
  469. package/lessons/woowacourse-kotlin-lotto/ki960213/8-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +159 -0
  470. package/lessons/woowacourse-kotlin-lotto/kimhm0728/74-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +50 -0
  471. package/lessons/woowacourse-kotlin-lotto/kimhm0728/94-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
  472. package/lessons/woowacourse-kotlin-lotto/kkosang/85-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
  473. package/lessons/woowacourse-kotlin-lotto/kmkim2689/70-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
  474. package/lessons/woowacourse-kotlin-lotto/kmkim2689/82-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
  475. package/lessons/woowacourse-kotlin-lotto/krrong/19-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +161 -0
  476. package/lessons/woowacourse-kotlin-lotto/krrong/41-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +73 -0
  477. package/lessons/woowacourse-kotlin-lotto/m6z1/105-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
  478. package/lessons/woowacourse-kotlin-lotto/m6z1/151-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
  479. package/lessons/woowacourse-kotlin-lotto/medAndro/127-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +186 -0
  480. package/lessons/woowacourse-kotlin-lotto/medAndro/130-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +132 -0
  481. package/lessons/woowacourse-kotlin-lotto/moondev03/110-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
  482. package/lessons/woowacourse-kotlin-lotto/moondev03/141-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
  483. package/lessons/woowacourse-kotlin-lotto/murjune/69-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
  484. package/lessons/woowacourse-kotlin-lotto/murjune/90-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +177 -0
  485. package/lessons/woowacourse-kotlin-lotto/no1msh/20-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +69 -0
  486. package/lessons/woowacourse-kotlin-lotto/no1msh/46-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
  487. package/lessons/woowacourse-kotlin-lotto/otter66/13-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
  488. package/lessons/woowacourse-kotlin-lotto/otter66/53-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +160 -0
  489. package/lessons/woowacourse-kotlin-lotto/oungsi2000/126-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
  490. package/lessons/woowacourse-kotlin-lotto/oungsi2000/149-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +56 -0
  491. package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/117-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
  492. package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/146-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +173 -0
  493. package/lessons/woowacourse-kotlin-lotto/pingu244/33-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
  494. package/lessons/woowacourse-kotlin-lotto/pingu244/54-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
  495. package/lessons/woowacourse-kotlin-lotto/pingu244/7-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
  496. package/lessons/woowacourse-kotlin-lotto/re4rk/31-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
  497. package/lessons/woowacourse-kotlin-lotto/re4rk/4-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
  498. package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/23-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
  499. package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/38-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
  500. package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/21-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
  501. package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/36-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
  502. package/lessons/woowacourse-kotlin-lotto/rosemin928/123-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
  503. package/lessons/woowacourse-kotlin-lotto/rosemin928/140-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +126 -0
  504. package/lessons/woowacourse-kotlin-lotto/s6m1n/103-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
  505. package/lessons/woowacourse-kotlin-lotto/s6m1n/66-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +118 -0
  506. package/lessons/woowacourse-kotlin-lotto/s9hn/18-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +112 -0
  507. package/lessons/woowacourse-kotlin-lotto/sh1mj1/75-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
  508. package/lessons/woowacourse-kotlin-lotto/sh1mj1/91-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +140 -0
  509. package/lessons/woowacourse-kotlin-lotto/songpink/65-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +96 -0
  510. package/lessons/woowacourse-kotlin-lotto/songpink/99-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +64 -0
  511. package/lessons/woowacourse-kotlin-lotto/sujin9/10-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
  512. package/lessons/woowacourse-kotlin-lotto/sujin9/35-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
  513. package/lessons/woowacourse-kotlin-lotto/tmdgh1592/22-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
  514. package/lessons/woowacourse-kotlin-lotto/tmdgh1592/30-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
  515. package/lessons/woowacourse-kotlin-lotto/tobae-time/114-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
  516. package/lessons/woowacourse-kotlin-lotto/tobae-time/145-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +120 -0
  517. package/lessons/woowacourse-kotlin-lotto/whk06061/42-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
  518. package/lessons/woowacourse-kotlin-lotto/whk06061/9-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +89 -0
  519. package/lessons/woowacourse-kotlin-lotto/wondroid-world/118-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +100 -0
  520. package/lessons/woowacourse-kotlin-lotto/wondroid-world/150-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +142 -0
  521. package/lessons/woowacourse-kotlin-lotto/yrsel/108-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
  522. package/lessons/woowacourse-kotlin-lotto/yrsel/143-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +108 -0
  523. package/lessons/woowacourse-racingcar/2chang5/33-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
  524. package/lessons/woowacourse-racingcar/2chang5/75-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  525. package/lessons/woowacourse-racingcar/CFalws/85-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
  526. package/lessons/woowacourse-racingcar/Choisehyeon/46-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
  527. package/lessons/woowacourse-racingcar/DYGames/49-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
  528. package/lessons/woowacourse-racingcar/EmilyCh0/40-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +64 -0
  529. package/lessons/woowacourse-racingcar/EmilyCh0/57-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  530. package/lessons/woowacourse-racingcar/HamBeomJoon/137-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  531. package/lessons/woowacourse-racingcar/HamBeomJoon/170-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  532. package/lessons/woowacourse-racingcar/Hevton/106-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  533. package/lessons/woowacourse-racingcar/Hevton/118-/353/246/254/355/214/251/355/204/260/353/247/201.md +51 -0
  534. package/lessons/woowacourse-racingcar/Hogu59/108-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
  535. package/lessons/woowacourse-racingcar/Hogu59/125-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  536. package/lessons/woowacourse-racingcar/JoYehyun99/111-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  537. package/lessons/woowacourse-racingcar/JoYehyun99/88-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
  538. package/lessons/woowacourse-racingcar/Junyoung-WON/127-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  539. package/lessons/woowacourse-racingcar/Junyoung-WON/90-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  540. package/lessons/woowacourse-racingcar/Leeyerin0210/133-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  541. package/lessons/woowacourse-racingcar/Leeyerin0210/159-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  542. package/lessons/woowacourse-racingcar/PROGRESS.md +94 -0
  543. package/lessons/woowacourse-racingcar/README.md +69 -0
  544. package/lessons/woowacourse-racingcar/RightHennessy/51-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  545. package/lessons/woowacourse-racingcar/RightHennessy/58-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  546. package/lessons/woowacourse-racingcar/RunaNam/81-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
  547. package/lessons/woowacourse-racingcar/SUMMARY.md +339 -0
  548. package/lessons/woowacourse-racingcar/SeongHoonC/37-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  549. package/lessons/woowacourse-racingcar/SeongHoonC/66-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  550. package/lessons/woowacourse-racingcar/Songusika/84-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  551. package/lessons/woowacourse-racingcar/Yunseok-Nam/114-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
  552. package/lessons/woowacourse-racingcar/Yunseok-Nam/96-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  553. package/lessons/woowacourse-racingcar/aprilgom/130-/353/246/254/355/214/251/355/204/260/353/247/201.md +52 -0
  554. package/lessons/woowacourse-racingcar/aprilgom/97-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  555. package/lessons/woowacourse-racingcar/awesomeo184/23-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  556. package/lessons/woowacourse-racingcar/boogi-woogi/35-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
  557. package/lessons/woowacourse-racingcar/boogi-woogi/59-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  558. package/lessons/woowacourse-racingcar/briandr97/54-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  559. package/lessons/woowacourse-racingcar/chaehyuns/131-/353/246/254/355/214/251/355/204/260/353/247/201.md +49 -0
  560. package/lessons/woowacourse-racingcar/chaehyuns/99-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
  561. package/lessons/woowacourse-racingcar/chanho0908/147-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  562. package/lessons/woowacourse-racingcar/chanho0908/160-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  563. package/lessons/woowacourse-racingcar/chws0508/45-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
  564. package/lessons/woowacourse-racingcar/chws0508/73-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
  565. package/lessons/woowacourse-racingcar/cucumber99/132-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  566. package/lessons/woowacourse-racingcar/cucumber99/177-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  567. package/lessons/woowacourse-racingcar/devfeijoa/146-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  568. package/lessons/woowacourse-racingcar/doabletuple/149-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  569. package/lessons/woowacourse-racingcar/doabletuple/175-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  570. package/lessons/woowacourse-racingcar/donghyun81/154-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
  571. package/lessons/woowacourse-racingcar/dpcks0509/103-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  572. package/lessons/woowacourse-racingcar/dpcks0509/112-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  573. package/lessons/woowacourse-racingcar/drunkenhw/82-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  574. package/lessons/woowacourse-racingcar/etama123/145-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  575. package/lessons/woowacourse-racingcar/gaeun5744/124-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
  576. package/lessons/woowacourse-racingcar/gaeun5744/93-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  577. package/lessons/woowacourse-racingcar/gahyunkim/134-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  578. package/lessons/woowacourse-racingcar/gahyunkim/164-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  579. package/lessons/woowacourse-racingcar/giovannijunseokim/140-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  580. package/lessons/woowacourse-racingcar/haeum808/101-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  581. package/lessons/woowacourse-racingcar/haeum808/129-/353/246/254/355/214/251/355/204/260/353/247/201.md +46 -0
  582. package/lessons/woowacourse-racingcar/hwannow/141-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
  583. package/lessons/woowacourse-racingcar/hwannow/157-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
  584. package/lessons/woowacourse-racingcar/hxeyexn/109-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
  585. package/lessons/woowacourse-racingcar/hxeyexn/128-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  586. package/lessons/woowacourse-racingcar/hyemdooly/50-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  587. package/lessons/woowacourse-racingcar/hyemdooly/68-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  588. package/lessons/woowacourse-racingcar/hyunji1203/29-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  589. package/lessons/woowacourse-racingcar/hyunji1203/60-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  590. package/lessons/woowacourse-racingcar/ii2001/102-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
  591. package/lessons/woowacourse-racingcar/ii2001/122-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  592. package/lessons/woowacourse-racingcar/ijh1298/144-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  593. package/lessons/woowacourse-racingcar/injoon2019/24-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
  594. package/lessons/woowacourse-racingcar/inseonyun/44-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  595. package/lessons/woowacourse-racingcar/inseonyun/76-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  596. package/lessons/woowacourse-racingcar/ippnsj/36-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  597. package/lessons/woowacourse-racingcar/ippnsj/67-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  598. package/lessons/woowacourse-racingcar/jaeyeongjo/110-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
  599. package/lessons/woowacourse-racingcar/jaeyeongjo/89-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
  600. package/lessons/woowacourse-racingcar/jinuemong/104-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  601. package/lessons/woowacourse-racingcar/jinuemong/117-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
  602. package/lessons/woowacourse-racingcar/jiyuneel/142-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  603. package/lessons/woowacourse-racingcar/junjange/113-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +41 -0
  604. package/lessons/woowacourse-racingcar/junjange/87-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
  605. package/lessons/woowacourse-racingcar/junseo511/148-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
  606. package/lessons/woowacourse-racingcar/junseo511/165-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
  607. package/lessons/woowacourse-racingcar/ki960213/32-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  608. package/lessons/woowacourse-racingcar/ki960213/63-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
  609. package/lessons/woowacourse-racingcar/kimhm0728/100-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
  610. package/lessons/woowacourse-racingcar/kimhm0728/116-/353/246/254/355/214/251/355/204/260/353/247/201.md +54 -0
  611. package/lessons/woowacourse-racingcar/kkosang/105-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  612. package/lessons/woowacourse-racingcar/kkosang/126-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
  613. package/lessons/woowacourse-racingcar/kmkim2689/123-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  614. package/lessons/woowacourse-racingcar/kmkim2689/92-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  615. package/lessons/woowacourse-racingcar/krrong/34-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +63 -0
  616. package/lessons/woowacourse-racingcar/m6z1/150-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  617. package/lessons/woowacourse-racingcar/m6z1/156-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +40 -0
  618. package/lessons/woowacourse-racingcar/medAndro/153-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  619. package/lessons/woowacourse-racingcar/moondev03/135-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
  620. package/lessons/woowacourse-racingcar/moondev03/161-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
  621. package/lessons/woowacourse-racingcar/murjune/121-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  622. package/lessons/woowacourse-racingcar/murjune/95-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  623. package/lessons/woowacourse-racingcar/no1msh/43-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  624. package/lessons/woowacourse-racingcar/no1msh/69-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  625. package/lessons/woowacourse-racingcar/otter66/48-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  626. package/lessons/woowacourse-racingcar/otter66/77-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
  627. package/lessons/woowacourse-racingcar/oungsi2000/152-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
  628. package/lessons/woowacourse-racingcar/oungsi2000/187-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  629. package/lessons/woowacourse-racingcar/parkjiminnnn/143-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
  630. package/lessons/woowacourse-racingcar/parkjiminnnn/158-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  631. package/lessons/woowacourse-racingcar/pingu244/38-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
  632. package/lessons/woowacourse-racingcar/pingu244/62-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  633. package/lessons/woowacourse-racingcar/re4rk/28-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
  634. package/lessons/woowacourse-racingcar/re4rk/55-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  635. package/lessons/woowacourse-racingcar/rhkrwngud445/42-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  636. package/lessons/woowacourse-racingcar/rhkrwngud445/74-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
  637. package/lessons/woowacourse-racingcar/rhthrhrl0/31-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
  638. package/lessons/woowacourse-racingcar/rosemin928/138-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  639. package/lessons/woowacourse-racingcar/rosemin928/171-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +38 -0
  640. package/lessons/woowacourse-racingcar/s6m1n/120-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
  641. package/lessons/woowacourse-racingcar/s6m1n/91-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
  642. package/lessons/woowacourse-racingcar/s9hn/53-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
  643. package/lessons/woowacourse-racingcar/s9hn/78-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
  644. package/lessons/woowacourse-racingcar/sh1mj1/107-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  645. package/lessons/woowacourse-racingcar/sh1mj1/115-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
  646. package/lessons/woowacourse-racingcar/songpink/119-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
  647. package/lessons/woowacourse-racingcar/songpink/98-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
  648. package/lessons/woowacourse-racingcar/sujin9/52-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
  649. package/lessons/woowacourse-racingcar/sujin9/61-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
  650. package/lessons/woowacourse-racingcar/tmdgh1592/47-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  651. package/lessons/woowacourse-racingcar/tmdgh1592/64-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  652. package/lessons/woowacourse-racingcar/tobae-time/151-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
  653. package/lessons/woowacourse-racingcar/tobae-time/167-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
  654. package/lessons/woowacourse-racingcar/whk06061/41-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
  655. package/lessons/woowacourse-racingcar/wondroid-world/136-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
  656. package/lessons/woowacourse-racingcar/wondroid-world/166-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
  657. package/lessons/woowacourse-racingcar/yrsel/139-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
  658. package/lessons/woowacourse-racingcar/yujamint/83-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
  659. package/package.json +46 -0
  660. package/skills/oh-my-oop/SKILL.md +39 -0
@@ -0,0 +1,106 @@
1
+ # PR #52 — [로피] 2단계 블랙잭
2
+
3
+ - **Reviewee:** [@Choisehyeon](https://github.com/Choisehyeon) (로피)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/52
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@BeokBeok](https://github.com/BeokBeok) (커트/벅벅)
7
+ - **라인 코멘트:** 6 스레드 — *PR 본문 3 인스턴스 변수 원칙 학생 자가 어려움 어휘 + 학생 자가 답변 2 thread / 와일드카드 import + null 보장 + 함수명 = 도메인 의도 + enum profitRate 칭찬 + 테스트 자세*
8
+ - **Choisehyeon 양 단계 완성** (1단계 #9).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 — 3 인스턴스 변수 원칙 학생 자가 어려움
13
+
14
+ PR 본문:
15
+
16
+ > *"안녕하세요! 리뷰어님. **User 클래스에 베팅금액을 넣어버리면 프로퍼티가 3개가 되어서 그거에 대해 고민하느라 2단계 제출이 늦어졌습니다ㅠㅠ**"*
17
+
18
+ → **MCP 룰 `pr-body-three-instance-var-difficulty-vocabulary`** ⭐⭐ 신규 — *3 인스턴스 변수 원칙 학생 자가 어려움 명시*. PR #37 (`principle-as-guide-not-absolute` reviewer가 *원칙 = 가이드 / 절대 X* 권유) 결의 *학생 측 시간 손실* 다른 축.
19
+
20
+ ### 2. enum profitRate 칭찬 (Thread 4)
21
+
22
+ reviewer: *"승패 관련해서 수익률까지 enum에 잘 적용해주셨네요. 👍"*
23
+
24
+ → PR #97 (`enum-with-domain-value-as-elegant`) 결 합류 누적 2 PR.
25
+
26
+ ### 3. 딜러 최종 수익 테스트 칭찬 (Thread 5)
27
+
28
+ reviewer: *"딜러의 최종 수익을 반환하는 테스트 코드를 잘 작성해주셨네요. 👍"*
29
+
30
+ ## 못한 점 (설계 관점)
31
+
32
+ ### 1. 와일드카드 import 지양 + ktlint ref (Thread 1)
33
+
34
+ ```kotlin
35
+ import blackjack.domain.* // 와일드카드
36
+ ```
37
+
38
+ reviewer:
39
+
40
+ > *"코틀린에서는 와일드카드(*)를 사용하는 것을 지양합니다.*
41
+ > *ref. https://pinterest.github.io/ktlint/rules/standard/#no-wildcard-imports"*
42
+
43
+ → **MCP 룰 `kotlin-wildcard-import-avoid`** ⭐ 신규 — *Kotlin 와일드카드 import 지양 + ktlint 공식 컨벤션 ref*. PR #47 (`underscore-prefix-backing-property-only` Kotlin 공식 컨벤션 ref) 결 합류 누적 2 PR.
44
+
45
+ ### 2. null 보장 (Thread 2)
46
+
47
+ reviewer:
48
+
49
+ > *"input이 null이 전달될 경우에는 어떻게 동작하게 될까요? **input이 반드시 null이 아님을 보장할 수 있을까요?**"*
50
+
51
+ 학생 자가 답변: *"InputView에서 getOrElse를 사용하여 null을 반환하지 않도록 수정했습니다!"*
52
+
53
+ → **`null-guarantee-via-getorelse`** ⭐⭐ — *`getOrElse` = null 회피 어휘*. PR #154 (`toIntOrNull-vs-type-check`) 결 합류.
54
+
55
+ ### 3. 함수명 = 도메인 의도 일치 (Thread 3)
56
+
57
+ ```kotlin
58
+ // 변경 전 - 모호
59
+ fun isBlackJackSize(): Boolean = cards.size == 2
60
+ ```
61
+
62
+ reviewer:
63
+
64
+ > *"함수명만 봐서는, 카드의 크기가 2인 경우에는 블랙잭 사이즈라고 이해가 되는데요. **카드 크기가 2인데 블랙잭이 아닌 경우도 있지 않을까요?** 물론, 카드가 2장이고 그 합이 21일 경우를 의도하셨겠지만, 다른 개발자가 보았을 때 이 로직만 보면 오해를 할 수 있지 않을까요?"*
65
+
66
+ 학생 자가 답변: *"isSizeTwo()로 네이밍 수정했습니다!"*
67
+
68
+ → **함수명 의도 일치 누적 16+ PR** — *카드 2 ≠ 블랙잭 도메인 정확성*. PR #12·#15·#101 등 결.
69
+
70
+ ### 4. 프로그램 실행 단위 개행 (Thread 0)
71
+
72
+ reviewer: *"프로그램 실행 단위로 개행을 해주게 되면, 좀 더 코드를 읽기가 편해집니다."*
73
+
74
+ → PR #38·#54 (`blank-line-as-flow-boundary`) 결 누적 3 PR.
75
+
76
+ ### 5. 테스트 자세 — 딜러 패배 도메인 룰 (Thread 5)
77
+
78
+ reviewer:
79
+
80
+ > *"딜러인 경우에도 좀 더 자세하게 작성해보면 어떨까요? \"딜러가 패배하면 딜러는 모든 유저의 배팅금액만큼 잃는다\""*
81
+
82
+ → **테스트 명명 도메인 어휘** = 누적 다수.
83
+
84
+ ## 대표 인용
85
+
86
+ > [Choisehyeon PR 본문]
87
+ > *"User 클래스에 베팅금액을 넣어버리면 프로퍼티가 3개가 되어서 그거에 대해 고민하느라 2단계 제출이 늦어졌습니다ㅠㅠ"*
88
+
89
+ → **학생 자가 3 인스턴스 변수 원칙 어려움 어휘**.
90
+
91
+ > [BeokBeok Thread 3]
92
+ > *"카드의 크기가 2인 경우에는 블랙잭 사이즈라고 이해가 되는데요. 카드 크기가 2인데 블랙잭이 아닌 경우도 있지 않을까요?"*
93
+
94
+ → **함수명 = 도메인 정확성 어휘**.
95
+
96
+ ## 얻은 교훈 (보편)
97
+
98
+ 1. **3 인스턴스 변수 원칙 학생 자가 시간 손실** — **MCP 룰 `pr-body-three-instance-var-difficulty-vocabulary` 후보** ⭐⭐.
99
+ 2. **Kotlin 와일드카드 import 지양 + ktlint** — **MCP 룰 `kotlin-wildcard-import-avoid` 후보** ⭐.
100
+ 3. **`getOrElse` null 회피** — **MCP 룰 `null-guarantee-via-getorelse` 후보** ⭐⭐.
101
+ 4. **함수명 = 도메인 정확성 누적 16+ PR** = 강화.
102
+
103
+ ## 메타 노트
104
+
105
+ - **Choisehyeon 양 단계 완성 (1단계 #9 → 2단계 #52)**.
106
+ - **3 인스턴스 변수 원칙 어휘 누적** — PR #37·#52 — *학생 측 어려움 + reviewer *원칙 = 가이드 / 절대 X*. 단일 답 거부 어휘 누적 강화.
@@ -0,0 +1,282 @@
1
+ # PR #9 — [블랙잭 1단계] 로피 미션
2
+
3
+ - **Reviewee:** [@Choisehyeon](https://github.com/Choisehyeon)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/9
5
+ - **단계:** 1단계 (페어)
6
+ - **리뷰어:** @BeokBeok (벅벅)
7
+ - **라인 코멘트:** 23 스레드 — *학생 자가 확장 함수 vs 멤버 함수 장단점 자가 정리 + Builder 패턴 호출 순서 + 외부 글 첨부*
8
+ - **신규 reviewee** (2023년 3월 코호트). PR #16 (SeongHoonC) 와 동일 reviewer.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **확장 함수 vs 멤버 함수 장단점 학생 자가 매우 긴 답변** — 벅벅 메타 질문: *"winTo 함수를 확장함수 또는 멤버함수로 구현했을 때 각각 어떤 장단점이 있을지 고민해보면 어떨까요?"* + 학생 자가 답변:
13
+
14
+ > **확장함수 장점:** *"코드가 간결해져서 가독성이 높다. 기존 클래스를 수정하지 않고도 새로운 기능 추가 할 수 있다, 수신 객체를 지정하지 않고도 User 클래스에 멤버 프로퍼티나 메서드에 접근할 수 있다."*
15
+ >
16
+ > **확장함수 단점:** *"네임스페이스 오염이 발생할 수 있다. 확장 함수는 클래스 외부에서 정의되므로, 클래스 내부의 함수와 이름이 충돌할 수 있다. 클래스의 캡슐화가 위반될 수 있다."*
17
+ >
18
+ > **멤버함수 장점:** *"클래스의 캡슐화를 보호할 수 있다. 클래스 내부에서 수행되므로 코드를 읽는 사람이 이를 의도적으로 이해하기 쉽다."*
19
+ >
20
+ > **멤버함수 단점:** *"클래스의 구조와 밀접하게 연관된 작업만 수행할 수 있기 때문에, 클래스의 구조를 변경하지 않고 새로운 기능을 추가하기 어려울 수 있다."*
21
+
22
+ **Kotlin 어휘 학생 자가 4 분면 정리 모범** (장점 × 2 + 단점 × 2). PR #16 (SeongHoonC *abstract vs open*) / PR #91 (murjune *sealed vs abstract*) / PR #43 (chws0508 *interface 프로퍼티*) 결.
23
+
24
+ - **`map` + `getter` 활용 칭찬** — 벅벅: *"getter와 map을 활용해서 participants를 Outcome 객체로 잘 변환해주셨네요. 👍"* — Kotlin 함수형 어휘.
25
+ - **확장 함수 정공 칭찬** — 벅벅: *"winTo라는 확장함수를 잘 구현해주셨네요. 👍"* — *위 §장단점 토론 + 칭찬 양립*.
26
+ - **`ACE 포함 여부` 함수 칭찬** — 벅벅: *"ACE가 포함 여부를 조회하는 함수를 잘 구현해주셨네요."*
27
+
28
+ ## 못한 점 (설계 관점)
29
+
30
+ ### 1. `setBlackJack()` 함수명 — set 계열 함수 컨벤션 위반
31
+
32
+ 벅벅: *"함수명만 봤을 때에는 '블랙잭을 설정한다' 라는 의미로 이해가 되는데요. 하지만 흔히 set 계열의 함수는 무언가를 리턴하는 것으로 예상되기 보다는, 단순히 값을 설정할 것으로 예상이 됩니다. 함수명이 구현체가 하는 일을 잘 표현하도록 함수명을 개선해보면 어떨까요?"*
33
+
34
+ → **JavaBean 컨벤션 + Kotlin**:
35
+ - *`setX(value)`* = *값 설정 + Unit 반환* (관용).
36
+ - *`set 동사 + 명사`* + *리턴값 보유* = *컨벤션 위반*.
37
+ - 대안: *`createBlackJack()`*, *`buildBlackJack()`*, *`initializeBlackJack()`*.
38
+
39
+ **MCP 기존 룰 `vagueName` 변형** + *set 접두사 컨벤션 위반 검사*. PR #99·#26·#39·#46 결.
40
+
41
+ ### 2. `winTo` 함수 = 프로퍼티 X (상태 vs 행동)
42
+
43
+ 벅벅: *"프로퍼티는 상태를 나타내며, 함수는 행동을 나타냅니다. winTo 함수는 상태라기보다는 행동을 의미합니다. 프로퍼티는 상태만을 갖도록 코드를 개선해보면 어떨까요?"*
44
+
45
+ → **Kotlin 어휘 (프로퍼티 vs 함수)**:
46
+ - *프로퍼티* = *상태 (값) 표현*. 정적 의미.
47
+ - *함수* = *행동 (계산/변환) 표현*. 동적 의미.
48
+ - *`val winTo: ...` (프로퍼티)* < *`fun winTo(): ...` (함수)* — *행동은 함수 정공*.
49
+
50
+ PR #91 (murjune *프로퍼티 vs 함수 자가 인정*) 결.
51
+
52
+ ### 3. `BlackJack 확장 함수` 위치 — 외부 발견 가능성
53
+
54
+ 벅벅: *"BlackJack 클래스와 관련된 확장 함수를 작성해주셨네요. 👍 BlackJack 클래스 내의 멤버 함수로 구현하는 것과, 다른 클래스에서 BlackJack의 확장함수를 만드는 것은 각각 어떤 장점이 있을까요? 만약 다른 개발자가 guestsTurn 함수와 dealerTurn 함수가 BlackJackGame에 정의가 되어있을 것이라 예상할 수 있을까요?"*
55
+
56
+ → **확장 함수 vs 멤버 함수 발견 가능성**:
57
+ - *멤버 함수* = *클래스 내 즉시 가시 + 자동 완성*.
58
+ - *확장 함수* = *외부 클래스에 정의 + import 필요 + 발견 어려움*.
59
+ - *블랙잭 도메인 핵심 메서드 (guestsTurn, dealerTurn)* = *멤버 함수 정공*.
60
+
61
+ PR #11 (위 학생 자가 4 분면) 의 *확장 함수 단점 (네임스페이스 오염)* 와 동일 결.
62
+
63
+ ### 4. `CardDeck` 외부 shuffle → 생성 시 shuffle
64
+
65
+ 벅벅: *"외부에서 shuffle 함수를 호출해줘야할까요? CardDeck 객체를 생성할 때 shuffle 해서 전달해줘도 되지 않을까요?"*
66
+
67
+ → **객체 invariant + 생성 시 보장**. PR #16 (SeongHoonC *init 블록 자가 적용*) / PR #77 (murjune *Deck shuffle 생성 시 1회*) 결.
68
+
69
+ ### 5. `Cards.toList()` 외부 호출 — 학생 자가 정당화
70
+
71
+ 벅벅: *"toList라는 함수를 외부에서 호출해줘야할까요? 외부에서 cards 변수에 접근해서 값을 조회하도록 개선해보면 어떨까요?"*
72
+
73
+ 학생 자가 정당화: *"캡슐화를 위해 toList 함수를 사용해서 호출해줬는데 직접 접근하게 된다면 Card.card.toList()과 같이 될 것 같아서 캡슐화를 하기 위해 위 방식으로 진행했습니다!"*
74
+
75
+ 벅벅 별도 (suggestion):
76
+
77
+ ```kotlin
78
+ class Cards(val cards: Set<Card> = setOf()) {
79
+ ```
80
+
81
+ *"대체로 Immutable한 컬렉션 타입이라면, 외부에 오픈이 되더라도 변경할 수 없습니다. private 접근자를 제거한다면, 불필요한 toList 함수를 만들지 않아도 됩니다."*
82
+
83
+ → **2 가지 학습**:
84
+
85
+ #### 5.1. *Immutable 컬렉션 vs Mutable 컬렉션 외부 노출*
86
+
87
+ - *`MutableList<Card>` 외부 노출* = *외부 변경 위험* → *방어적 복사 / `toList()` 필요*.
88
+ - *`List<Card>` (Immutable interface)* = *외부에서 변경 불가* → *`toList()` 불필요*.
89
+ - **단, `MutableList` 가 백킹 객체인 경우 `List` 인터페이스로 캐스팅해도 외부에서 `as MutableList` 가능** — PR #16 (SeongHoonC *LSP 자가 학습*) 결.
90
+
91
+ #### 5.2. *학생 자가 정당화 (캡슐화 의도)*
92
+
93
+ 학생이 *`toList()` 가 캡슐화를 위한 것* 자가 명시. *그러나 Set<Card> immutable 이라면 노출해도 무해* — *학생 자가 학습 갭*.
94
+
95
+ PR #74 (송핑크 *불변 객체 자가 학습*) / PR #46 (krrong *backing property*) 결.
96
+
97
+ ### 6. `OutputView` enum 출력 — 학생 자가 정당화 (View 영역)
98
+
99
+ 벅벅: *"지금과 같은 구조에서는 enum이 변경될 때마다 이 코드들도 변경을 해줘야합니다. enum만 변경해도 이 코드들이 영향을 미치지 않도록 코드를 개선해보면 어떨까요?"*
100
+
101
+ 학생 자가 정당화: *"저는 이부분이 출력에 관한 부분이라고 생각해서 enum에서 값을 넣어주는 것이 뷰의 역할을 가지고 있다는 생각이 들어서 위와 같이 진행했습니다!"*
102
+
103
+ → **enum 출력 위치 양가성**:
104
+ - *학생 시점*: *View 가 enum → 문자열 변환 = View 영역*.
105
+ - *벅벅 시점*: *enum 추가 시 View 코드 변경 강제 = 변경 파급*.
106
+
107
+ 대안:
108
+ - (A) **enum.label / enum.displayName** — *enum 이 출력 문자열 보유*. **MCP 기존 룰 `enum-with-ui-value`** — *벅벅이 *enum 영역 누수* 진단하는 학생 자가 결정*.
109
+ - (B) **View 가 enum-to-string Map** — *enum 추가 시 Map 추가 = 한 곳 변경*.
110
+ - (C) **별도 mapper 객체** — *View ↔ enum 사이 변환 응집*.
111
+
112
+ PR #28·#78·#112·#125·#147·#23·#26·#16·#77 의 *enum-with-ui-value* 결의 *반대 시점* — *View 가 enum 변환 책임 보유 학생 자가 결정*.
113
+
114
+ ### 7. `User` 3 변수 제약 (요구사항)
115
+
116
+ 벅벅: *"프로그램 요구사항에는 아래와 같은 항목이 있습니다. - 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 위 요구사항을 적용해보면 어떨까요?"*
117
+
118
+ → **요구사항 인용 (벅벅 패턴)**. PR #16 (SeongHoonC) 결.
119
+
120
+ ### 8. `Builder 패턴 호출 순서 + 지연 초기화`
121
+
122
+ 벅벅: *"Builder 패턴은 호출 순서와 상관 없이, build 함수를 호출하는 순간 객체가 정상적으로 만들어져야 합니다. 하지만, 아래와 같은 코드를 작성하게 되면 어떻게 될까요?"*
123
+
124
+ ```kotlin
125
+ val blackjack = BlackJackBuilder().build()
126
+ blackjack.participants
127
+ ```
128
+
129
+ *"이를 해결하기 위해서는 어떻게 하면 좋을지 고민해보면 어떨까요? Builder 패턴의 장단점 및 지연초기화의 장단점에 대해서 학습해보면 좋을 것 같아요."*
130
+
131
+ → **3 가지 학습**:
132
+
133
+ #### 8.1. *Builder 패턴 = 호출 순서 무관 + build() 시점 완성*
134
+
135
+ - *학생 코드*: *`cardDeck()` 호출 후 `draw()` 호출* 필요 — *호출 순서 의존*.
136
+ - *Builder 정공*: *내부 default 값 / required 인자 강제* + *build() 시점 invariant 검증*.
137
+
138
+ #### 8.2. *지연 초기화 (`by lazy` / `lateinit var`)*
139
+
140
+ - *`by lazy`* = *최초 접근 시 초기화 + 이후 캐싱*.
141
+ - *`lateinit var`* = *향후 초기화 강제 + 접근 전 초기화 필수*.
142
+
143
+ #### 8.3. *cardDeck 미호출 + draw 호출 시 NullPointerException*
144
+
145
+ 벅벅 별도: *"cardDeck 함수가 호출되지 않은 상태에서 draw 함수가 호출되면 어떤 일이 발생할까요? 이를 예방하려면 어떻게 개선하면 좋을지 고민해보면 어떨까요?"*
146
+
147
+ PR #16 (SeongHoonC *init 블록 invariant*) 결.
148
+
149
+ ### 9. `introduce` + `companion init` 중복
150
+
151
+ 벅벅: *"introduce 함수와 BlackJackBuilder 클래스의 companion object의 init 함수의 구현체가 동일하네요. 그렇다면 중복되는 코드를 줄여보면 어떨까요?"*
152
+
153
+ → **DRY (Don't Repeat Yourself)** + *중복 코드 = 변경 시 N 곳 모두 수정*.
154
+
155
+ ### 10. `when exhaustive` (Kotlin 1.6+) — 외부 글
156
+
157
+ 벅벅: *"만약 CardValue의 값이 추가가 된다면, 별도로 신경을 쓰지 않는 이상 else 문으로 동작하게 되면서 예상치 못한 오류가 발생할 수 있습니다. when을 exhaustive하게 작성해보면 어떨까요?"* + [Kotlin 공식 문서 - exhaustive when](https://kotlinlang.org/docs/whatsnew16.html#stable-exhaustive-when-statements-for-enum-sealed-and-boolean-subjects).
158
+
159
+ → **Kotlin 1.6+ exhaustive when** — *enum 추가 시 컴파일 에러 강제*. PR #91 (murjune *sealed + when exhaustive 자가 학습*) / PR #137·#148·#90·#146 결.
160
+
161
+ ### 11. `when (binary)` vs `if` — 외부 글
162
+
163
+ 벅벅: *"binary condition인 경우에는 when 보다는 if문 사용을 권장해요. ref. https://kotlinlang.org/docs/coding-conventions.html#if-versus-when"*
164
+
165
+ → **Kotlin 코딩 컨벤션**:
166
+ - *2 분기 = if 정공 (단순)*.
167
+ - *3 분기 이상 = when 정공 (가독성)*.
168
+
169
+ PR #26 (잭슨) / PR #16 (벅벅) / PR #43 (chws0508 자가 학습) 의 *동일 외부 글*.
170
+
171
+ ### 12. `forEach` vs `map` (변환 X)
172
+
173
+ 벅벅 suggestion: `participants.all().forEach { ... }` *"무언가를 변환하는 것이 아니라면 forEach를 활용해보면 어떨까요?"*
174
+
175
+ → **Kotlin 컬렉션 함수형 어휘**:
176
+ - *`map`* = *값 변환* (`List<A>` → `List<B>`).
177
+ - *`forEach`* = *부수 효과* (Unit 반환).
178
+
179
+ PR #26 (잭슨 *forEach → map/groupingBy* — 반대 권고 — *map 활용*) 결의 *반대 시점*.
180
+
181
+ ### 13. `경계값 테스트 (20 vs 21)`
182
+
183
+ 벅벅: *"20자가 넘을 경우에 예외처리가 발생하는 것으로 이해하고 있습니다. 테스트 코드에서는 가급적이면 경계값을 위주로 테스트를 하는 것이 좋습니다. 여기에서는 이름을 21자에 대해서 테스트를 하는 것으로 개선하는 것을 권장합니다."*
184
+
185
+ → **경계값 테스트 (Boundary Value Analysis)** — *N + 1 검증*. 가장 흔한 버그 위치.
186
+
187
+ ### 14. `Cards.ACE 책임 = CardValue 메시지`
188
+
189
+ 벅벅: *"ACE가 포함 여부를 조회하는 함수를 잘 구현해주셨네요. 다만, Cards 클래스가 CardValue 객체에 대해서 너무 잘 알고 있어요. ACE를 관리하는 주체가 어디인지 고민해보시고, ACE를 관리하는 곳에 메시지를 보내서 ACE가 포함되어있는지 확인하도록 코드를 개선해보면 어떨까요?"*
190
+
191
+ → **Tell-Don't-Ask + 책임 위치**:
192
+ - *`Cards.contains(CardValue.ACE)` = Cards 가 CardValue 분기 알기*.
193
+ - *`Card.isAce()` = Card 가 자기 책임* → *`Cards.any { it.isAce() }`* 정공.
194
+
195
+ PR #43·#74·#98·#137·#148 의 *Tell-Don't-Ask* 결.
196
+
197
+ ### 15. `= 표현식 함수` vs `{} 블록` Kotlin 어휘
198
+
199
+ 벅벅 suggestion: `fun initDraw() { ... }` *"`=` 을 사용하게 되면, 흔히 코드만 봤을 때 마치 리턴값이 있는 것처럼 보여요. 리턴타입이 없는 경우에는 `=` 보다는 중괄호를 사용해보면 어떨까요?"*
200
+
201
+ → **Kotlin 어휘**:
202
+ - *`fun f(): Int = expr`* = *단일 표현식 + 리턴값*.
203
+ - *`fun f() { stmt }`* = *블록 + Unit (보통 리턴 X)*.
204
+ - *학생 코드 `fun f() = forEach { ... }`* = *Unit 반환 + `=` 사용 = 가독성 ↓*.
205
+
206
+ ### 16. `세팅이 된다` 테스트 함수명 모호
207
+
208
+ 벅벅: *"'세팅이 된다' 라는 것은 어떤 것을 의미할까요? 다른 개발자가 보았을 때에도 어떤 것을 의미하는지 알 수 있도록 함수명을 작성해보면 어떨까요?"*
209
+
210
+ → **테스트 명세서 어휘** — PR #26·#46·#99 결.
211
+
212
+ ### 17. `결과` 함수명 vs `Outcome` 리턴 타입 불일치
213
+
214
+ 벅벅: *"함수명만 봤을 때에는 '게임 결과'라는 의미로 해석돼요. 하지만 리턴타입은 Outcome이네요. 함수명만 봤을 때 리턴타입이 Outcome임을 알 수 있도록 개선해보면 어떨까요?"*
215
+
216
+ → **함수명 = 리턴 타입 추론 가능 권유**. *`fun getResult(): Outcome` < `fun toOutcome(): Outcome`*. PR #99·#39 (vagueName) 결.
217
+
218
+ ### 18. `->` 같은 라인 (Kotlin 컨벤션)
219
+
220
+ 벅벅 suggestion: `CardValue.TEN -> this.value.toString()` *"사소하지만, `->` 는 같은 라인에 작성하는 것을 권장합니다."*
221
+
222
+ → **Kotlin 코딩 컨벤션 (ktlint)**. PR #77 (KwonDae *ktlint 확인*) 결.
223
+
224
+ ### 19. `인덴트 depth ≤ 2` (요구사항)
225
+
226
+ 벅벅: *"아래 프로그래밍 요구사항을 적용해보면 어떨까요? - indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다."*
227
+
228
+ → **요구사항 인용 (벅벅 패턴)** + **객체지향 생활 체조 원칙**.
229
+
230
+ ## 리뷰어 의견 요지 (벅벅 / BeokBeok)
231
+
232
+ 23 코멘트 특징 (PR #16 와 동일 reviewer):
233
+
234
+ - **요구사항 인용** — *"프로그래밍 요구사항에는 아래와 같은 항목이 있습니다"* (3 회). PR #16 결.
235
+ - **외부 글 첨부** — *Kotlin 공식 문서 (exhaustive when + if vs when)* — PR #16·#26·#23·#95·#67·#46·#77 결.
236
+ - **suggestion 블록 활용** — `Cards(val cards: Set<Card>)`, `participants.all().forEach`, `fun initDraw() {}`, `-> ...` 4회. PR #26·#39·#43·#77 결.
237
+ - **메타 질문 + 학생 자가 답변 유도** — *"확장함수 또는 멤버함수로 구현했을 때 각각 어떤 장단점이 있을지"* (학생 4 분면 답변 유도) / *"shuffle 함수를 호출해줘야할까요?"* / *"toList라는 함수를 외부에서 호출해줘야할까요?"*.
238
+ - **학생 자가 정당화 인정 + 권고 유지** — `toList` 캡슐화 자가 정당화 + `enum` 출력 위치 자가 정당화. *학생 결정 존중 + 추가 권고*. PR #91·#43·#46 결.
239
+
240
+ ## 대표 인용
241
+
242
+ > **확장함수 장점:** *"코드가 간결해져서 가독성이 높다. 기존 클래스를 수정하지 않고도 새로운 기능 추가 할 수 있다."* / **확장함수 단점:** *"네임스페이스 오염이 발생할 수 있다. 클래스의 캡슐화가 위반될 수 있다."* / **멤버함수 장점:** *"클래스의 캡슐화를 보호할 수 있다."* / **멤버함수 단점:** *"클래스의 구조와 밀접하게 연관된 작업만 수행할 수 있기 때문에, 클래스의 구조를 변경하지 않고 새로운 기능을 추가하기 어려울 수 있다."* — Choisehyeon (Kotlin 어휘 4 분면 자가 정리)
243
+
244
+ > *"BlackJack 클래스 내의 멤버 함수로 구현하는 것과, 다른 클래스에서 BlackJack의 확장함수를 만드는 것은 각각 어떤 장점이 있을까요? 만약 다른 개발자가 guestsTurn 함수와 dealerTurn 함수가 BlackJackGame에 정의가 되어있을 것이라 예상할 수 있을까요?"* — BeokBeok (확장 함수 발견 가능성 메타 질문)
245
+
246
+ > *"Builder 패턴은 호출 순서와 상관 없이, build 함수를 호출하는 순간 객체가 정상적으로 만들어져야 합니다."* — BeokBeok (Builder 패턴 정의 어휘)
247
+
248
+ > *"캡슐화를 위해 toList 함수를 사용해서 호출해줬는데 직접 접근하게 된다면 Card.card.toList()과 같이 될 것 같아서 캡슐화를 하기 위해 위 방식으로 진행했습니다!"* — Choisehyeon (학생 자가 캡슐화 정당화)
249
+
250
+ > *"저는 이부분이 출력에 관한 부분이라고 생각해서 enum에서 값을 넣어주는 것이 뷰의 역할을 가지고 있다는 생각이 들어서 위와 같이 진행했습니다!"* — Choisehyeon (enum 출력 위치 학생 자가 정당화)
251
+
252
+ ## 얻은 교훈
253
+
254
+ 1. **`확장 함수 vs 멤버 함수` 학생 자가 4 분면 정리** — *장단점 × 2 명시*. **Kotlin 어휘 자가 학습 모범**. PR #16·#43·#91·#74 결의 *학생 자가 학습 풍부 시리즈*.
255
+
256
+ 2. **`확장 함수 발견 가능성` = 외부 위치 + import 필요 = 도메인 핵심 메서드 부적합** — *멤버 함수 = 즉시 가시* / *확장 함수 = 외부 유틸*. **MCP 룰 후보 `extension-function-domain-misuse`**.
257
+
258
+ 3. **`Builder 패턴 호출 순서 + 지연 초기화`** — *호출 순서 의존 = Builder 정공 X*. *build() 시점 invariant 검증 + 지연 초기화 (`by lazy`)*. **MCP 룰 후보 `builder-call-order-dependency`**.
259
+
260
+ 4. **`set 접두사 함수명 + 리턴값 보유` 컨벤션 위반** — *`set 동사` = JavaBean = Unit 반환 관용*. PR #99·#26·#39·#46 의 *vagueName* 결.
261
+
262
+ 5. **`프로퍼티 vs 함수` = 상태 vs 행동** — *`val 이름`* = *상태* / *`fun 이름()` = *행동**. PR #91 (murjune *프로퍼티 vs 함수*) 결.
263
+
264
+ 6. **`Immutable 컬렉션 vs Mutable` 외부 노출** — *`Set<Card>` immutable = 외부 노출 OK + `toList()` 불필요*. PR #16 (SeongHoonC *LSP*) / PR #46 (krrong *backing property*) 결.
265
+
266
+ 7. **`enum 출력 위치 양가성`** — *학생: View 가 enum→string 변환 = View 영역* vs *reviewer: enum 추가 시 View 변경 강제 = enum 영역 누수*. **MCP 기존 룰 `enum-with-ui-value` 반대 시점**.
267
+
268
+ 8. **`when exhaustive` Kotlin 1.6+** — *enum/sealed/Boolean exhaustive 보장 + else 불필요*. PR #91 (murjune *sealed + when exhaustive*) 결.
269
+
270
+ 9. **`when (binary) vs if` Kotlin 컨벤션** — *2 분기 = if / 3 분기 = when*. PR #26·#16·#43 의 *동일 외부 글*.
271
+
272
+ 10. **`경계값 테스트` (Boundary Value Analysis)** — *N + 1 검증* = *예외 처리 가장 흔한 버그 위치*.
273
+
274
+ 11. **`= 표현식 함수` vs `{} 블록` Kotlin 어휘** — *Unit 반환 = 블록 / 리턴값 = 표현식*. PR #43·#39 의 *Kotlin 어휘 학습* 결.
275
+
276
+ 12. **`함수명 = 리턴 타입 추론 가능 권유`** — *`fun result()` < `fun toOutcome()`* — *명명 일관성*. PR #99·#39 결.
277
+
278
+ 13. **`인덴트 depth ≤ 2` 요구사항** — *객체지향 생활 체조 원칙*. PR #16·#23·#26 결의 *2023년 3월 코호트 요구사항 인용 패턴*.
279
+
280
+ 14. **`Tell-Don't-Ask + Card.isAce()` 책임 위치** — *Cards 가 CardValue 분기 알기 < Card 가 자기 책임*. PR #43·#74·#98·#137·#148 결.
281
+
282
+ 15. **`벅벅 reviewer 패턴`** — *요구사항 인용 + Kotlin 공식 문서 + suggestion 블록 + 메타 질문* — PR #16 와 *동일한 패턴*. **2023년 3월 코호트 reviewer 3인 중 가장 *외부 자료 + 컨벤션* 어휘 강도 높음**.
@@ -0,0 +1,182 @@
1
+ # PR #14 — [블랙잭 1단계] 코건 미션
2
+
3
+ - **Reviewee:** [@DYGames](https://github.com/DYGames)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/14
5
+ - **단계:** 1단계
6
+ - **리뷰어:** @galcyurio
7
+ - **라인 코멘트:** 16 스레드 — *PR 본문 자가 의문 (뷰-모델 상호작용 + 람다 깊이) + ManualCardFactory Map suggestion + ordinal 지양*
8
+ - **신규 reviewee** (2023년 3월 코호트). PR #22·#48 와 동일 reviewer.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **PR 본문 자가 의문 (뷰-모델 람다 깊이)** — *"질문드릴 점이 있는데, 게임에서 모든 플레이어들에게 한장의 카드를 더 받는지 결정하는 로직이 있습니다. 이때 뷰와 모델의 로직이 복잡하게 상호작용하는데, 이를 저는 람다를 이용해서 해결하였는데 여전히 복잡하고 코드 깊이가 깊어집니다. 어떻게 생각하고 구현하면 좀 더 깔끔하고 분리된 코드를 작성할 수 있을지 궁금합니다."* — **PR 본문 자가 의문 모범**. PR #76·#82·#107·#46·#91·#11·#13·#80·#106 결.
13
+ - **방어적 복사 칭찬** — galcyurio: *"방어적 복사 :+1:"*. PR #74·#108·#133·#46·#23 결.
14
+ - **UI layer 도메인 의존 칭찬** — galcyurio: *"ui layer에서 domain layer를 의존하여 데이터를 받아서 렌더링하도록 잘 구현해주셨네요 :+1:"*. PR #22 (galcyurio *UI→Domain OK*) 결.
15
+ - **불필요 정보 분리 자가 적용** — galcyurio: *"불필요한 정보를 잘 분리해주셨습니다 👍"* + 학생 자가 함수 분리. PR #22 결.
16
+
17
+ ## 못한 점 (설계 관점)
18
+
19
+ ### 1. `y/n CLI 환경 의존 → Boolean (GUI 가정)`
20
+
21
+ galcyurio: *"`y`, `n`은 CLI 환경에서만 실행될 것이라는 전제가 깔려있으며, 또한 외부에서는 Boolean으로 사용되고 있습니다. Boolean으로 사용하는게 오히려 가독성도 좋고 더 유연해집니다. 이 프로그램을 그대로 GUI 환경에서도 쓴다고 생각하고 만들어보세요."*
22
+
23
+ 학생: *"View 단에서 Boolean으로 검증, 변환해주었습니다."*
24
+
25
+ → **CLI vs GUI 가정 메타 어휘**:
26
+ - *`y`/`n` 도메인 = CLI 한정*.
27
+ - *Boolean = 도메인 추상화 + GUI 전환 가능*.
28
+
29
+ **MCP 룰 후보 `cli-vs-gui-assumption-test`**. PR #137 (HamBeomJoon *Multi-platform 함정*) / PR #41·#151·#80·#82·#100 결.
30
+
31
+ ### 2. `if/when 중괄호` 공식 컨벤션
32
+
33
+ galcyurio: *"[공식 컨벤션](https://kotlinlang.org/docs/coding-conventions.html#control-flow-statements)에 따르면 if문과 when문은 2줄 이상이면 중괄호를 사용합니다."*
34
+
35
+ → **Kotlin 공식 컨벤션**. PR #82·#9·#16·#26 결.
36
+
37
+ ### 3. `ManualCardFactory` 테스트 전용 + Map 받기
38
+
39
+ galcyurio: *"ManualCardFactory는 테스트를 위한 Fake 구현체이기 때문에 이를 위한 테스트 케이스는 작성되어선 안됩니다. 추가로 ManualCardFactory는 현재 테스트 케이스를 제외하고는 그 어떤 테스트 케이스에서도 쓰이지 않고 있네요. CardFactory를 의존하고 있는 BlackjackStage에 대한 테스트 케이스를 작성하다보면 필요해질 겁니다."*
40
+
41
+ galcyurio (Map suggestion):
42
+
43
+ ```kotlin
44
+ // AS-IS
45
+ val cardFactory = ManualCardFactory(
46
+ listOf(CardType.CLUB, CardType.SPADE), listOf(CardNumber.THREE, CardNumber.QUEEN)
47
+ )
48
+
49
+ // TO-BE
50
+ val cardFactory = ManualCardFactory(mapOf(
51
+ CardType.CLUB to CardNumber.THREE,
52
+ ...
53
+ ))
54
+ ```
55
+
56
+ galcyurio 자가 *착각 사과*: *"제가 착각하고 잘못 말씀드렸네요 🙏🙇 이 구현체는 테스트를 위한 구현체니까 단순히 원하는대로 반환을 시키면 됩니다. 테스트 가독성을 위해 List로 받는 대신 Map을 받도록 처리해보면 어떨까요?"*
57
+
58
+ → **3 가지 학습**:
59
+
60
+ #### 3.1. *Test Fake 구현체 = 자체 테스트 X*
61
+
62
+ - *Fake = 테스트용 도구 = 의존하는 코드 테스트할 때 사용*.
63
+ - *Fake 자체 테스트 = 무의미*.
64
+
65
+ **MCP 룰 후보 `test-fake-self-test-anti-pattern`**. PR #145 (junseo511 *unaryMinus 무의미 테스트*) / PR #99·#91 결.
66
+
67
+ #### 3.2. *List<A> + List<B> vs Map<A,B>* — 데이터 구조 변경
68
+
69
+ *두 리스트의 i 번째 페어* < *Map 의 명시적 페어*.
70
+
71
+ #### 3.3. *reviewer 자가 *착각* 사과*
72
+
73
+ PR #91·#77·#46·#16·#95·#137·#107·#145·#48 결.
74
+
75
+ ### 4. `it/it2` 변수명 — 명시적 명명
76
+
77
+ galcyurio: *"`it`, `it2` 대신 알맞은 이름을 명시해보세요."*
78
+
79
+ 학생: *"각각 cardType, cardNumber로 변경하였습니다."*
80
+
81
+ → **중첩 람다 명시 명명**. PR #13·#107·#145 결.
82
+
83
+ ### 5. `when expression vs if expression`
84
+
85
+ galcyurio: *"when expression을 활용하여 `''`와 같은 불필요한 반환을 없애보세요. 변환 후에 CardType이나 CardNumber를 추가해보고 if expression과 when expression 2개 방식에 어떤 차이점이 있는지도 정리해보면 좋겠어요."*
86
+
87
+ 학생: *"enum 클래스에서 when expression을 사용할 때는, else 브랜치를 사용하지 않을때 enum의 모든 항목에 대해 브랜치를 관리하도록 강제하는 차이가 있다고 정리했습니다."*
88
+
89
+ → **MCP 기존 룰 `sealed-class-when-exhaustive`** (enum 변형) — *when exhaustive + else 강제*. PR #91·#9·#26·#43·#16·#76 결.
90
+
91
+ ### 6. `테스트 static import 컨벤션`
92
+
93
+ galcyurio: *"프로덕션 코드에서는 static import를 하지 않는게 컨벤션이지만 테스트 코드에서는 static import를 하는게 컨벤션입니다."*
94
+
95
+ ```kotlin
96
+ assertThat(isDistributable).isTrue
97
+ ```
98
+
99
+ → **테스트 코드 컨벤션 = 프로덕션과 다름**. **MCP 룰 후보 `test-static-import-convention`**.
100
+
101
+ ### 7. `테스트 가독성 = 불필요 정보 분리`
102
+
103
+ galcyurio: *"테스트 본문에는 테스트하고자 하는 것을 이해할 수 있는 정보를 모두 가지고 있어야 하고, 반대로 불필요한 내용을 전부 감추어야 합니다."* + [Google Testing Blog](https://testing.googleblog.com/2014/03/testing-on-toilet-what-makes-good-test.html) + *"이 테스트 케이스에서 중요한 건 숫자의 합입니다. 그 이외에 `CardType.HEART`와 같은 코드는 보이지 않도록 만들어보세요."*
104
+
105
+ 학생: *"Int를 입력받아 같은 수를 가지는 Cards를 생성하는 함수를 분리하여 테스트 코드의 가독성을 높였습니다."*
106
+
107
+ galcyurio 별도: *"테스트 코드에서는 가독성이 중요합니다. 적절한 개행을 통해 CardNumber.TEN, CardNumber.TEN, CardNumber.TWO가 잘 보이도록 하거나 불필요한 코드를 테스트 본문 밖으로 분리해보세요."*
108
+
109
+ → **PR #22 (galcyurio *Google Testing Blog*) 와 같은 결**. *동일 reviewer 동일 어휘 강화*. PR #22 결.
110
+
111
+ ### 8. `when actual vs then expected` 위치
112
+
113
+ galcyurio: *"when절에 실제값(actual)이 위치해야하고 then절에 기댓값(expected)가 위치해야 합니다."*
114
+
115
+ → **GWT 패턴 표준**. PR #99·#46·#107·#145·#9 결.
116
+
117
+ ### 9. `뷰-모델 람다 깊이` PR 본문 자가 의문
118
+
119
+ galcyurio: *"특정 시점에 View의 함수를 호출해야 한다는 점 때문에 이런 코드가 생긴 것으로 보이네요. domain layer로 ui layer의 고차 함수를 넘겨서 처리하겠다는 방법은 좋습니다 :+1: 여러 가지를 한꺼번에 처리하다보니 복잡해진 것 같은데 작은 문제 여러개로 나누어서 처리해보세요. - 고차함수 하나에서 너무 많은 작..."*
120
+
121
+ 학생: *"도메인 로직은 최대한 도메인 안으로 이동하고, 고차 함수 전달과 반환을 적절히 활용하여 수정하였습니다."*
122
+
123
+ → **고차 함수 + 작은 문제 분해**. PR #145·#107·#82·#100·#80·#48 결.
124
+
125
+ ### 10. `BlackjackStageTest` 테스트 케이스명 명확화
126
+
127
+ galcyurio: *"BlackjackStageTest의 테스트 케이스 이름들도 조금 더 명확하게 작성해보면 좋겠어요!"*
128
+
129
+ → **테스트 = 명세서 어휘**. PR #22·#26·#46·#99·#107·#145·#9 결.
130
+
131
+ ### 11. `ordinal 사용 지양`
132
+
133
+ galcyurio: *"ordinal 사용은 지양해주세요. 사용하더라도 enum 간의 순서가 바뀌었을 때 문제없어야 합니다."*
134
+
135
+ → **ordinal 의존 = 순서 변경 시 깨짐**. **MCP 룰 후보 `enum-ordinal-dependency`** (기존 룰 후보 강화). PR #137 (HamBeomJoon *enum-ordinal-dependency*) 결.
136
+
137
+ ### 12. `테스트 함수 위치`
138
+
139
+ galcyurio: *"별개로 테스트 클래스에서 중요한 부분은 테스트 본문이므로 해당 함수들은 테스트 함수들 아래쪽에 작성해주시는게 좋습니다. :)"*
140
+
141
+ → **테스트 파일 구조**. PR #22·#145 결.
142
+
143
+ ## 리뷰어 의견 요지 (galcyurio)
144
+
145
+ 16 코멘트 특징 (PR #22·#48 와 동일 reviewer):
146
+
147
+ - **공식 컨벤션 외부 자료** — *Kotlin coding-conventions, Google Testing Blog* — PR #22·#48 결.
148
+ - **suggestion 블록 활용** — Map 자료구조 + `assertThat ... isTrue` 코드.
149
+ - **`:+1:`, `🙏`, `🙇` 친밀한 어조** — PR #22·#48 일관.
150
+ - **자가 *착각* 사과** — PR #91·#77·#46·#16·#95·#137·#107·#145·#48 결.
151
+
152
+ ## 대표 인용
153
+
154
+ > *"`y`, `n`은 CLI 환경에서만 실행될 것이라는 전제가 깔려있으며 (...) 이 프로그램을 그대로 GUI 환경에서도 쓴다고 생각하고 만들어보세요."* — galcyurio (CLI vs GUI 가정 메타)
155
+
156
+ > *"ManualCardFactory는 테스트를 위한 Fake 구현체이기 때문에 이를 위한 테스트 케이스는 작성되어선 안됩니다."* — galcyurio (Test Fake 자체 테스트 안티패턴)
157
+
158
+ > *"enum 클래스에서 when expression을 사용할 때는, else 브랜치를 사용하지 않을때 enum의 모든 항목에 대해 브랜치를 관리하도록 강제하는 차이가 있다고 정리했습니다."* — DYGames (Kotlin when exhaustive 자가 학습)
159
+
160
+ > *"제가 착각하고 잘못 말씀드렸네요 🙏🙇"* — galcyurio (reviewer 자가 *착각* 사과)
161
+
162
+ ## 얻은 교훈
163
+
164
+ 1. **`CLI vs GUI 가정 메타`** — *`y`/`n` 도메인 = CLI 한정 / Boolean 추상화 = GUI 전환 가능*. **MCP 룰 후보 `cli-vs-gui-assumption-test`**. PR #137·#41·#151·#80·#82·#100 결.
165
+
166
+ 2. **`Test Fake 구현체 자체 테스트 X`** — *Fake = 의존 코드 테스트 도구 / Fake 자체 테스트 = 무의미*. **MCP 룰 후보 `test-fake-self-test-anti-pattern`**. PR #145·#99·#91 결.
167
+
168
+ 3. **`테스트 static import 컨벤션`** — *프로덕션과 다름*. **MCP 룰 후보 `test-static-import-convention`**.
169
+
170
+ 4. **`ordinal 의존 = 순서 변경 시 깨짐`** = 기존 룰 후보 강화. PR #137 결.
171
+
172
+ 5. **`when expression exhaustive`** Kotlin 어휘. PR #91·#9·#26·#43·#16·#76 결.
173
+
174
+ 6. **`when actual / then expected` GWT 위치 규칙**. PR #99·#46·#107·#145·#9 결.
175
+
176
+ 7. **`테스트 가독성 = 불필요 정보 분리`** (Google Testing Blog). PR #22 결의 *동일 reviewer 동일 어휘*.
177
+
178
+ 8. **`고차 함수 + 작은 문제 분해`** — *복잡 람다 = 분해*. PR #145·#107·#82·#100·#80·#48 결.
179
+
180
+ 9. **`if/when 중괄호` 공식 컨벤션**. PR #82·#9·#16·#26 결.
181
+
182
+ 10. **`Map<A,B> vs List<A> + List<B>`** = 데이터 구조 = 가독성.