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,739 @@
1
+ # PR #142 — [블랙잭 2단계] 디랙 미션
2
+
3
+ - **Reviewee:** [@doabletuple](https://github.com/doabletuple)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/142
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@KwonDae](https://github.com/KwonDae) (제이든) — 1단계 #126 동일 reviewer
7
+ - **라인 코멘트:** 20 스레드 — *PR 본문 자가 의문 1개 (Game 책임 비대) + 1단계 reviewer 의도 자가 정정 (Thread 1) + reviewer 자가 사과 + 학생 자가 사과 + 다형성 학습 (학생 자가 코드 예시 + 4-5 라운드 양방향 토론) + Result Kotlin stdlib 충돌 → GameResult + tailrec 자가 적용 + 0 의미 상수 (MIN_BET_AMOUNT) + 패키지 분리 (participant/card/result) + 딜러 초기 핸드 = openInitialHand 분리 vs 상태 판단 (2 안 비교) + Bet (음수 X) vs Money (음수 OK) 분리*
8
+ - **양 단계 완성 reviewee** (1단계 #126 batch 20 분석 완료 + 2단계 #142 = batch 21 추가).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 의문 + reviewer 자가 후퇴 + 학생 자가 사과 (Thread 1 학생 ↔ reviewer 양방향)
13
+
14
+ PR 본문:
15
+
16
+ > *"클래스가 비대해진만큼 다른 `Game`이 너무 많은 책임을 맡고 있는 것은 아닌지 의문이 들었지만, 그렇다고 `Game`이 맡고있는 책임 중 `Game`의 것이면 안 된다는 확신이 드는 부분도 없었습니다 😓"*
17
+
18
+ → **Game god-object 자가 의문**.
19
+
20
+ reviewer (Thread 1) **1단계 의도 명료화 + 자가 사과**:
21
+
22
+ > *"잘 구현해주셨습니다 👍 다만 제가 혼란을 드린 것 같아 죄송하네요.. 🥲 코멘트의 의도는 Controller에서 데이터를 꺼내 OutputView로 개별로 전달하는 것에 대한 이야기였습니다. 같이 객체 자체를 넘기고 outputView 에서 알아서 출력하도록 유도를 하고 싶었어요! iteration 을 수행해야 하는지? 에 대해 고민해보기를 바라는 코멘트였습니다 ㅎㅎ. 명확하지 못한 코멘트가 view 관련 함수가 domain으로 들어오게 하는 혼란을 야기한것 같네요. 보다 명확하게 전달드릴 수 있도록 하겠습니다 🙇‍♂️"*
23
+
24
+ 학생 자가 사과:
25
+
26
+ > *"제가 완전히 잘못 이해하고 있었네요 😭 헷갈리는 부분은 바로 질문을 드렸어야 하는데, 뒤늦게 여쭤봐서 죄송합니다 🙇‍♂️"*
27
+
28
+ → **양방향 자가 사과 + reviewer 자가 명료화** = PR #130 (hyemdooly *"정말정말 미안해요!!"*) 결의 *reviewer 자가 한계 인정* 어휘 강화. **MCP 룰 `reviewer-self-clarification-explicit` 후보** — *reviewer 가 자가 의도 명료화 + 학생 오해 발생 자가 인정*.
29
+
30
+ ### 2. 다형성 학습 = 딜러도 자가 비교 (학생 자가 코드 예시 + 4-5 라운드 양방향)
31
+
32
+ reviewer (Thread 10): *"공통점은 `내 카드의 점수가 상대방의 카드 점수보다 높다면 이긴다`. 차이점은 `bust 라는 로직에 대한 처리` 일겁니다. 이런 상황에서 다형성을 활용해볼 수 있습니다."*
33
+
34
+ reviewer 후속 (Thread 10): *"위 코멘트의 핵심은 - `딜러든 참가자든 상대방의 카드와 비교할 수 있어야 한다` - `참가자는 현재 추상클래스로 구현되어 있다` 가 포인트 입니다."*
35
+
36
+ 학생 자가 코드 예시 + 자가 의문:
37
+
38
+ > *"다음 코드와 같은 구조를 말씀하시는 것이라고 이해하면 될까요? (코드 예시) 현실 세계를 생각하면 플레이어와 딜러 모두 자신과 상대방을 비교해 승패를 판단할 수 있어야 하지만, 제가 기존에 `compareAgainst()` 함수를 `Player`에만 구현한 이유는 다음과 같습니다.*
39
+ > *- 플레이어의 승패가 결정되면 딜러의 승패 또한 자동적으로 결정된다.*
40
+ > *- 때문에 플레이어들의 결과를 재사용하면 '플레이어 vs 딜러'와 '딜러 vs 플레이어'를 따로 비교하는 반복을 피할 수 있다.*
41
+ > *제가 기존 로직에 너무 매몰돼있는 것인지, 딜러가 `compareAgainst()` 함수를 가진다고 해도 중복 비교를 피하면서 해당 함수를 사용할 방법이 생각나지 않네요 😥"*
42
+
43
+ reviewer 답변 (Thread 15):
44
+
45
+ > *"디렉의 말씀하신 부분 중 `결과를 재상하여 비교 반복을 피할 수 있다` 도 맞습니다. 다만, 객체 지향적으로 생각해보면, 딜러와 플레이어 모두 독립적인 객체로서 자신의 상태를 판단하고 다른 객체와의 관계를 비교할 수 있는 책임을 가져야 합니다.*
46
+ > *- 객체 간 책임 분리(딜러는 현재 스스로 승패를 판단할 수 없습니다)*
47
+ > *- 딜러가 플레이어 외 다른 대상과 비교해야 하는 상황이 생긴다면 어떤 수정사항이 필요로 되는가?*
48
+ > *현재 우리는 다형성을 학습하고 있어요. 물론 하나의 객체에 로직을 부여해 판단하는 방법이 틀린게 아닙니다. 다만 객체 지향 프로그래밍에서 다형성 을 통해 어떤 이점을 얻을 수 있을지 깊게 고민해보셔도 좋을거에요"*
49
+
50
+ 학생 자가 깨달음:
51
+
52
+ > *"비교 반복을 없에는 일에 한눈이 팔려서 학습 목표를 놓치고 있었네요 😅 지금처럼 딜러의 결과가 플레이어의 결과에 의존하는 방식은 말씀하신대로 비교해야 하는 상황이 더 복잡해졌을 때 대응하기 어려울 것 같습니다. 딜러 vs 플레이어 비교가 가능하도록 변경했습니다!"*
53
+
54
+ → **5 라운드 양방향 토론 + 학생 자가 코드 예시 + 학생 자가 학습 목표 회수 + 변경 가능성 의식**:
55
+
56
+ #### 2.1. *학생 자가 코드 예시 = 학습 시각화*
57
+
58
+ 학생이 *예시 코드 명시 + 자가 의문* = *PR #117·#129·#138 결의 *학생 자가 학습 가시화 정점* 강화*. **MCP 룰 `student-self-code-example-as-question` 후보**.
59
+
60
+ #### 2.2. *추상화 활용 점검 + 학습 목표 회수*
61
+
62
+ reviewer *"현재 우리는 다형성을 학습하고 있어요"* + 학생 *"학습 목표를 놓치고 있었네요"* = **MCP `oh-my-oop` 핵심 가치 (학습 의도 회수) 어휘**. PR #129 (KwonDae *"지금까지 추상화를 진행한 이유에 대해 고민해보시죠!"*) 결 강화.
63
+
64
+ #### 2.3. *변경 가능성 = 다형성의 이점*
65
+
66
+ reviewer *"딜러가 플레이어 외 다른 대상과 비교해야 하는 상황이 생긴다면"* = *변경 가능성 의식*. PR #126 (변경 가능성 = View 책임) 결과 같은 어휘 (*변경 가능성 = 다형성*).
67
+
68
+ **MCP 룰 `polymorphism-as-change-tolerance` 후보** — *다형성 = 변경 가능성 대응*.
69
+
70
+ ### 3. `tailrec` 키워드 자가 학습 + 적용
71
+
72
+ reviewer (Thread 16): *"이러한 반복되는 부분은 kotlin 의 tailrec 을 활용할 수 있는데요 어떤 기능을 하는지 한번 살펴보시고 적용가능한 부분들에 반영을 해볼까요?"*
73
+
74
+ 학생 자가 적용:
75
+
76
+ ```kotlin
77
+ tailrec fun processHits(deck: Deck, input: (Player) -> Action, output: (Player) -> Unit) {
78
+ if (!canHit()) return
79
+ if (input(this) == Action.STAND) {
80
+ if (openHand().size == Hand.STARTING_HAND_SIZE) output(this)
81
+ return
82
+ }
83
+ accept(deck.draw())
84
+ output(this)
85
+ processHits(deck, input, output)
86
+ }
87
+ ```
88
+
89
+ reviewer (Thread 20): *"재귀함수에 tailrec을 붙이는것에 대해 어떤 역할을 하는지도 꼭 짚어보고 넘어가시면 좋습니다 👍"*
90
+
91
+ 학생 자가 답변:
92
+
93
+ > *"함수의 마지막 줄이 재귀 호출로 끝날 경우 사용할 수 있고, 재귀를 `while` 문으로 변환해서 재귀 호출이 깊어져도 스택 오버플로우가 발생하지 않도록 방지해주는 기능으로 이해하고 있습니다. 바이트코드를 확인해보니 실제로 재귀 호출을 `while`로 바꿔주는 것이 신기하네요!"*
94
+
95
+ → **`tailrec` 자가 학습 + 바이트코드 확인** = *Kotlin 어휘 깊은 자가 학습 정점*. PR #138 (rosemin928 *tailrec 학습 권유*) 결의 *학생 자가 적용 (#138 학생은 적용 X / #142 학생은 적용 + 바이트코드 확인)* 진화.
96
+
97
+ **MCP 룰 `tailrec-optimization-applicability` 강화** 누적 2+ PR (#138·#142).
98
+
99
+ ### 4. `Result` → `GameResult` Kotlin stdlib 충돌 회피
100
+
101
+ reviewer (Thread 9):
102
+
103
+ > *"Kotlin 의 Result와 혼동이 될 수 있으니 보다 명시적인 네이밍으로 수정해볼까요?"*
104
+
105
+ 학생 자가 적용: `Result` → `GameResult`.
106
+
107
+ → **Kotlin stdlib 충돌 회피** = PR #130 (medAndro *Number vs kotlin.Number*) 결 강화. **MCP 룰 `class-name-vs-stdlib-collision` 강화** 누적 2+ PR (#130·#142).
108
+
109
+ ### 5. `Bet` (음수 X invariant) vs `Money` (음수 OK) — value class 분리
110
+
111
+ ```kotlin
112
+ class Bet(amount: Int) {
113
+ val amount = Money(amount)
114
+ init { require(this.amount >= Money(MIN_BET_AMOUNT)) { ... } }
115
+ }
116
+
117
+ @JvmInline
118
+ value class Money(val value: Int) {
119
+ operator fun compareTo(other: Money): Int = this.value.compareTo(other.value)
120
+ operator fun times(factor: Double): Money = Money((value * factor).toInt())
121
+ }
122
+ ```
123
+
124
+ → **`Bet` (invariant + Money 합성) vs `Money` (value class + operator)**:
125
+
126
+ 학생 자가 답변 (Thread 13):
127
+
128
+ > *"`Bet`은 음수가 될 수 없도록 했기 때문에 마이너스가 될 수 있는 `profit`은 별도의 `Money` 클래스에 포장해보았습니다!"*
129
+
130
+ → **invariant 다른 두 도메인 객체 = 별도 클래스 분리** = *PR #138 결의 *value class 단일 vs 도메인 invariant 분리* 트레이드오프 진화*.
131
+
132
+ #### 5.1. *2 가지 시점*
133
+
134
+ | 안 | 장점 | 단점 |
135
+ |---|---|---|
136
+ | `Money` 단일 + nullable invariant | *단일 value class* | *Bet 의 음수 X invariant 처리 외부* |
137
+ | `Bet` (Money 합성 + invariant) + `Money` (operator) | *각 도메인 invariant 명확* | *Bet ↔ Money 위임 ↑* |
138
+
139
+ **MCP 룰 `domain-specific-value-class-vs-shared` 후보** — *도메인 별 invariant = 별도 value class*.
140
+
141
+ ### 6. `operator fun compareTo` + `operator fun times` — Kotlin 어휘 자가 활용
142
+
143
+ ```kotlin
144
+ operator fun compareTo(other: Money): Int = this.value.compareTo(other.value)
145
+ operator fun times(factor: Double): Money = Money((value * factor).toInt())
146
+ ```
147
+
148
+ → **`compareTo` + `times` operator overloading**:
149
+
150
+ - `compareTo`: `bet.amount >= Money(MIN_BET_AMOUNT)` 가능.
151
+ - `times`: `bet.amount * profitRate` = Money 반환.
152
+
153
+ reviewer (Thread 19): *"연산자 오버로딩을 잘 활용해주셨네요 👍"*
154
+
155
+ → **Kotlin operator overloading 자가 활용** = PR #36 (`operator fun not()` GameResult 반전) 결 합류.
156
+
157
+ ### 7. 패키지 분리 (`participant/`, `card/`, `result/`)
158
+
159
+ reviewer (Thread 6·7): *"model 패키지 내부에서 participant 와 관련된 도메인은 따로 패키징이 가능할까요?"* + *"card 와 관련된 도메인은 별도로 묶어도 좋을 것 같습니다."*
160
+
161
+ 학생 자가 적용:
162
+ - `model/participant/` (Participant, Player, Dealer).
163
+ - `model/card/` (Card, Hand, Deck, Rank, Suit).
164
+ - `model/result/` (GameResult, Scoreboard).
165
+
166
+ → **도메인 별 패키지 분리** = PR #130 (medAndro PR 본문 자가 의문 *패키지 분리*) 결의 *시간 부족으로 미적용 → PR #142 학생 자가 적용 정공*.
167
+
168
+ **MCP 룰 `package-by-domain` 후보** — *도메인 별 패키지 분리*.
169
+
170
+ ### 8. `enum GameResult` 5 멤버 + cashOut 메서드
171
+
172
+ ```kotlin
173
+ enum class GameResult(private val profitRate: Double) {
174
+ WIN(1.0), LOSE(-1.0), PUSH(0.0),
175
+ BLACKJACK_WIN(0.5), BLACKJACK_LOSE(-0.5);
176
+
177
+ fun cashOut(player: Player): Money = (player.bet.amount * profitRate)
178
+ }
179
+ ```
180
+
181
+ → **블랙잭 5 결과 + 순수익 모델 (0.5 vs 1.5)** = *PR #35 (hyemdooly *순수익 모델 0.5*) 결 일관*. PR #36·#87·#138 (총 받음 모델 1.5) 와 *반대 시점*.
182
+
183
+ #### 8.1. *`BLACKJACK_LOSE(-0.5)` 멤버 = 도메인 정확성*
184
+
185
+ 학생 자가 적용 = *Thread 9 (1단계 학생 자가 답변)* 와 PR #130 (Thread 9 reviewer 블랙잭 룰 인용 *"딜러가 블랙잭이고 플레이어가 블랙잭이 아니지만 합이 21인 경우에도 딜러 승리"*) 결의 *학생 자가 도메인 학습 적용*.
186
+
187
+ **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 16+ PR ⭐⭐⭐.
188
+
189
+ #### 8.2. *`cashOut(player: Player)` 메서드 = enum 책임 강화*
190
+
191
+ `enum GameResult` 가 *결과 분류 + 수익 계산* 두 책임. **PR #138·#87·#35 결의 *enum 책임 강화* 어휘 합류**.
192
+
193
+ ### 9. `Scoreboard` 객체 분리 — Game god-object 회피
194
+
195
+ ```kotlin
196
+ class Scoreboard(val dealer: Dealer, val players: List<Player>) {
197
+ fun playersProfits(): Map<Player, Money> = ...
198
+ fun dealerProfit(players: List<Player>): Money = ...
199
+ }
200
+ ```
201
+
202
+ → **결과 통계 책임 분리** — *Game → Scoreboard 자가 이동*. reviewer (Thread 2·3·4) *상금 로직 Game ↔ Player 분산 → Result 응집* 권유 → 학생 자가 적용.
203
+
204
+ **MCP 룰 `result-aggregation-locator` 강화** 누적 2+ PR (#126·#142).
205
+
206
+ ### 10. 추가 칭찬
207
+
208
+ - Thread 18: *"중복 로직이 굉장히 많이 줄어들었네요 👍"*.
209
+ - Thread 19: *"연산자 오버로딩을 잘 활용해주셨네요 👍"*.
210
+ - 모든 20 스레드 학생 자가 답변 + commit SHA + 자가 코드 예시 2+ 회 (Thread 10, 11) = *학생 자가 학습 가시화 정점 유지*.
211
+
212
+ ## 못한 점 (설계 관점)
213
+
214
+ ### 1. `Player.lateinit var bet: Bet` + `placeBet()` 호출 강제 X — 호출 순서 invariant
215
+
216
+ ```kotlin
217
+ class Player(...) : Participant(name, cards) {
218
+ lateinit var bet: Bet
219
+ ...
220
+ fun placeBet(input: (Player) -> Bet) {
221
+ bet = input(this)
222
+ }
223
+ }
224
+ ```
225
+
226
+ → **`lateinit var bet` + `placeBet()` 호출 강제 X** = *PR #139 (parkjiminnnn *var betAmount + betting()*) 결과 같은 *호출 순서 invariant 부재* 패턴*.
227
+
228
+ 대안:
229
+ - `Player(name, cards, bet: Bet)` 생성자 인자 (PR #139 1차 안 자가 거절 후 PR #142 재발).
230
+ - `Player.startRound(bet: Bet): RoundPlayer` (Round 객체).
231
+
232
+ **MCP 룰 `lateinit-var-call-order-invariant` 강화** 누적 10+ PR.
233
+
234
+ ### 2. `Dealer.openInitialHand()` vs `Player.openInitialHand()` — 시그니처 동일 / 의미 차이
235
+
236
+ ```kotlin
237
+ // Participant
238
+ abstract fun openInitialHand(): List<Card>
239
+
240
+ // Player
241
+ override fun openInitialHand(): List<Card> = openHand() // 2장 전체
242
+
243
+ // Dealer
244
+ override fun openInitialHand(): List<Card> = openHand().take(INITIAL_OPEN_SIZE) // 1장만
245
+ ```
246
+
247
+ → **`openInitialHand` 추상화 정공** — reviewer (Thread 14) *2 가지 대안 비교*:
248
+
249
+ | 안 | 장점 | 단점 |
250
+ |---|---|---|
251
+ | 별도 추상화 (학생 자가 적용 `openInitialHand`) | *명시적 호출 의도 + 호출 시점 학생 자가 제어* | *비즈니스 로직 = 외부 호출자가 단계 알아야 함* |
252
+ | 딜러 지역변수 (`initialHandShown: Boolean`) | *외부에서 신경 안 씀 + 자가 상태 관리* | *가변 상태 + 호출 횟수 invariant 부재* |
253
+
254
+ 학생 자가 답변 (Thread 14):
255
+
256
+ > *"최초 오픈 시 별도의 `openInitialHand()` 함수를 사용하도록 변경해보았는데, 말씀하신 내용과 부합할까요? 지역변수로 관리하는 것에 비해 딜러의 행동을 보다 명시적으로 만들 수 있고, 추가적인 상태를 관리할 필요가 없어진다는 장점이 있을 것 같습니다."*
257
+
258
+ → **2 안 비교 + 학생 자가 선택**:
259
+
260
+ - **명시적 호출 + 상태 X (정공)** = *Tell-Don't-Ask 정공 + 호출자가 단계 알아야 함*.
261
+ - **지역변수 + 자가 상태 관리** = *상태 ↑ 위험 (PR #126 결 `initialHandShown` 안티패턴)*.
262
+
263
+ 학생의 선택 = *PR #126 결의 *상태 플래그 vs 도메인 상태 판단* 어휘 진화 + 정공 선택*. PR #126 1단계 reviewer 의 *지역변수 vs 도메인 상태* 의도가 *2단계에서 reviewer 자가 정정 (canHit() 시점 X)* 으로 진화.
264
+
265
+ #### 2.1. *학생 자가 의문 (Thread 11)*
266
+
267
+ > *"아하, 무슨 뜻인지 이해했습니다! 그런데 이렇게 된다면 딜러가 처음 뽑은 두 장이 16을 초과할 경우, `canHit()`가 `false`가 되어 처음부터 두 장을 보여줄 것 같은데 제가 놓치고 있는 것이 있을까요? 😵"*
268
+
269
+ reviewer 자가 정정 (Thread 14):
270
+
271
+ > *"맞습니다. 기존의 상태를 갖고 판단하게끔 설계하고 싶었지만 처음 뽑은 두장이 canHit() == false 가 될 상황이 생기겠네요."*
272
+
273
+ → **reviewer 가 1단계 권유 (canHit() 활용) 의 *경계 케이스 자가 발견* 후 자가 정정** = *PR #130 (hyemdooly *"정말정말 미안해요!!"*) 결과 같은 *reviewer 자가 한계 인정* 어휘 정점*.
274
+
275
+ **MCP 룰 `state-flag-vs-domain-state-judgement` 강화** 누적 2+ PR (#126·#142). *학생/reviewer 양방향 토론 진화*.
276
+
277
+ ### 3. Game ↔ OutputView 객체 자체 넘김 — 1단계 misunderstanding 자가 정정
278
+
279
+ Thread 1 §1 참조.
280
+
281
+ 학생 자가 적용 (PR #142 60a159d 커밋):
282
+
283
+ ```kotlin
284
+ // Game.showStatus
285
+ fun showStatus(output: (Participant) -> Unit) {
286
+ output(dealer)
287
+ players.forEach { player -> output(player) }
288
+ }
289
+ ```
290
+
291
+ → **`output: (Participant) -> Unit` 객체 자체 넘김** — *PR #126 1단계 `outputView.printParticipantStatus(participant)` 호출 vs PR #142 *Participant 객체 자체 넘기고 outputView 자가 출력* 진화*.
292
+
293
+ 다만 *Game.showStatus 도 `forEach` 보유* = *외부에서 iteration 안 함*. **MCP 룰 `iteration-locator-domain-vs-view` 후보** — *iteration 위치 = Domain (current 정공) vs View vs Controller*.
294
+
295
+ ### 4. 상금 로직 Game ↔ Player 분산 → Result/Scoreboard 응집
296
+
297
+ reviewer (Thread 2·3·4): *Game 비대 → Result 응집*.
298
+
299
+ 학생 자가 적용:
300
+ - `enum GameResult.cashOut(player)` = 결과 별 수익 계산.
301
+ - `Scoreboard.playersProfits / dealerProfit` = 통계.
302
+
303
+ → **god-object 회피 + 책임 응집** = PR #117·#129·#138·#126 결.
304
+
305
+ 다만 **Game 가 아직 다음 책임 보유**:
306
+ - 참가자 invariant (이름 중복 X / 딜러 이름 X).
307
+ - 베팅 단계 진행 (`processBets`).
308
+ - 카드 분배 (`processPlayersHits`, `processDealerHits`).
309
+ - 상태 출력 위임 (`showStatus`).
310
+
311
+ → *Game = 게임 진행 단계 책임 (controller-like) + Scoreboard = 결과 통계 책임*. **MCP 룰 `game-stages-vs-game-state` 후보**.
312
+
313
+ ### 5. `Player.compareAgainst(other)` super + 자식 확장 (PR #138 결과 같은 패턴)
314
+
315
+ ```kotlin
316
+ // Participant
317
+ open fun compareAgainst(other: Participant): GameResult { ... }
318
+
319
+ // Player
320
+ override fun compareAgainst(other: Participant): GameResult {
321
+ if (isBusted()) return GameResult.LOSE
322
+ if (other.isBusted()) return GameResult.WIN
323
+ return super.compareAgainst(other)
324
+ }
325
+
326
+ // Dealer
327
+ override fun compareAgainst(other: Participant): GameResult {
328
+ if (other.isBusted()) return GameResult.WIN
329
+ if (!isBlackJack() && other.isBlackJack()) return GameResult.BLACKJACK_LOSE
330
+ return super.compareAgainst(other)
331
+ }
332
+ ```
333
+
334
+ → **`super` 키워드 활용 = 공통 로직 + 자식 확장** = PR #138 (rosemin928 결과 같은 패턴). **MCP 룰 `super-keyword-for-shared-logic` 강화** 누적 2+ PR (#138·#142).
335
+
336
+ #### 5.1. *Dealer 의 `BLACKJACK_LOSE` 분기*
337
+
338
+ 블랙잭 표준 룰: *플레이어 21점 (3장 이상) vs 딜러 블랙잭 (2장 21점) = 딜러 승리*. PR #130 (medAndro Thread 9) 의 *블랙잭 룰 학생 자가 학습* → PR #142 (doabletuple) *학생 자가 적용 정공*.
339
+
340
+ 다만 **`BLACKJACK_LOSE = -0.5`** = *0.5배 손실 (0.5 환불)* 의미 양가:
341
+ - *블랙잭 패배 = 0.5배 추가 손실?*
342
+ - *블랙잭 패배 = 베팅의 0.5배만 잃음?*
343
+
344
+ 학생 코드 `GameResult.BLACKJACK_LOSE(-0.5)` = *Player 베팅 × -0.5 = Player -0.5 베팅 손실* = *Dealer +0.5 베팅 수익*. **블랙잭 표준 룰과 양가** — 표준은 *Player Bust + Dealer Bust = Player Lose 베팅 전부* / *블랙잭 vs 일반 = 베팅 전부 손실*.
345
+
346
+ **MCP 룰 `blackjack-payout-vs-profit-model` 강화** 누적 2+ PR (#35·#142).
347
+
348
+ ### 6. `lateinit var bet` Player 호출 강제 X — §1 참조
349
+
350
+ ### 7. 카드덱 효율 사용 — companion lazy + shuffled() 재호출
351
+
352
+ reviewer (Thread 17):
353
+
354
+ > *"현재 Suit, Rank를 조합하여 카드를 생성하고 있는데요. 플레잉카드는 정해진 모양과 숫자를 조합해 만들어지는데 카드덱에 있는 카드를 모두 사용하여 새로 추가를 해줘야 할 때, 다시. 카드 인스턴스를 모두 생성해주어야 할까요? 효율적으로 할 수 있는 방법이 있을까요?"*
355
+
356
+ 학생: *"`companion object`에서 만들어두면 카드를 추가할 때 새로운 인스턴스가 만들어지지 않는다고 생각했는데, 제가 잘못 이해하고 있었던 것 같네요 😅 해당 부분을 더 공부해보고 적용하도록 하겠습니다 🙏"*
357
+
358
+ reviewer 후속:
359
+
360
+ > *"밑에 `Pack` 과 `cards` 키워드를 제가 헷갈린거 같네요 🥲*
361
+ > *처음엔 **suffled 된 카드 자체를 캐싱**하자는 의도를 갖고 코멘트를 남겼었지만, 현실 세계에 도입해보면 과할 수 있겠다는 생각이 한편으로는 드네요 ㅎㅎ..*
362
+ > *말씀주신 것 처럼 기존에 companion object로 선언된 `pack` 으로 캐싱 처리를 잘 해주셨어요. 다만, 카드가 부족할 때 부족한 카드덱으로 다시 shuffled() 를 진행하는것에 대해 이야기를 하고 싶었는데 잘 수정해주셨네요 💯"*
363
+
364
+ → **reviewer 가 자가 혼동 + 학생이 *이미 적절히 구현* 인정** = *PR #130 결의 *reviewer 자가 한계 인정* 어휘 강화*.
365
+
366
+ **MCP 룰 `reviewer-self-confusion-explicit` 후보** — *reviewer 가 자가 코드 읽기 혼동 명시*.
367
+
368
+ ### 8. 모델 → View 에러 메시지 위치 자가 의문
369
+
370
+ reviewer (Thread 5): *"이또한 outputView로 다시 이사를 해야겠네요 😂"* (학생 도메인 안에 String 메시지)
371
+
372
+ 학생: *"앗, `Model`이 던지는 에러 메시지의 상수도 `OutputView`가 가지고 있는 것이 좋다고 이해하면 될까요?"*
373
+
374
+ reviewer (Thread 12) 자가 정정: *"에러에 관련된 문구였군요 ㅎㅎ 😂 위 상수는 Model에 위치하는게 맞습니다! 👍"*
375
+
376
+ → **에러 메시지 = Model 위치 OK + reviewer 자가 정정** = *PR #126 (Verdict 문자열 = View 책임) 결과 *에러 메시지 = Model OK* 반대 시점 (변경 가능성 vs invariant 검증 어휘 차이)*.
377
+
378
+ #### 8.1. *에러 메시지 vs UI 메시지 구분*
379
+
380
+ - **에러 메시지 (Model)**: *invariant 검증 + 도메인 의미*.
381
+ - **UI 메시지 (View)**: *출력 + 사용자 표현*.
382
+
383
+ PR #126 (Verdict 출력 문자열 = View) vs PR #142 (Bet 에러 메시지 = Model) **반대 시점 = 차이 명시**.
384
+
385
+ **MCP 룰 `model-error-vs-view-message-locator` 후보** — *에러 메시지 vs UI 메시지 위치 구분*.
386
+
387
+ ### 9. `Bet.MIN_BET_AMOUNT = 0` — 0 의미 부여
388
+
389
+ ```kotlin
390
+ companion object {
391
+ private const val MIN_BET_AMOUNT = 0
392
+ private const val ERROR_MESSAGE_BET_NOT_POSITIVE = "베팅 금액은 ${MIN_BET_AMOUNT}보다 작을 수 없습니다."
393
+ }
394
+ ```
395
+
396
+ reviewer (Thread 8): *"0 이라는 금액도 상수를 통해 의미를 부여할 수 있을거에요"*
397
+
398
+ 학생 자가 적용.
399
+
400
+ → **매직 넘버 (0) → 상수 명명** = PR #117 (16 매직 넘버) 결 합류. **MCP 룰 `magic-number-zero-as-named-constant` 후보**.
401
+
402
+ 다만 **`MIN_BET_AMOUNT = 0` + `require(amount >= Money(0))`** = *베팅 0원 가능* 의미. *블랙잭 표준 = 최소 베팅 ≥ $5* (PR #138 결의 *1000원* vs PR #142 *0원* 양가).
403
+
404
+ PR #138·#129 결의 *블랙잭 베팅 최소 1000원* 와 *반대 시점*. **블랙잭 도메인 룰 양가성 = 임의 도메인 상수**.
405
+
406
+ **MCP 룰 `domain-rule-arbitrary-constant` 강화** 누적 3+ PR (#138·#35·#142).
407
+
408
+ ### 10. `Player(name, cards)` + 부생성자 2개 (vararg) — 테스트 fixture 의도
409
+
410
+ ```kotlin
411
+ class Player(name: String, cards: List<Card>) : Participant(name, cards) {
412
+ lateinit var bet: Bet
413
+
414
+ constructor(name: String, vararg cards: Card) : this(name, cards.toList())
415
+ constructor(name: String, betAmount: Int, vararg cards: Card) : this(name, cards.toList()) {
416
+ this.bet = Bet(betAmount)
417
+ }
418
+ ...
419
+ }
420
+ ```
421
+
422
+ → **부생성자 2개 (vararg)** = PR #126·#130 (test-fixture-secondary-constructor) 결 강화 누적 3+ PR.
423
+
424
+ 다만 **부생성자 2번째 가 `this.bet = Bet(betAmount)` lateinit 즉시 초기화** = *호출 순서 invariant 회피 가능 (테스트 한정)*.
425
+
426
+ ### 11. `Player.placeBet(input: (Player) -> Bet)` — 람다 인자 = View 결합
427
+
428
+ ```kotlin
429
+ fun placeBet(input: (Player) -> Bet) {
430
+ bet = input(this)
431
+ }
432
+ ```
433
+
434
+ → **`(Player) -> Bet` 람다 인자 = View 호출 람다** = PR #36·#129·#138 (callback-lambda-view-cost) 결.
435
+
436
+ 대안: `Player.setBet(bet: Bet)` — *Player 가 *bet 객체 받음* + Controller 가 View 호출 + Player.setBet 호출*. **MCP 룰 `callback-lambda-vs-direct-setter` 후보**.
437
+
438
+ ### 12. `processBets` `processPlayersHits` `processDealerHits` `showStatus` — Game 의 행동 메서드 4개
439
+
440
+ §4 참조. Game = 게임 진행 단계 책임 다수.
441
+
442
+ ### 13. `Dealer.processHits(deck, output: (Dealer, Int) -> Unit)` — output 인자 `(Dealer, Int)`
443
+
444
+ ```kotlin
445
+ tailrec fun processHits(deck: Deck, output: (Dealer, Int) -> Unit) {
446
+ if (!canHit()) return
447
+ output(this, HIT_THRESHOLD)
448
+ accept(deck.draw())
449
+ processHits(deck, output)
450
+ }
451
+ ```
452
+
453
+ → **`(Dealer, Int) -> Unit` 람다 인자 = Dealer 객체 + HIT_THRESHOLD 정수 둘 다 외부 전달** = *PR #36 결의 *Tuple 누수* 변형*.
454
+
455
+ 대안: `output(this)` 만 (View 가 Dealer 의 hit 한계 직접 호출). **MCP 룰 `lambda-multiple-args-tuple-leak` 후보**.
456
+
457
+ ### 14. `Scoreboard.dealerProfit(players: List<Player>)` — players 외부 인자 받음
458
+
459
+ ```kotlin
460
+ fun dealerProfit(players: List<Player>): Money {
461
+ return Money(players.sumOf { player -> dealer.compareAgainst(player).cashOut(player).value })
462
+ }
463
+ ```
464
+
465
+ → **`players` 외부 인자 받음** = *Scoreboard 가 이미 `players` 멤버 보유 (constructor)* → *중복 인자*. **MCP 룰 `redundant-parameter-vs-member` 후보**.
466
+
467
+ 대안:
468
+ ```kotlin
469
+ fun dealerProfit(): Money {
470
+ return Money(players.sumOf { player -> dealer.compareAgainst(player).cashOut(player).value })
471
+ }
472
+ ```
473
+
474
+ ### 15. `Game(deck, dealer, players)` 생성자 (3 변수) — 형식 규칙 vs 도메인 정합
475
+
476
+ ```kotlin
477
+ class Game(
478
+ private val deck: Deck,
479
+ val dealer: Dealer,
480
+ val players: List<Player>,
481
+ ) { ... }
482
+ ```
483
+
484
+ → **3 변수** = *형식 규칙 위반*. 다만 *deck + dealer + players = 도메인 정합 (블랙잭 게임 3 구성요소)* = *형식 규칙 위반 무의미*.
485
+
486
+ PR #138 (rosemin928 *형식 규칙 vs 도메인 의미 자가 의문*) 결의 *학생 자가 정공 선택* 일관.
487
+
488
+ ### 16. `Game.players: List<Player>` (Participants 일급 컬렉션 X)
489
+
490
+ ```kotlin
491
+ class Game(... val players: List<Player>)
492
+ ```
493
+
494
+ → **`List<Player>` 노출 (1단계 #126 `Participants` 일급 컬렉션 → 2단계 #142 *Game.players: List<Player>* 노출 회귀)** = *Participants 객체 제거 + Game 가 players 직접 보유*.
495
+
496
+ **MCP 룰 `first-class-collection-regression` 후보** — *1단계 일급 컬렉션 → 2단계 노출 회귀*.
497
+
498
+ 다만 **Game 이 Participants 책임 흡수** = *책임 통합 시점* — PR #138 (rosemin928 *BlackJackTable 자가 제거*) 결의 *형식 규칙 부산물 제거* 어휘 일관.
499
+
500
+ ### 17. `Money operator times(factor: Double)` `(value * factor).toInt()` 정밀도 손실
501
+
502
+ ```kotlin
503
+ operator fun times(factor: Double): Money = Money((value * factor).toInt())
504
+ ```
505
+
506
+ → **`Double * Int → Double → toInt()`** = *소수점 손실*. *블랙잭 1.5배 = 100 × 1.5 = 150 (정공) / 100 × 0.5 = 50 (정공)* → *현재 안 OK*.
507
+
508
+ 다만 **`factor: Double` 인자 받음** = *임의 비율 가능* = *블랙잭 도메인 5 멤버 한정 X*. **MCP 룰 `times-factor-overflow-risk` 후보**.
509
+
510
+ ### 18. `Player.compareAgainst(other)` `super` 호출 — Dealer 의 BLACKJACK_LOSE 처리 X
511
+
512
+ ```kotlin
513
+ // Player
514
+ override fun compareAgainst(other: Participant): GameResult {
515
+ if (isBusted()) return GameResult.LOSE
516
+ if (other.isBusted()) return GameResult.WIN
517
+ return super.compareAgainst(other)
518
+ }
519
+ ```
520
+
521
+ → **Player 시점 BLACKJACK_LOSE 처리 X** = *super 가 PUSH/BLACKJACK_WIN/WIN/LOSE/PUSH 만 반환 → Player 의 BLACKJACK_LOSE 케이스 미처리*.
522
+
523
+ 학생 코드의 *Dealer.compareAgainst* 만 `BLACKJACK_LOSE` 분기. *Scoreboard.playersProfits = player.compareAgainst(dealer) 호출* → *Player 시점 → BLACKJACK_LOSE 결과 안 나옴*.
524
+
525
+ **대칭 깨짐** — *Player 결과 vs Dealer 결과 = 대칭 (부호 반전) 아님*.
526
+
527
+ #### 18.1. *Scoreboard 의 결과 호출*
528
+
529
+ ```kotlin
530
+ fun playersProfits(): Map<Player, Money> =
531
+ players.associateWith { player -> player.compareAgainst(dealer).cashOut(player) }
532
+
533
+ fun dealerProfit(players: List<Player>): Money =
534
+ Money(players.sumOf { player -> dealer.compareAgainst(player).cashOut(player).value })
535
+ ```
536
+
537
+ → **Player.compareAgainst(dealer) + Dealer.compareAgainst(player) 둘 다 호출** = *반복 비교*. *PR #142 (학생 자가 인지 + reviewer 권유 정공)*.
538
+
539
+ 다만 **결과 호출 양쪽 = 중복 평가 비용 + 도메인 일관성 유지 어려움**:
540
+ - Player.compareAgainst(dealer) 시 isBlackJack 분기.
541
+ - Dealer.compareAgainst(player) 시 BLACKJACK_LOSE 분기.
542
+
543
+ → **각 시점 별 BLACKJACK 분기 양가** = *PR #87·#36 결의 *symmetric-getResult vs compareWith* 어휘 합류 + 진화*.
544
+
545
+ **MCP 룰 `symmetric-compare-bidirectional-call` 후보** — *양쪽 객체 모두 자가 비교 = 중복 평가*.
546
+
547
+ ### 19. `Hand.STARTING_HAND_SIZE` 상수 — companion object
548
+
549
+ ```kotlin
550
+ // in Hand (가정)
551
+ companion object { const val STARTING_HAND_SIZE = 2 }
552
+
553
+ // in Player.processHits
554
+ if (openHand().size == Hand.STARTING_HAND_SIZE) output(this)
555
+ ```
556
+
557
+ → **`Hand.STARTING_HAND_SIZE` 상수 외부 접근** = *도메인 룰 (초기 2장) Hand 에 위치 정공*. PR #130 (medAndro *초기 카드 장수 = 도메인 상수*) 결 강화.
558
+
559
+ ### 20. `Bet ↔ Money` 합성 + Bet 미인스턴스 시 lateinit 의존
560
+
561
+ ```kotlin
562
+ class Bet(amount: Int) {
563
+ val amount = Money(amount)
564
+ ...
565
+ }
566
+ ```
567
+
568
+ → **Bet 합성: Bet 객체 안에 Money 객체** = *2 단계 위임 (`bet.amount.value`)*. PR #87 (디미터 법칙) 결의 *깊이 위반 가능*.
569
+
570
+ 대안: `Bet(value: Int) extends Money` 또는 *Bet 이 Money 멤버 X + Money invariant 강화*. **MCP 룰 `composition-vs-extension-tradeoff` 후보**.
571
+
572
+ ## 리뷰어 의견 요지
573
+
574
+ - **1단계 misunderstanding 자가 정정 + 양방향 사과** — *reviewer 자가 명료화 + 학생 자가 사과*.
575
+ - **다형성 학습 = 딜러도 자가 비교** — *학생 자가 코드 예시 + 5 라운드 양방향*.
576
+ - **`tailrec` Kotlin 어휘 자가 학습 + 바이트코드 확인**.
577
+ - **`Result` Kotlin stdlib 충돌 → `GameResult`** — 누적 2 PR.
578
+ - **`Bet` (음수 X) vs `Money` (음수 OK) 분리 + value class**.
579
+ - **operator overloading 활용 (compareTo, times)** — 칭찬.
580
+ - **패키지 분리 (participant/card/result)**.
581
+ - **상금 로직 Game ↔ Player 분산 → Result 응집** + **Scoreboard 객체 생성**.
582
+ - **`openInitialHand` 별도 추상화 vs 지역변수 (reviewer 자가 정정)**.
583
+ - **에러 메시지 = Model 위치 OK (reviewer 자가 정정)**.
584
+ - **`0` 매직 넘버 → MIN_BET_AMOUNT 상수**.
585
+ - **카드덱 효율 = companion + shuffled() (reviewer 자가 혼동 + 학생 정공)**.
586
+ - **수정 후 칭찬** — *중복 로직 줄어듦 + 연산자 오버로딩*.
587
+
588
+ ## 대표 인용
589
+
590
+ > [KwonDae Thread 1]
591
+ > *"잘 구현해주셨습니다 👍 다만 제가 혼란을 드린 것 같아 죄송하네요.. 🥲 코멘트의 의도는 Controller에서 데이터를 꺼내 OutputView로 개별로 전달하는 것에 대한 이야기였습니다. (...) 명확하지 못한 코멘트가 view 관련 함수가 domain으로 들어오게 하는 혼란을 야기한것 같네요. 보다 명확하게 전달드릴 수 있도록 하겠습니다 🙇‍♂️"*
592
+
593
+ → **reviewer 자가 의도 명료화 + 자가 사과** — **MCP 핵심 가치 정점**. PR #130 강화.
594
+
595
+ > [doabletuple Thread 1]
596
+ > *"제가 완전히 잘못 이해하고 있었네요 😭 헷갈리는 부분은 바로 질문을 드렸어야 하는데, 뒤늦게 여쭤봐서 죄송합니다 🙇‍♂️"*
597
+
598
+ → **양방향 자가 사과** — *학습 가시화*.
599
+
600
+ > [KwonDae Thread 15]
601
+ > *"현재 우리는 다형성을 학습하고 있어요. 물론 하나의 객체에 로직을 부여해 판단하는 방법이 틀린게 아닙니다. 다만 객체 지향 프로그래밍에서 다형성 을 통해 어떤 이점을 얻을 수 있을지 깊게 고민해보셔도 좋을거에요"*
602
+
603
+ → **학습 목표 회수 어휘** — *MCP `oh-my-oop` 핵심 가치 (학습 의도 회수)*.
604
+
605
+ > [doabletuple Thread 15]
606
+ > *"비교 반복을 없에는 일에 한눈이 팔려서 학습 목표를 놓치고 있었네요 😅"*
607
+
608
+ → **학생 자가 학습 목표 회수**.
609
+
610
+ > [KwonDae Thread 14]
611
+ > *"맞습니다. 기존의 상태를 갖고 판단하게끔 설계하고 싶었지만 처음 뽑은 두장이 canHit() == false 가 될 상황이 생기겠네요."*
612
+
613
+ → **reviewer 자가 경계 케이스 인정**.
614
+
615
+ > [doabletuple Thread 20]
616
+ > *"함수의 마지막 줄이 재귀 호출로 끝날 경우 사용할 수 있고, 재귀를 `while` 문으로 변환해서 재귀 호출이 깊어져도 스택 오버플로우가 발생하지 않도록 방지해주는 기능으로 이해하고 있습니다. 바이트코드를 확인해보니 실제로 재귀 호출을 `while`로 바꿔주는 것이 신기하네요!"*
617
+
618
+ → **tailrec 자가 학습 + 바이트코드 확인** — *학생 자가 학습 깊이 정점*.
619
+
620
+ > [KwonDae Thread 17]
621
+ > *"밑에 `Pack` 과 `cards` 키워드를 제가 헷갈린거 같네요 🥲 (...) 말씀주신 것 처럼 기존에 companion object로 선언된 `pack` 으로 캐싱 처리를 잘 해주셨어요."*
622
+
623
+ → **reviewer 자가 혼동 명시 + 학생 정공 인정**.
624
+
625
+ ## 얻은 교훈 (보편)
626
+
627
+ 1. **reviewer 자가 의도 명료화 + 자가 사과 (Thread 1)** — *PR #130 결의 *reviewer 자가 한계 인정* 강화*. **MCP 룰 `reviewer-self-clarification-explicit` 후보**.
628
+
629
+ 2. **양방향 자가 사과 + 학생 자가 *바로 질문* 후회** — *학습 가시화 정점*.
630
+
631
+ 3. **다형성 학습 = 변경 가능성 대응** — *학습 목표 회수 어휘*. **MCP 룰 `polymorphism-as-change-tolerance` 후보**.
632
+
633
+ 4. **학생 자가 코드 예시 + 자가 의문 (Thread 10)** — *학습 가시화 정점*. **MCP 룰 `student-self-code-example-as-question` 후보**.
634
+
635
+ 5. **`tailrec` 자가 학습 + 바이트코드 확인** — *Kotlin 어휘 깊은 자가 학습*. **MCP 룰 `tailrec-optimization-applicability` 강화** 누적 2+ PR.
636
+
637
+ 6. **Kotlin stdlib 충돌 (Result/Number)** — **MCP 룰 `class-name-vs-stdlib-collision` 강화** 누적 2+ PR.
638
+
639
+ 7. **`Bet` (invariant) vs `Money` (operator) 분리** — *도메인 별 invariant = 별도 value class*. **MCP 룰 `domain-specific-value-class-vs-shared` 후보**.
640
+
641
+ 8. **패키지 분리 (도메인 별)** — **MCP 룰 `package-by-domain` 후보**.
642
+
643
+ 9. **`openInitialHand` 별도 추상화 vs 지역변수 (reviewer 자가 정정)** — **MCP 룰 `state-flag-vs-domain-state-judgement` 강화** 누적 2+ PR.
644
+
645
+ 10. **에러 메시지 = Model 위치 OK (변경 가능성 vs invariant 검증 어휘 차이)** — *PR #126 (Verdict 출력 = View) 반대 시점*. **MCP 룰 `model-error-vs-view-message-locator` 후보**.
646
+
647
+ 11. **카드덱 효율 = companion + shuffled() (reviewer 자가 혼동)** — **MCP 룰 `reviewer-self-confusion-explicit` 후보**.
648
+
649
+ 12. **`super` 키워드 = 공통 로직 + 자식 확장** — **MCP 룰 `super-keyword-for-shared-logic` 강화** 누적 2+ PR (#138·#142).
650
+
651
+ 13. **`lateinit var bet` 호출 순서 invariant (PR #139 재발)** — **MCP 룰 `lateinit-var-call-order-invariant` 강화** 누적 10+ PR.
652
+
653
+ 14. **양쪽 객체 자가 비교 + 중복 평가** — *symmetric-compare-bidirectional-call*. **MCP 룰 후보**.
654
+
655
+ 15. **0 매직 넘버 → 상수 명명** — **MCP 룰 `magic-number-zero-as-named-constant` 후보**.
656
+
657
+ 16. **`callback 람다` vs `setter` 트레이드오프** — **MCP 룰 `callback-lambda-vs-direct-setter` 후보**.
658
+
659
+ 17. **iteration 위치 = Domain vs View vs Controller** — **MCP 룰 `iteration-locator-domain-vs-view` 후보**.
660
+
661
+ 18. **부생성자 + lateinit 즉시 초기화 (테스트 fixture)** — **MCP 룰 `test-fixture-secondary-constructor` 강화** 누적 3+ PR.
662
+
663
+ 19. **블랙잭 0.5 vs 1.5 모델 (PR #35·#142 0.5 모델 = 누적 2+ PR)** — **MCP 룰 `blackjack-payout-vs-profit-model` 강화**.
664
+
665
+ 20. **블랙잭 5 멤버 (WIN/LOSE/PUSH/BLACKJACK_WIN/BLACKJACK_LOSE)** — *PR #130 학생 자가 학습 → PR #142 자가 적용 (1단계 → 2단계 학습 시간성)*.
666
+
667
+ 21. **모든 20 스레드 학생 자가 답변 + commit SHA + 자가 코드 예시 2+ 회** — *2025 코호트 정점 유지*.
668
+
669
+ ## 얻은 교훈 (도메인)
670
+
671
+ 1. **블랙잭 5 결과 (WIN/LOSE/PUSH/BLACKJACK_WIN/BLACKJACK_LOSE)** — *PR #130 1단계 자가 학습 → PR #142 2단계 자가 적용*.
672
+
673
+ 2. **블랙잭 0.5 모델 (순수익)** = *PR #35 결*.
674
+
675
+ 3. **Dealer canHit = `<= 16` 정공** — PR #126·#138 결.
676
+
677
+ 4. **블랙잭 = 초기 2장 + 21점 = isBlackJack** = PR #130·#138·#126 결.
678
+
679
+ 5. **`tailrec` Kotlin 어휘 + 바이트코드** — 학생 자가 학습 정점.
680
+
681
+ 6. **Bet 0원 가능 (`MIN_BET_AMOUNT = 0`)** — *PR #138 (1000원) / PR #129 (1원) 와 양가 = 임의 도메인 상수*.
682
+
683
+ 7. **카드덱 caching (companion pack) + shuffled() 재호출** — *카드 부족 시 재 shuffled*.
684
+
685
+ ## MCP 룰 후보 신규 + 강화 (PR #142)
686
+
687
+ | 룰 | 신규 / 강화 | 누적 PR |
688
+ |---|---|---|
689
+ | `reviewer-self-clarification-explicit` | 신규 | 1 (#142) |
690
+ | `polymorphism-as-change-tolerance` | 신규 | 1 (#142) |
691
+ | `student-self-code-example-as-question` | 신규 | 1 (#142) |
692
+ | `tailrec-optimization-applicability` | 강화 | 2+ (#138·#142) |
693
+ | `class-name-vs-stdlib-collision` | 강화 | 2+ (#130·#142) |
694
+ | `domain-specific-value-class-vs-shared` | 신규 | 1 (#142) |
695
+ | `package-by-domain` | 신규 | 1 (#142) |
696
+ | `state-flag-vs-domain-state-judgement` | 강화 | 2+ (#126·#142) |
697
+ | `model-error-vs-view-message-locator` | 신규 | 1 (#142) |
698
+ | `reviewer-self-confusion-explicit` | 신규 | 1 (#142) |
699
+ | `super-keyword-for-shared-logic` | 강화 | 2+ (#138·#142) |
700
+ | `lateinit-var-call-order-invariant` | 강화 | 10+ |
701
+ | `symmetric-compare-bidirectional-call` | 신규 | 1 (#142) |
702
+ | `magic-number-zero-as-named-constant` | 신규 | 1 (#142) |
703
+ | `callback-lambda-vs-direct-setter` | 신규 | 1 (#142) |
704
+ | `iteration-locator-domain-vs-view` | 신규 | 1 (#142) |
705
+ | `test-fixture-secondary-constructor` | 강화 | 3+ |
706
+ | `blackjack-payout-vs-profit-model` | 강화 | 2+ (#35·#142) |
707
+ | `blackjack-rule-fidelity-comparison` | 강화 | 16+ ⭐⭐⭐ |
708
+ | `domain-rule-arbitrary-constant` | 강화 | 3+ |
709
+ | `first-class-collection-regression` | 신규 | 1 (#142) |
710
+ | `times-factor-overflow-risk` | 신규 | 1 (#142) |
711
+ | `composition-vs-extension-tradeoff` | 신규 | 1 (#142) |
712
+ | `lambda-multiple-args-tuple-leak` | 신규 | 1 (#142) |
713
+ | `redundant-parameter-vs-member` | 신규 | 1 (#142) |
714
+ | `game-stages-vs-game-state` | 신규 | 1 (#142) |
715
+ | `result-aggregation-locator` | 강화 | 2+ (#126·#142) |
716
+
717
+ ## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
718
+
719
+ - ***reviewer 자가 의도 명료화 + 자가 사과*** — KwonDae PR #142 — *"제가 혼란을 드린 것 같아 죄송하네요.. 🥲"* — *PR #130 (hyemdooly *"정말정말 미안해요!!"*) 결 강화*.
720
+ - ***학습 목표 회수 어휘*** — KwonDae PR #142 — *"현재 우리는 다형성을 학습하고 있어요. (...) 어떤 이점을 얻을 수 있을지 깊게 고민해보셔도 좋을거에요"*.
721
+ - ***학생 자가 학습 목표 회수*** — doabletuple PR #142 — *"비교 반복을 없에는 일에 한눈이 팔려서 학습 목표를 놓치고 있었네요"*.
722
+ - ***학생 자가 코드 예시 + 자가 의문*** — doabletuple PR #142 — *학습 가시화 정점*.
723
+ - ***reviewer 자가 경계 케이스 인정*** — KwonDae PR #142 — *"맞습니다. 기존의 상태를 갖고 판단하게끔 설계하고 싶었지만 처음 뽑은 두장이 canHit() == false 가 될 상황이 생기겠네요."*.
724
+ - ***`tailrec` 자가 학습 + 바이트코드 확인*** — doabletuple PR #142 — *Kotlin 어휘 깊은 자가 학습 정점*.
725
+ - ***reviewer 자가 혼동 명시*** — KwonDae PR #142 — *"`Pack` 과 `cards` 키워드를 제가 헷갈린거 같네요 🥲"*.
726
+
727
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **batch 21 신규 발견 = *학생 자가 코드 예시 + 자가 의문 + reviewer 자가 정정 4 자리*** (Thread 1·11·14·17) = **양방향 토론 깊이 정점**.
728
+
729
+ ## 비교 (PR #126 → #142 진화 — 사족 X, 안티패턴 명시만)
730
+
731
+ - **1단계 #126 18 thread → 2단계 #142 20 thread** — *깊이 유지*.
732
+ - **1단계 #126 Verdict 출력 문자열 = View 책임 → 2단계 #142 GameResult enum 책임 강화 + cashOut 메서드** — *학습 시간성 정공*.
733
+ - **1단계 #126 `var initialHandShown` 가변 상태 → 2단계 #142 `openInitialHand` 별도 추상화 (학생 자가 정공 선택)** — *학습 시간성 정공*.
734
+ - **1단계 #126 Participants 일급 컬렉션 → 2단계 #142 Game.players: List<Player> 노출 회귀** — *Participants → Game 책임 통합*.
735
+ - **1단계 #126 Result enum → 2단계 #142 GameResult enum (Kotlin stdlib 충돌 자가 정정)** — *학습 시간성 정공*.
736
+ - **1단계 #126 카드 N장 공개 추상화 (`showHand`) → 2단계 #142 별도 `openInitialHand` 추상화 추가** — *추상화 진화*.
737
+ - **1단계 #126 학생 자가 4 안 분석 (`list`/`all`) → 2단계 #142 학생 자가 코드 예시 (Thread 10)** — *학생 자가 학습 가시화 진화*.
738
+
739
+ → *진화 비교 = 사족 아님* + *학생 자가 학습 정점 진화 + reviewer 자가 한계 인정 어휘 합류*.