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,397 @@
1
+ # PR #118 — [블랙잭 1단계] 조이 미션
2
+
3
+ - **Reviewee:** [@gahyunkim](https://github.com/gahyunkim)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/118
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@malibinYun](https://github.com/malibinYun) (말리빈) — 2025 코호트 신규 reviewer 등장 (말리빈 = 2024 PR 들 reviewer = krrong (PR #32) 의 reviewer 였음; 2024 → 2025 reviewer 활동 유지)
7
+ - **라인 코멘트:** 18 스레드 — *PR 본문 자가 한계 인정 + 시간 부족 + 페어 학습 + 모든 18 스레드 학생 자가 답변 + commit SHA + Ace 1 vs 11 기본 학생 자가 의견 vs reviewer 수학적 비교 어휘 (4*11-3*10 vs 4*1+10) + Flyweight 패턴 학생 자가 학습 + `cards.allCards.clear()` 코드 예시 시나리오 + 「객체지향의 사실과 오해」 학생 자가 인용 + MVC 패턴 매몰 vs 객체 이름 집중 reviewer 메타 어휘 + data class copy 비활성화 (Kotlin 2.0) 학생 자가 학습 + 카드 부족 시 새 덱 vs 게임 종료 (카지노 메타포)*
8
+ - **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, 누적 9 PR + #118 = **2025 코호트 10 PR 코퍼스 정점**).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 한계 인정 + *많이 혼내주세요* 어휘
13
+
14
+ PR 본문:
15
+
16
+ > *"안녕하세요 말리빈! 이번 블랙잭 미션을 리뷰 받게 된 조이입니다. 블랙잭 미션을 진행하다보니 시간이 부족해 좀 더 꼼꼼히 확인하지 못한 부분들이 많은 것 같습니다.. 리팩토링을 하면서 조금 더 좋은 코드를 만들기 위해 노력해보겠습니다! 많이 많이 혼내주세요!"*
17
+
18
+ → **학생 자가 시간 부족 인정 + 적극 학습 어휘 (*많이 혼내주세요*)** = PR #130·#139·#143 (학생 자가 한계 인정) 결 합류.
19
+
20
+ ### 2. 말리빈 (2024 reviewer) → 2025 reviewer 활동 유지 메타 케이스
21
+
22
+ 말리빈 (`@malibinYun`) = 2024년 PR 들 (PR #32 krrong 등) 의 reviewer + 2025년 PR #118 의 reviewer.
23
+
24
+ → **reviewer 의 다년 활동 = 학생/reviewer 진화 메타 케이스 변형** — 학생 → reviewer 진화 (krrong/hyemdooly) 와 *반대 시점 (reviewer → reviewer 다년 활동)*.
25
+
26
+ **MCP 룰 `multi-year-reviewer-activity` 후보** — *reviewer 의 코호트 간 활동 유지*.
27
+
28
+ ### 3. 학생 「객체지향의 사실과 오해」 자가 인용 + *역할·책임·협력* 어휘
29
+
30
+ 학생 자가 답변 (Thread 8):
31
+
32
+ > *"객체지향의 사실과 오해를 읽으면서, 객체를 단순히 현실의 사물을 모방하는 존재가 아니라 명확한 역할과 책임을 가진 독립적인 행위자로 바라보게 되었습니다. 현실에서는 말리빈이 해준 피드백처럼 카지노 딜러가 점수를 계산하는 모습을 볼 수 있지만, 소프트웨어 설계에서는 딜러에게 모든 계산과 승패 판정 책임을 부여하기보다는, 각 객체가 단일 책임을 갖도록 역할을 분리하는 것이 바람직하다고 생각했습니다."*
33
+
34
+ → **학생 자가 「객체지향의 사실과 오해」 인용 + *역할·책임·협력* 어휘 자가 사용** = **MCP `oh-my-oop` 핵심 가치 정점**.
35
+
36
+ #### 3.1. *현실 메타포 vs 객체 분리 트레이드오프*
37
+
38
+ 학생 자가 입장 — *현실 메타포 (딜러 = 점수 계산) vs 단일 책임 (GameResultDecider 분리)*. PR #117·#129·#130·#143·#109·#113 결의 *현실 메타포 정합* 어휘 와 *학생 자가 *현실 메타포 비판***.
39
+
40
+ **MCP 룰 `metaphor-fidelity-vs-srp-tradeoff` 후보** — *현실 메타포 정합 vs 단일 책임 트레이드오프*.
41
+
42
+ ### 4. Ace 1 vs 11 기본 + 수학적 비교 어휘 (말리빈)
43
+
44
+ 학생 자가 의견 (Thread 2):
45
+
46
+ > *"저는 값을 계산하는 로직에서 ACE를 기본적으로 11로 판단하는 것이 더 옳다고 생각했습니다. 만약 여러 장의 카드를 받았을 때, 그 카드들 안에 ACE가 존재한다면 기본적으로 11점으로 계산하고, 총합이 21을 초과하는 경우에만 1점으로 변경하는 것이 블랙잭 규칙에 더 적절하다고 생각했습니다!"*
47
+
48
+ reviewer (수학적 비교 어휘):
49
+
50
+ > *"글쎄요, ACE 카드가 10점이 추가되는 경우가 있는 것이지, 11점에서 출발해서 10점씩 깎이는 것이 더 어색하다 생각해요. ACE 카드가 4장인 경우, `4 * 11 - 3 * 10` 로직을 작성하는 게 적절해보이시나요? 아니면, `4 * 1 + 10` 로직을 작성하는 게 적절해보이시나요?*
51
+ >
52
+ > *일반적으로 ACE는 어떤 게임에서든 1로 계산하기도 하니까요. 다각도로 볼 수 있는 시각을 연습해보세요."*
53
+
54
+ 학생 자가 적용:
55
+
56
+ > *"ACE를 1로 계산하는 게 더 일반적이겠네요! 말리빈의 피드백대로 기본적으로는 1로 계산하고 특정 상황에 따라 10을 추가해주는 방식으로 재 구현해보았습니다!"*
57
+
58
+ → **reviewer 수학적 비교 어휘 (4*11-3*10 vs 4*1+10)** = *추상화의 자연스러움 = 수학식의 단순성*. **MCP 핵심 가치 정점**.
59
+
60
+ PR #117 (수학적 풀이 외부글) 결 합류 + *수학적 직관성 = 모델 자연스러움* 어휘.
61
+
62
+ **MCP 룰 `mathematical-naturalness-as-model-criterion` 후보** — *수학식 단순성 = 모델 자연스러움 지표*.
63
+
64
+ ### 5. Flyweight 패턴 학생 자가 학습
65
+
66
+ 학생 자가 답변 (Thread 4):
67
+
68
+ > *"52장의 카드를 모두 생성한 후, 이미 생성된 동일한 카드 객체가 존재한다면 해당 객체를 재사용하는 방식은 메모리 측면에서 효율적이라고 생각했습니다. (...) 블랙잭의 경우 가능한 카드 조합이 52가지로 제한되어 있으므로, Flyweight 패턴을 적용해 52장의 카드에 대해 캐싱을 구현한다면, 이미 생성된 카드 객체를 재사용하여 메모리 사용량을 크게 줄일 수 있을 것 같았습니다."*
69
+
70
+ → **GoF 디자인 패턴 (Flyweight) 학생 자가 학습 + 자가 적용** = PR #138·#142 (companion lazy 캐싱) 결의 *학생 자가 패턴 어휘 사용*. **MCP 룰 `flyweight-pattern-card-caching` 후보**.
71
+
72
+ ### 6. `Card private constructor + 팩토리 메서드` 자가 적용 — 중복 인스턴스 회피
73
+
74
+ reviewer (Thread 11): *"여전히 동일한 값을 가지는 중복 인스턴스를 생성할 수 있겠어요."*
75
+
76
+ 학생 자가 적용:
77
+
78
+ ```kotlin
79
+ class Card private constructor(val cardRank: CardRank, val shape: Shape)
80
+ ```
81
+
82
+ → **private constructor + 팩토리 메서드** = PR #35 결의 *private constructor + companion factory*. 누적 2+ PR.
83
+
84
+ ### 7. data class copy 비활성화 (Kotlin 2.0) — 학생 자가 학습
85
+
86
+ reviewer (Thread 11): *"data class 도 이제는 copy의 영향을 받지 않도록 구성해볼 수 있지요."* + 외부글 (kotlinlang.org/docs/whatsnew2020.html).
87
+
88
+ 학생 자가 답변: *"@Deprecated(DeprecationLevel.ERROR)를 이용하면 copy()를 비활성화 하는 것이 가능하다고 하네요!"*
89
+
90
+ → **Kotlin 2.0 + 신규 어휘 자가 학습** = *Kotlin 어휘 깊은 자가 학습*. **MCP 룰 `kotlin-version-feature-learning` 후보**.
91
+
92
+ ### 8. 추가 칭찬 + 모든 18 스레드 학생 자가 답변 + commit SHA
93
+
94
+ ## 못한 점 (설계 관점)
95
+
96
+ ### 1. `cards.allCards.clear()` 코드 예시 시나리오 — reviewer 가 *문제 시나리오*
97
+
98
+ reviewer (Thread 5):
99
+
100
+ > *"아래 코드를 실행시킨다면 어떤 문제가 생길 수 있을까요?*
101
+ > ```kotlin
102
+ > val cards = Cards(listOf(.....))
103
+ > cards.allCards.clear()
104
+ > ```"
105
+
106
+ 학생 자가 답변:
107
+
108
+ > *"위의 코드를 실행하게 되면, allCards는 MutableList로 구현되어있기 때문에 외부에서 조작이 가능하게 됩니다. clear()를 통해서 모든 카드를 삭제하게 될 수 있을 것 같습니다."*
109
+
110
+ → **reviewer 가 *문제 시나리오 코드 예시* + 학생 자가 답변 모범** = *Tell-Don't-Ask + mutable list 외부 노출 위험 자가 학습*. PR #21·#117·#138·#143 결 강화.
111
+
112
+ **MCP 룰 `reviewer-scenario-code-example` 후보** — *reviewer 가 *문제 발생 시나리오 코드 예시* = 학생 자가 답변 유도*.
113
+
114
+ ### 2. *MVC 패턴 매몰되지 않기* reviewer 메타 어휘
115
+
116
+ reviewer (Thread 10·13):
117
+
118
+ > *"MVC 패턴이라 Service 라는 이름을 붙이신거라면, 거기에 벗어나서 객체의 이름을 짓는 데 집중해보세요."*
119
+
120
+ > *"이전에 언급했던 것 처럼, MVC 패턴에 매몰되지 않고 생각해보시면 좋겠어요 :)"*
121
+
122
+ 학생: *"MVC 패턴에 매몰되지 않게 일단은 각 클래스들에 맞는 책임과 역할을 가지고 있는지를 판단하면서 구현해보겠습니다!"*
123
+
124
+ → **패턴 매몰 vs 객체 이름 집중** = *MCP `oh-my-oop` 핵심 가치 (패턴 적용 X = 책임 우선)*. PR #126 (KwonDae *MVC 절대 원칙*) 결의 *반대 시점 (MVC 매몰 회피)* 트레이드오프.
125
+
126
+ **MCP 룰 `pattern-applied-without-need` 강화** 누적 7+ PR (#80·#145·#100·#76·#39·#31·#118). **MCP 룰 `pattern-vs-object-naming-priority` 후보** — *패턴 (Service, Manager) vs 객체 이름 (역할 명시) 우선순위*.
127
+
128
+ ### 3. CardsGenerator 테스트 가능성 + Shuffler interface
129
+
130
+ reviewer (Thread 6): *"이 카드 생성기는 랜덤의 요소때문에 테스트가 불가능한 구조이네요."*
131
+
132
+ 학생 자가 적용: `Shuffler interface` 분리 + `TestShuffler` (test util).
133
+
134
+ → **DIP 정공 + production vs test 분리** = PR #138·#143·#113·#109 결의 *interface-for-test-substitution* 누적 7+ PR.
135
+
136
+ ### 4. `turn`/`isHit` 이름 의미 모호
137
+
138
+ reviewer (Thread 7): *"turn 이라는 메서드명은 다른 개발자들이 보았을 때 어떤 역할을 할지 바로 유추해낼 수 있을까요?"*
139
+
140
+ 학생 자가 적용: `performTurn` + `decideToHit`.
141
+
142
+ → **이름 의미 정확성** = PR #36·#117·#129·#130·#139·#109·#113 결 합류 누적 7+ PR.
143
+
144
+ ### 5. GameResultDecider 외부 객체 vs Dealer 내부 위치
145
+
146
+ reviewer (Thread 8) 후속:
147
+
148
+ > *"객체 분리하는 것은 공감하지만, 매번 결과를 알아야할 때마다 이 객체를 생성해야겠네요. 생성이 꼭 필요한 것일지 고민해보시면 좋겠어요. 또, 객체 분리했다 해도, 여전히 딜러 내부에 위치하는 건 어떨지 고민해보세요. 다른 개발자들이 점수 계산 로직을 찾을 때 어디부터 찾아볼지 상상해보면서요!"*
149
+
150
+ → **동료 개발자 시점 어휘 (maintainer perspective locator)** = PR #87·#76·#80·#107·#82 결 + **객체 생성 비용 + 객체 위치 (Dealer 내부 vs 외부 객체) 트레이드오프**. PR #129·#138·#142 (외부 장치 X = 참가자 자가) 결의 *반대 시점*.
151
+
152
+ ### 6. Shape/Rank enum 텍스트 정보 = 도메인 vs 뷰
153
+
154
+ reviewer (Thread 9): *"이 블랙잭 게임 도메인을 똑 떼어다가 안드로이드에 이식한다면, 이 텍스트 값은 유효한가요?"*
155
+
156
+ 학생 자가 답변:
157
+
158
+ > *"안드로이드에서 텍스트 정보는 주로 리소스 파일(strings.xml)에 저장하여 다국어 지원 및 유지보수를 용이하게 하는 것으로 알고 있습니다."*
159
+
160
+ 학생 자가 적용: `Card.displayName()` 확장 함수.
161
+
162
+ → **다국어/이식성 의식 + 확장 함수 정공** = PR #117·#126·#143 결 합류. **MCP 룰 `model-view-dependency-direction` 강화** 누적 12+ PR ⭐⭐⭐.
163
+
164
+ ### 7. `Cards.drawCards()` 역할 추가 — 카드 뭉치 자가 행동
165
+
166
+ reviewer (Thread 12):
167
+
168
+ > *"이 객체는 값을 갖고있기만 하고 맡고 있는 역할이 없네요. 여기에 할 수 있는 역할을 어디에서 하고 있는 것은 아닐지, 혹은 다른 곳에서 적절히 하고 있기에 이 객체가 필요 없는 것은 아닐지 고민해보세요."*
169
+
170
+ 학생 자가 적용: `Cards.drawCards()` 메서드 추가.
171
+
172
+ → **객체 책임 X = 객체 불필요 vs 책임 추가**. PR #142 (Game/Scoreboard 분리) 결의 *책임 응집*.
173
+
174
+ ### 8. 패키지 구조 model/view/service → model/view/controller
175
+
176
+ reviewer (Thread 13): *"이 질문 이전에 패키지 구조를 model, view, service 로 구성하는 것은 적절한 것인지부터 고민해보시면 좋겠네요 :)"*
177
+
178
+ 학생 자가 적용 → controller (MVC).
179
+
180
+ → **패키지 구조 의식**. PR #142 (package-by-domain) 결 합류.
181
+
182
+ ### 9. `dealer.dealerPlay` 함수 분리 — CQS 위반 자가 정정
183
+
184
+ reviewer (Thread 14): *"이친구를 호출하면 딜러가 몇번 카드를 뽑았을지 횟수를 가져올 것 같이 생겼는데, 안에서는 뽑는 일까지 해버리고있네요."*
185
+
186
+ 학생 자가 적용 → `dealerPlay()` + `getDrawCount()` 분리.
187
+
188
+ → **CQS 정공** = PR #117·#139·#130 (CQS 위반) 결의 *학생 자가 정정* 누적 3+ PR.
189
+
190
+ ### 10. `determineGameResult` 명명 정확성
191
+
192
+ reviewer (Thread 15): *"이 메서드는 정말 게임의 결과를 줄 거라 생각했는데, 뭔가 결과가 아니라 다른 걸 주고 있네요."*
193
+
194
+ 학생 자가 적용 → `determineGameResult()` 명명.
195
+
196
+ → **함수 이름 vs 반환 의미 일치** = PR #36·#117·#130 결 합류.
197
+
198
+ ### 11. 템플릿 패턴 vs 단순 List 섞기
199
+
200
+ reviewer (Thread 16): *"템플릿을 쓸 필요까지 있었을지 고민해보시면 좋겠네요!"*
201
+
202
+ → **`pattern-applied-without-need`** 누적 7+ PR 강화. 단순 List 섞기 = 템플릿 패턴 무의미.
203
+
204
+ ### 12. 카드 부족 시 새 덱 vs 게임 종료 (카지노 메타포)
205
+
206
+ reviewer (Thread 18):
207
+
208
+ > *"더이상 뽑을 카드가 없다면 에러가 발생하겠어요. 카지노에서 나눠줄 카드가 없다면, 바로 게임장 문 닫고 사람들 내쫓는 것은 자연스러운 일일까요?"*
209
+
210
+ 학생 자가 답변 + 적용:
211
+
212
+ > *"더이상 뽑을 카드가 없다면, 게임을 끝내는 것보다 새로운 카드덱을 섞어서 다시 게임을 시작하는게 더좋을 것 같다는 생각이 듭니다."*
213
+
214
+ → **카지노 메타포 + 우아한 처리** = PR #129·#138 (블랙잭 8 덱 도메인 룰) 결 합류 + *graceful shutdown vs auto-refill* 트레이드오프.
215
+
216
+ **MCP 룰 `card-shortage-handling-strategy` 후보** — *카드 부족 시 처리 (에러 vs 새 덱 vs 종료) 트레이드오프*.
217
+
218
+ ### 13. Ace 11 기본 시 4 ace 처리 자가 의문 + 학생 자가 변경
219
+
220
+ §4 인용. 학생 자가 *11 기본 → 1 기본 + 10 추가* 자가 변경 + while 적용:
221
+
222
+ ```kotlin
223
+ fun calculateTotalCardScore(): Int {
224
+ var score = hand.getScore()
225
+ var aceCount = countAce()
226
+ while (score + ACE_PLUS_VALUE <= GameResultDecider.BLACKJACK_SCORE && countAce() > DEFAULT_ZERO) {
227
+ score += ACE_PLUS_VALUE
228
+ aceCount--
229
+ }
230
+ return score
231
+ }
232
+ ```
233
+
234
+ → **Ace 1 기본 + while + 10 추가** = PR #20·#64·#110·#28·#125·#147·#82 의 *Ace 11 기본 + while 차감* 안티패턴과 *반대 시점 정공*.
235
+
236
+ 다만 *while 사용* — PR #117 (수학적 풀이) / PR #138·#142 (재귀 + tailrec) 와 *반대 시점*. **MCP 룰 `ace-bonus-while-vs-math-vs-recursion` 후보** — *Ace 처리 3 방식 트레이드오프*.
237
+
238
+ ### 14. GameResult enum 도메인 vs 메시지 함수 자가 적용
239
+
240
+ reviewer (Thread 17): *"게임 결과를 enum으로 나타내보는 건 어떨까요?"*
241
+
242
+ 학생 자가 적용:
243
+
244
+ ```kotlin
245
+ enum class GameResult { WIN, LOSE, DRAW }
246
+ ```
247
+
248
+ → **enum 변환 정공** = PR #117·#126·#130·#113·#143 결 합류.
249
+
250
+ ### 15. Hand 클래스 자가 추가 — 카드 뭉치 vs 손 카드 분리
251
+
252
+ 학생 자가 답변 (Thread 2):
253
+
254
+ > *"Hand라는 클래스를 생성하면서, 결국 ScoreCalculator도 플레이어나 딜러가 손에 들고 있는 카드들의 수를 바탕으로 점수를 계산하기 때문에 생성자를 hand로 변경해주었습니다!"*
255
+
256
+ → **Hand 분리 (god-object 회피)** = PR #117·#126·#129·#138·#143 결 합류.
257
+
258
+ ### 16. CardDistributor 추가 — 카드 분배자 분리
259
+
260
+ 학생 자가 적용 — *CardDistributor 객체 추가* (카드 분배 책임).
261
+
262
+ → **분배자 객체 분리** = *PR #21 (CardPicker 가상 객체) 결의 *반대 시점***. CardDistributor 도 *가상 객체* 위험 (PR #21·#80·#145·#100 결).
263
+
264
+ **MCP 룰 `virtual-object-vs-real-domain` 강화** 누적 8+ PR ⭐⭐⭐.
265
+
266
+ ### 17. 모든 18 스레드 학생 자가 답변 + commit SHA + 학생 자가 의견 명시 풍부
267
+
268
+ ## 리뷰어 의견 요지
269
+
270
+ - **게임 규칙 = 도메인 vs 컨트롤러**.
271
+ - **Ace 1 기본 + 10 추가 (4 ace 수학적 비교)**.
272
+ - **CardRank.ACE enum 비교 (문자열 비교 X)**.
273
+ - **Card 중복 인스턴스 회피 (Flyweight + private constructor)**.
274
+ - **`cards.allCards.clear()` 코드 예시 시나리오**.
275
+ - **CardsGenerator 테스트 가능성 + Shuffler interface**.
276
+ - **`turn`/`isHit` 이름 의미 모호**.
277
+ - **GameResultDecider 외부 객체 vs Dealer 내부 위치 + 동료 개발자 시점**.
278
+ - **Shape/Rank enum 텍스트 = 도메인 vs 뷰 + 안드로이드 이식**.
279
+ - **MVC 패턴 매몰 vs 객체 이름 집중**.
280
+ - **data class copy 비활성화 (Kotlin 2.0) 외부글**.
281
+ - **Cards 역할 추가 vs 객체 불필요**.
282
+ - **패키지 구조 의식 (model/view/service)**.
283
+ - **`dealerPlay` 함수 분리 (CQS 위반)**.
284
+ - **`determineGameResult` 명명 정확성**.
285
+ - **템플릿 패턴 vs 단순 List 섞기 + Test 코드 위치**.
286
+ - **enum 변환 (GameResult)**.
287
+ - **카드 부족 = 카지노 메타포 (새 덱 vs 종료)**.
288
+
289
+ ## 대표 인용
290
+
291
+ > [malibinYun Thread 2]
292
+ > *"ACE 카드가 4장인 경우, `4 * 11 - 3 * 10` 로직을 작성하는 게 적절해보이시나요? 아니면, `4 * 1 + 10` 로직을 작성하는 게 적절해보이시나요?*
293
+ >
294
+ > *일반적으로 ACE는 어떤 게임에서든 1로 계산하기도 하니까요. 다각도로 볼 수 있는 시각을 연습해보세요."*
295
+
296
+ → **수학적 비교 어휘 + 일반화 어휘** — *모델 자연스러움 = 수학식 단순성*.
297
+
298
+ > [gahyunkim Thread 8]
299
+ > *"객체지향의 사실과 오해를 읽으면서, 객체를 단순히 현실의 사물을 모방하는 존재가 아니라 명확한 역할과 책임을 가진 독립적인 행위자로 바라보게 되었습니다."*
300
+
301
+ → **학생 「객체지향의 사실과 오해」 자가 인용 + 역할·책임 어휘** — *MCP `oh-my-oop` 핵심 가치 정점*.
302
+
303
+ > [malibinYun Thread 10]
304
+ > *"MVC 패턴이라 Service 라는 이름을 붙이신거라면, 거기에 벗어나서 객체의 이름을 짓는 데 집중해보세요."*
305
+
306
+ → **패턴 매몰 vs 객체 이름 집중** — *MCP `pattern-applied-without-need` 강화*.
307
+
308
+ > [malibinYun Thread 11]
309
+ > *"글쎄요~ data class 도 이제는 copy의 영향을 받지 않도록 구성해볼 수 있지요. 코틀린 언어의 버전 업데이트가 있을 떄 어떤 변화점이 생겼는지 관심을 가져보셔도 좋겠어요 :)"*
310
+
311
+ → **Kotlin 버전 업데이트 학습 권유** — *Kotlin 어휘 깊이 권유*.
312
+
313
+ > [malibinYun Thread 18]
314
+ > *"더이상 뽑을 카드가 없다면 에러가 발생하겠어요. 카지노에서 나눠줄 카드가 없다면, 바로 게임장 문 닫고 사람들 내쫓는 것은 자연스러운 일일까요?"*
315
+
316
+ → **카지노 메타포 + graceful shutdown 어휘**.
317
+
318
+ ## 얻은 교훈 (보편)
319
+
320
+ 1. **수학적 비교 어휘 (4*11-3*10 vs 4*1+10)** — *모델 자연스러움 = 수학식 단순성*. **MCP 룰 `mathematical-naturalness-as-model-criterion` 후보**.
321
+
322
+ 2. **「객체지향의 사실과 오해」 학생 자가 인용** — *MCP `oh-my-oop` 핵심 가치 정점*.
323
+
324
+ 3. **Flyweight 패턴 학생 자가 학습** — **MCP 룰 `flyweight-pattern-card-caching` 후보**.
325
+
326
+ 4. **reviewer 문제 시나리오 코드 예시** — **MCP 룰 `reviewer-scenario-code-example` 후보**.
327
+
328
+ 5. **MVC 패턴 매몰 vs 객체 이름 집중** — *PR #126 (MVC 원칙) 반대 시점*. **MCP 룰 `pattern-vs-object-naming-priority` 후보**.
329
+
330
+ 6. **Kotlin 버전 업데이트 자가 학습 + data class copy 비활성화** — **MCP 룰 `kotlin-version-feature-learning` 후보**.
331
+
332
+ 7. **카드 부족 카지노 메타포 (graceful vs 종료)** — **MCP 룰 `card-shortage-handling-strategy` 후보**.
333
+
334
+ 8. **현실 메타포 vs SRP 트레이드오프** — **MCP 룰 `metaphor-fidelity-vs-srp-tradeoff` 후보**.
335
+
336
+ 9. **reviewer 다년 활동 (말리빈 2024 → 2025)** — **MCP 룰 `multi-year-reviewer-activity` 후보**.
337
+
338
+ 10. **Ace 처리 3 방식 (while vs math vs recursion)** — **MCP 룰 `ace-bonus-while-vs-math-vs-recursion` 후보**.
339
+
340
+ 11. **CQS 위반 자가 정정** — *PR #117·#139 결의 *재발* → PR #118 *자가 정정**.
341
+
342
+ 12. **함수 이름 vs 반환 의미 일치** — 누적 7+ PR.
343
+
344
+ 13. **interface-for-test-substitution** — 누적 7+ PR.
345
+
346
+ 14. **virtual-object-vs-real-domain (CardDistributor)** — 누적 8+ PR.
347
+
348
+ 15. **모든 18 스레드 학생 자가 답변 + commit SHA + 자가 의견 명시** — *2025 코호트 10 PR 정점 유지*.
349
+
350
+ ## 얻은 교훈 (도메인)
351
+
352
+ 1. **Ace 1 기본 + while + 10 추가** — *Ace 1 기본 모델 정공* (PR #36 결).
353
+
354
+ 2. **카드 부족 = 새 덱 추가 (graceful)** — *카지노 메타포 정합*.
355
+
356
+ 3. **블랙잭 결과 enum (WIN/LOSE/DRAW)** — *기본 3 멤버*. PR #129·#126·#113 결.
357
+
358
+ 4. **52 카드 캐싱 (Flyweight)** — *학생 자가 학습*.
359
+
360
+ ## MCP 룰 후보 신규 + 강화 (PR #118)
361
+
362
+ | 룰 | 신규 / 강화 | 누적 PR |
363
+ |---|---|---|
364
+ | `mathematical-naturalness-as-model-criterion` | 신규 | 1 (#118) |
365
+ | `flyweight-pattern-card-caching` | 신규 | 1 (#118) |
366
+ | `reviewer-scenario-code-example` | 신규 | 1 (#118) |
367
+ | `pattern-vs-object-naming-priority` | 신규 | 1 (#118) |
368
+ | `kotlin-version-feature-learning` | 신규 | 1 (#118) |
369
+ | `card-shortage-handling-strategy` | 신규 | 1 (#118) |
370
+ | `metaphor-fidelity-vs-srp-tradeoff` | 신규 | 1 (#118) |
371
+ | `multi-year-reviewer-activity` | 신규 | 1 (#118) |
372
+ | `ace-bonus-while-vs-math-vs-recursion` | 신규 | 1 (#118) |
373
+ | `pattern-applied-without-need` | 강화 | 7+ |
374
+ | `virtual-object-vs-real-domain` | 강화 | 8+ ⭐⭐⭐ |
375
+ | `interface-for-test-substitution` | 강화 | 7+ |
376
+ | `model-view-dependency-direction` | 강화 | 12+ ⭐⭐⭐ |
377
+ | `command-query-separation` | 강화 | 3+ |
378
+ | `function-name-vs-return-semantic-mismatch` | 강화 | 7+ |
379
+
380
+ ## 메타 어휘 (15 reviewer? + MCP 핵심 가치 합류 정점)
381
+
382
+ - ***말리빈 (malibinYun) 2024 → 2025 reviewer 다년 활동*** — **MCP `multi-year-reviewer-activity` 신규 메타 케이스**.
383
+ - ***수학적 비교 어휘 (4*11-3*10 vs 4*1+10)*** — malibinYun PR #118 — *모델 자연스러움 = 수학식 단순성*.
384
+ - ***학생 「객체지향의 사실과 오해」 자가 인용*** — gahyunkim PR #118 — *MCP `oh-my-oop` 핵심 가치 정점 학생 자가 인용*.
385
+ - ***MVC 패턴 매몰 vs 객체 이름 집중*** — malibinYun PR #118 — *PR #126 (MVC 원칙) 반대 시점*.
386
+ - ***reviewer 문제 시나리오 코드 예시*** — malibinYun PR #118 — *학생 자가 답변 유도*.
387
+ - ***Kotlin 버전 업데이트 학습 권유*** — malibinYun PR #118.
388
+ - ***카지노 메타포 (graceful shutdown)*** — malibinYun PR #118.
389
+
390
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지** (말리빈 = 기존 reviewer 다년 활동). **2025 코호트 10 PR 코퍼스 정점 도달**.
391
+
392
+ ## 비교 (말리빈 2024 reviewer 시기 vs 2025 reviewer 시기)
393
+
394
+ - **2024 reviewer (PR #32 krrong 학생 시기 등)**: *"개발에 옳고 그름은 없고, 장단점만이 있는 세계"* + *재구현 권유* + *외부 글*. PR #95·#23·#26 등.
395
+ - **2025 reviewer (PR #118 gahyunkim)**: *수학적 비교 어휘 (4*11-3*10)* + *MVC 패턴 매몰 회피* + *Kotlin 2.0 학습 권유* + *카지노 메타포*.
396
+
397
+ → **말리빈 어휘 진화** — *2024 어휘 (트레이드오프) + 2025 어휘 (수학적 비교 + 메타 학습)*. **MCP 핵심 가치 정점 어휘 유지 + Kotlin 어휘 진화**.
@@ -0,0 +1,215 @@
1
+ # PR #141 — [블랙잭 2단계] 조이 미션
2
+
3
+ - **Reviewee:** [@gahyunkim](https://github.com/gahyunkim)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/141
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@malibinYun](https://github.com/malibinYun) (말리빈) — 1단계 #118 동일 reviewer (2024→2025 다년 활동)
7
+ - **라인 코멘트:** 21 스레드 — *PR 본문 *MVC보다 객체 어떤 내용* 학생 자가 학습 의식 + 학생 자가 답변 + commit SHA + 자가 의견 명시 풍부 + tailrec 자가 적용 + 테스트 카드 스텁 (`SPADE_ACE`) + ScoreCalculator → Hand 응집 + GameResultDecider → GameResult.companion 이동 (PR #142 결) + 일급 컬렉션 (GameResults, ProfitResult, PlayersResult) + var decisionMaker 람다 분리 학생/reviewer 양방향*
8
+ - **양 단계 완성 reviewee** (1단계 #118 batch 21 분석 완료 + 2단계 #141 = batch 22 추가).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 학습 의식 + *MVC 보다 객체 어떤 내용*
13
+
14
+ PR 본문:
15
+
16
+ > *"말리빈! 2단계 미션도 열심히 구현해봤습니다! 아직 많이 부족한 부분도 많지만, 일단은 2단계 리뷰를 통해서 더 많은 리뷰를 받고싶어서 보냅니다! MVC보다는 각 객체에 어떤 내용이 들어가는 게 좋을 지 고민을 해보았습니다."*
17
+
18
+ → **PR #118 reviewer 어휘 자가 적용** = *말리빈 1단계 *MVC 패턴 매몰 X* 어휘 → 학생 자가 학습 시점 정공*. **MCP `pattern-vs-object-naming-priority` 강화** 누적 2+ PR (#118·#141).
19
+
20
+ ### 2. tailrec 학생 자가 적용 + while → 재귀 변경
21
+
22
+ reviewer (Thread 3):
23
+
24
+ > *"또, 어려운 내용일 수 있지만 재귀함수를 활용해서 게임을 실행시켜보셔도 좋겠어요. tailrec 키워드를 함께 알아보세요!*
25
+ >
26
+ > *어딘가에 while문으로 동작하고 있는 부분들이 보이는데, 그 조건대로 무언가를 행동하는건 그 객체의 역할일지, 게임 룰의 역할일지도 고민해보세요!"*
27
+
28
+ 학생 자가 적용. → **tailrec 자가 학습** 누적 4+ PR (#138·#142·#140·#141) ⭐⭐.
29
+
30
+ ### 3. 테스트 카드 스텁 (`SPADE_ACE = Card.of(...)`)
31
+
32
+ reviewer (Thread 8):
33
+
34
+ > *"테스트에 필요한 카드를 매번 만들어내는 건 매우 귀찮은 일이지요. 미리 카드 스텁을 테스트 패키지에 만들어 두고 재활용해보는건 어떨까요?*
35
+ > ```kotlin
36
+ > val SPADE_ACE = Card.of(...)
37
+ > ```"
38
+
39
+ 학생 자가 적용 — *카드 스텁을 테스트 패키지에 구현 + 적용 commit*.
40
+
41
+ → **테스트 fixture 재사용** = PR #21 (test-fixture-essential-info), PR #126·#130 (test-fixture-secondary-constructor) 결 합류. **MCP 룰 `test-fixture-stub-reuse` 후보** — *카드 스텁 = 테스트 패키지 재사용*.
42
+
43
+ ### 4. ScoreCalculator → Hand 응집 + 객체 책임 분리
44
+
45
+ reviewer (Thread 12):
46
+
47
+ > *"ScoreCalculator 이 객체가 하는 일을 여기에 결합시키지 않고, 응집시켜보는 건 어떨까요?"*
48
+
49
+ 학생 자가 적용:
50
+
51
+ > *"Hand 자체가 Player나 Dealer가 뽑은 카드를 가지고 있기 때문에 여기서 계산해주는 것이 오히려 더 좋을 것 같습니다! ScoreCalculator를 없애고 Hand 내에서 Ace가 포함되었을때까지의 값을 모두 계산할 수 있도록 구현해주었습니다."*
52
+
53
+ → **god-object 회피 + Hand 책임 응집** = PR #117 (stateless-class-vs-companion-object) + PR #142 결의 *반대 시점 (외부 객체 vs 응집)*. **MCP 룰 `cohesion-vs-separation-tradeoff` 후보**.
54
+
55
+ ### 5. GameResultDecider → GameResult.companion 이동 (PR #142 결)
56
+
57
+ reviewer (Thread 5):
58
+
59
+ > *"이 객체가 하는 일은 GameResult 에 옮겨볼 수도 있겠다는 생각이 드네요. 로또 결과를 계산했듯이요!"*
60
+
61
+ 학생 자가 적용: `GameResultDecider` 삭제 + `GameResult.companion object` 함수 이동.
62
+
63
+ → **enum 책임 강화 + 외부 객체 제거** = PR #142 (GameResult.cashOut) + PR #143 (ProfitRate.calculateProfitRate) 결 합류.
64
+
65
+ ### 6. 일급 컬렉션 (GameResults, PlayersResult, ProfitResult)
66
+
67
+ reviewer (Thread 13):
68
+
69
+ > *"게임의 결과를 나타내는 일급 컬렉션을 만들고, 그 객체에 어울리는 역할을 부여해보는 건 어떨까요? 또, 그 게임의 결과를 담는 객체는 어느 객체에서 반환하면 좋을지 충분히 고민해보세요."*
70
+
71
+ 학생 자가 적용:
72
+
73
+ > *"전체 플레이어와 딜러의 수익을 담은 ProfitResult 클래스, 플레이어들의 모든 수익을 담은 PlayersResult를 만들어서 해당하는 클래스를 이용할 수 있도록 구현해주었습니다!*
74
+ > *- PlayersResult: Map<Player, Money>를 만들어서 플레이어들의 수익을 담아주는 클래스*
75
+ > *- ProfitResult: 전체 플레이어들의 수익과 딜러의 수익을 담은 클래스 구현"*
76
+
77
+ → **일급 컬렉션 + 책임 명확** = PR #142 (Scoreboard), PR #143 (ProfitInfo) 결 합류.
78
+
79
+ ### 7. ACE 카드 존재 파악 Hand.isAceExist() 자가 적용
80
+
81
+ reviewer (Thread 2):
82
+
83
+ > *"Hand 객체의 값을 꺼내 비교하기보다, Hand에게 메시지를 던져 물어보도록 구성해보는 건 어떨까요?"*
84
+
85
+ 학생 자가 적용:
86
+
87
+ > *"hand 객체 내에서 값을 확인해서 메시지를 던질 수 있도록 isAceExist()를 hand 객체 내에서 관리할 수 있도록 해주었습니다!"*
88
+
89
+ → **Tell-Don't-Ask 정공** = PR #87·#129·#138 결.
90
+
91
+ ### 8. 추가 칭찬 + 모든 21 스레드 학생 자가 답변 + commit SHA
92
+
93
+ ## 못한 점 (설계 관점)
94
+
95
+ ### 1. 카드 부족 시 예외 처리 + 랜덤 분리 (PR #118 1단계 결 진화)
96
+
97
+ reviewer (Thread 1):
98
+
99
+ > *"남아있는 카드가 1장일 때 2장을 뽑으면 어떤 일이 발생할까요? 또, 랜덤에 대한 테스트가 불가능한 구조가 되었어요. 어떻게하면 랜덤에 대한 요소를 분리해서 테스트 가능하도록 만들 수 있을까요?"*
100
+
101
+ 학생 자가 적용: *TestCardGenerator 분리 + 카드 부족 예외 처리*.
102
+
103
+ → **카드 부족 시 graceful 처리** = PR #118 (1단계 카지노 메타포 새 덱) 와 *반대 시점 (예외 처리)*. **MCP 룰 `card-shortage-handling-strategy` 강화** 누적 2+ PR (#118·#141).
104
+
105
+ ### 2. var decisionMaker 람다 분리 — 학생/reviewer 양방향 (Thread 7·9)
106
+
107
+ reviewer (Thread 7): *"플레이어까지 람다로 전달할 필요는 없다고 생각해요. 여기에는 람다로 전달하지 않고 구성해보는 건 어떨까요?"*
108
+
109
+ 학생 자가 적용 (`var decisionMaker`):
110
+
111
+ ```kotlin
112
+ class Player {
113
+ var decisionMaker: ... // ← var + 외부 할당
114
+ }
115
+ ```
116
+
117
+ reviewer 자가 후속 (Thread 9):
118
+
119
+ > *"다른 개발자들은 이 변수를 외부에서 꼭 할당해야한다는 사실을 바로 알 수 있을까요? (...) 플레이어에게 람다를 전달하고 있는 것은 달라지지 않았어요. 플레이어 객체 안에서 람다를 사용하지 않도록 구현해보시면 좋겠어요 :)"*
120
+
121
+ → **var + 외부 할당 = 호출 순서 invariant 부재** = PR #139·#142·#118 (lateinit/var) 결 합류. **MCP 룰 `lateinit-var-call-order-invariant` 강화** 누적 11+ PR.
122
+
123
+ reviewer 후속 = *학생 자가 적용이 *본질적 변경 X (람다만 var 로 옮김)* 명시*. **MCP 룰 `superficial-refactoring-vs-essential-change` 후보** — *표면 리팩토링 vs 본질 변경*.
124
+
125
+ ### 3. ProfitCalculator → 매핑 중복 제거 (Thread 10)
126
+
127
+ reviewer: *"playerResult.result.profitRate로 접근 하는 것과 어떤 차이가 있었나요?"*
128
+
129
+ 학생: *"playerResult.result.profitRate로 바로 접근할 수 있었는데 불필요하게 중복된 매핑을 하고 있었던 것 같습니다!"*
130
+
131
+ → **불필요한 추상화 자가 인지** = PR #117 (function-decomposition-creates-identity) 결 합류.
132
+
133
+ ### 4. Money.toInt() 불필요 - 직접 amount 접근
134
+
135
+ reviewer (Thread 11): *"money 의 amount를 접근하지 않고 이 함수를 만든 이유는 무엇인가요?"*
136
+
137
+ 학생 자가 적용: *toInt() 제거*.
138
+
139
+ → **불필요한 함수 = 직접 접근** 학생 자가 학습.
140
+
141
+ ### 5. Players 객체 메시지 전달 (Thread 3)
142
+
143
+ reviewer: *"foreach를 써볼 수도 있지만, players 객체에게 모든 플레이어 플레이하라는 메시지를 던져보는 건 어떨까요?"*
144
+
145
+ → **Tell-Don't-Ask + 일급 컬렉션 자가 행동** = PR #129·#138·#142·#140 결 합류.
146
+
147
+ ### 6. 게임 룰 위치 자가 의문 (Thread 3 reviewer 메타 어휘)
148
+
149
+ reviewer:
150
+
151
+ > *"어딘가에 while문으로 동작하고 있는 부분들이 보이는데, 그 조건대로 무언가를 행동하는건 그 객체의 역할일지, 게임 룰의 역할일지도 고민해보세요!"*
152
+
153
+ → **객체 역할 vs 게임 룰 위치 어휘** = PR #126·#129·#143 (business-logic-vs-controller-logic) 결 합류.
154
+
155
+ ## 대표 인용
156
+
157
+ > [gahyunkim PR 본문]
158
+ > *"MVC보다는 각 객체에 어떤 내용이 들어가는 게 좋을 지 고민을 해보았습니다."*
159
+
160
+ → **PR #118 reviewer 어휘 학생 자가 적용** — *말리빈 *MVC 매몰 X* → 학생 자가 학습*.
161
+
162
+ > [malibinYun Thread 9]
163
+ > *"플레이어에게 람다를 전달하고 있는 것은 달라지지 않았어요. 플레이어 객체 안에서 람다를 사용하지 않도록 구현해보시면 좋겠어요 :)"*
164
+
165
+ → **표면 리팩토링 vs 본질 변경 어휘**.
166
+
167
+ > [malibinYun Thread 8]
168
+ > *"테스트에 필요한 카드를 매번 만들어내는 건 매우 귀찮은 일이지요. 미리 카드 스텁을 테스트 패키지에 만들어 두고 재활용해보는건 어떨까요?"*
169
+
170
+ → **테스트 카드 스텁 재사용 어휘**.
171
+
172
+ ## 얻은 교훈 (보편)
173
+
174
+ 1. **MVC 매몰 X 학생 자가 학습 (PR #118 reviewer 어휘 적용)** — **MCP 룰 `pattern-vs-object-naming-priority` 강화** 누적 2+ PR.
175
+
176
+ 2. **tailrec 자가 학습 + while → 재귀** — 누적 4+ PR.
177
+
178
+ 3. **테스트 카드 스텁 재사용** — **MCP 룰 `test-fixture-stub-reuse` 후보**.
179
+
180
+ 4. **god-object 회피 + Hand 응집 (ScoreCalculator 제거)** — **MCP 룰 `cohesion-vs-separation-tradeoff` 후보**.
181
+
182
+ 5. **외부 객체 제거 + enum 책임 강화 (GameResultDecider → GameResult.companion)** = PR #142·#143 결 합류.
183
+
184
+ 6. **일급 컬렉션 (PlayersResult, ProfitResult, GameResults)** = PR #142·#143 결.
185
+
186
+ 7. **`var decisionMaker` 표면 리팩토링 자가 적용 + reviewer 자가 정정 (본질 변경 X)** — **MCP 룰 `superficial-refactoring-vs-essential-change` 후보**.
187
+
188
+ 8. **객체 역할 vs 게임 룰 위치** — PR #126·#129·#143 결.
189
+
190
+ 9. **불필요한 추상화 자가 인지** (PR #117 결 합류).
191
+
192
+ 10. **모든 21 스레드 학생 자가 답변 + commit SHA** — 2025 코호트 정점 유지.
193
+
194
+ ## MCP 룰 후보 신규 + 강화 (PR #141)
195
+
196
+ | 룰 | 신규 / 강화 | 누적 PR |
197
+ |---|---|---|
198
+ | `pattern-vs-object-naming-priority` | 강화 | 2+ (#118·#141) |
199
+ | `tailrec-optimization-applicability` | 강화 | 4+ |
200
+ | `test-fixture-stub-reuse` | 신규 | 1 (#141) |
201
+ | `cohesion-vs-separation-tradeoff` | 신규 | 1 (#141) |
202
+ | `superficial-refactoring-vs-essential-change` | 신규 | 1 (#141) |
203
+ | `card-shortage-handling-strategy` | 강화 | 2+ (#118·#141) |
204
+ | `lateinit-var-call-order-invariant` | 강화 | 11+ |
205
+ | `result-aggregation-locator` | 강화 | 4+ |
206
+
207
+ ## 비교 (PR #118 → #141)
208
+
209
+ - **1단계 #118 18 thread → 2단계 #141 21 thread**.
210
+ - **1단계 #118 *MVC 매몰 X* 어휘 → 2단계 #141 PR 본문 학생 자가 *MVC 보다 객체 내용 고민***.
211
+ - **1단계 #118 Flyweight 패턴 자가 학습 → 2단계 #141 Hand 응집 + ScoreCalculator 제거**.
212
+ - **1단계 #118 GameResultDecider → 2단계 #141 GameResult.companion 이동**.
213
+ - **2단계 #141 var decisionMaker 표면 리팩토링 → reviewer 자가 정정 (본질 변경 X)**.
214
+
215
+ → *진화 = 학생 자가 학습 시간성 + reviewer 어휘 자가 흡수 + 표면 vs 본질 차이 학습*.