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,678 @@
1
+ # PR #143 — [블랙잭 2단계] 메다 미션
2
+
3
+ - **Reviewee:** [@medAndro](https://github.com/medAndro)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/143
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@hyemdooly](https://github.com/hyemdooly) (둘리) — 1단계 #130 동일 reviewer (학생 → reviewer 진화 2번째 사례)
7
+ - **라인 코멘트:** 19 스레드 — *PR 본문 자가 의문 + 페어 학습 인용 + 슬랙 페토 글 인용 + `-0.0` Float IEEE 754 함정 자가 학습 (PR #131 결 재발견) + 3 인스턴스 변수 제약 학생 자가 비판 + *원래 그리던 꿈을 펼쳐볼까* 어휘 + custom get vs function 학생 자가 4 분류 + HandCards 승패 판단 + BetAmount.profit + Dealer 합산 (책임 분리) + ProfitRate enum + Profit value class*
8
+ - **양 단계 완성 reviewee** (1단계 #130 batch 20 분석 완료 + 2단계 #143 = batch 21 추가).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 의문 + 페어 학습 + 슬랙 페토 글 인용
13
+
14
+ PR 본문:
15
+
16
+ > *"step1 피드백 반영할 수 있는 부분은 반영하고 step1 코멘트에 남긴 의문점들도 아직 남아있어서 반영되지 않은 부분도 있는데 답글 달아주시는대로 공부하며 리팩터링 해봐야겠습니다.*
17
+ >
18
+ > *Step2를 일단 기능을 빠르게 구현 완료하긴 했는데 의식의 흐름대로 짜서 이게 맞나 싶기도 한 코드가 된 것 같네요*
19
+ >
20
+ > *`3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.`를 지키기 위해서 BetHistory를 따로 두었으며*
21
+ > *`ProfitStatistics`에서 일단 getter를 써서 구현해 보았는데 언제 함수를 쓰고 언제 getter를 쓰는지는 슬랙의 페토의 글을 보고 주말에 공부좀 해봐야 될 것 같습니다.*
22
+ >
23
+ > *오늘 직접 방문해주셔서 이야기 나눌수 있어서 좋았어요 :)"*
24
+
25
+ → **학생 자가 학습 정점**:
26
+ - *step1 의문점 미해결 자가 인정* — *학습 시간성*.
27
+ - *의식의 흐름 코드 자가 인정* — *학습 한계 인정* (PR #139 *진흙탕 코드* 결).
28
+ - *3 인스턴스 변수 제약 명시* — *형식 규칙 인지*.
29
+ - *슬랙 페토 글 인용* — *외부 자료 자가 학습*.
30
+ - *직접 방문 reviewer 만남* — *오프라인 페어 학습*.
31
+
32
+ **MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘 정점**. PR #130 학생 자가 한계 4 종 인정 → PR #143 자가 한계 + 외부 자료 + 오프라인 만남 (4 자리). 누적 5+ PR 학생 자가 한계 인정.
33
+
34
+ ### 2. `BetAmount` (value class + invariant) + `Profit` (value class + Double) + `ProfitRate` (enum + calculate) — 책임 분리
35
+
36
+ ```kotlin
37
+ @JvmInline value class BetAmount(val value: Int) {
38
+ init { require(value > MINIMUM_BET_AMOUNT) { ... } }
39
+ fun calculateProfit(profitRate: ProfitRate): Profit = Profit(profitRate.value * value)
40
+ }
41
+
42
+ @JvmInline value class Profit(val value: Double)
43
+
44
+ enum class ProfitRate(val value: Double) {
45
+ BLACKJACK_WIN(1.5), NORMAL_WIN(1.0), DRAW(0.0), LOSE(-1.0);
46
+
47
+ companion object {
48
+ fun calculateProfitRate(winLoss: WinLoss, cardStatus: CardStatus): ProfitRate = when (winLoss) {
49
+ WinLoss.WIN -> if (cardStatus == CardStatus.BLACKJACK) BLACKJACK_WIN else NORMAL_WIN
50
+ WinLoss.LOSE -> LOSE
51
+ WinLoss.DRAW -> DRAW
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ → **3 객체 분리 + 각각 책임 명확**:
58
+ - `BetAmount`: *invariant + Profit 계산*.
59
+ - `Profit`: *value class + Double*.
60
+ - `ProfitRate`: *enum + 결과/상태 조합 → rate*.
61
+
62
+ reviewer (Thread 8) *"이런 1.5배, 1배 이런 것들도 어떤 한 클래스에 묶어 관리될 수 있을 것 같아요."* → 학생 자가 적용.
63
+
64
+ #### 2.1. *PR #130·#35·#36·#87·#138 결의 *enum + cashOut* 어휘 합류*
65
+
66
+ PR #142 (doabletuple) `GameResult.cashOut(player)` 와 *반대 시점 (`ProfitRate.value * betAmount` 직접 계산)* — *enum 책임 강화 정공*.
67
+
68
+ ### 3. `WinLoss` + `ProfitRate` 분리 — 결과 vs 수익률 분리
69
+
70
+ ```kotlin
71
+ enum class WinLoss { WIN, DRAW, LOSE }
72
+
73
+ enum class ProfitRate(val value: Double) { BLACKJACK_WIN, NORMAL_WIN, DRAW, LOSE }
74
+ ```
75
+
76
+ → **2 enum 분리** — *결과 (WIN/DRAW/LOSE 3 종) + 수익률 (4 종: 블랙잭 분기 포함)*. PR #142 (`GameResult` 5 멤버 단일) 와 *반대 시점 (분리)*.
77
+
78
+ #### 3.1. *2 가지 트레이드오프*
79
+
80
+ | 안 | 장점 | 단점 |
81
+ |---|---|---|
82
+ | `WinLoss` + `ProfitRate` 분리 (현재) | *결과 분류 + 수익률 분리 = 책임 명확* | *2 enum + calculateProfitRate 매핑 함수 필요* |
83
+ | `GameResult` 5 멤버 단일 (PR #142) | *단일 객체 + 호출 간결* | *결과 + 수익률 한 자리 책임 ↑* |
84
+
85
+ **MCP 룰 `result-vs-rate-enum-separation` 후보** — *결과 vs 수익률 분리 트레이드오프*.
86
+
87
+ ### 4. `data class GameParticipants(dealer, players)` + `profitInfos` computed property
88
+
89
+ ```kotlin
90
+ data class GameParticipants(val dealer: Dealer, val players: List<Player>) {
91
+ val gameParticipants: List<GameParticipant> get() = listOf(dealer) + players
92
+
93
+ val profitInfos: List<ProfitInfo>
94
+ get() {
95
+ val dealerProfitInfo = ProfitInfo(dealer.name, dealer.allPlayersMatchProfit(players))
96
+ val playersProfitInfos = players.map { player -> ProfitInfo(player.name, player.dealerMatchProfit(dealer)) }
97
+ return listOf(dealerProfitInfo) + playersProfitInfos
98
+ }
99
+ }
100
+ ```
101
+
102
+ → **`GameParticipants` 일급 컬렉션 + computed property** = PR #142 (Game 분리) 결의 *Scoreboard* 객체와 유사 패턴.
103
+
104
+ ### 5. 학생 자가 *원래 그리던 꿈을 펼쳐볼까* (Thread 15) — 형식 규칙 자가 비판
105
+
106
+ reviewer (Thread 15): *"`participantInfo`의 존재 이유가 무엇일까요? 딜러는 `betAmount`가 필요없지 않을까요? 🤔"*
107
+
108
+ 학생:
109
+
110
+ > *"대단한 이유는 없고 `3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.`를 지키기 위해서 사용되었습니다. 둘리 외에 어떤 공룡 리뷰어가 `요구사항을 지켜야 하지만 좋은 설계라고 생각하면 가끔은 깨부셔도..?` 라며 원래 그리던 꿈을 펼쳐보라는 리뷰를 다시는 것을 보았는데 저도 원래 그리던 꿈을 펼쳐볼까 합니다."*
111
+
112
+ → **형식 규칙 자가 비판 + 다른 reviewer 어휘 인용 ("원래 그리던 꿈을 펼쳐보라")** = *PR #138 (rosemin928 *"인스턴스 변수 유지라는 요구사항에 맞추기 위해 묶지 않아도 될 것을 계속 묶고 있나?"*) 결의 *형식 규칙 부산물 자가 비판* 어휘 강화 + *다른 reviewer 어휘 cross-reference*.
113
+
114
+ **MCP 룰 `form-rule-artificial-grouping-self-critique` 강화** 누적 2+ PR (#138·#143).
115
+
116
+ **MCP 룰 `peer-reviewer-cross-reference` 후보** — *학생이 다른 reviewer 어휘 인용 + 자가 적용*.
117
+
118
+ ### 6. `-0.0f` Float IEEE 754 함정 학생 자가 학습 + 조사
119
+
120
+ reviewer (Thread 5): *"-0 방지가 어떤 뜻인가요? 0.0f 더해주신 이유가 궁금해요!"*
121
+
122
+ 학생 자가 답변:
123
+
124
+ > *"현재 딜러의 수익은 `플레이어의 수익의 합의 역`으로 계산하고 있어서 -를 붙이기 때문에 `플레이어의 수익의 합`이 0일 경우 0에 -를 붙여 -0으로 표시되는 문제가 발생하는걸 확인하였고 원인을 조사하다가 코틀린에서 float는 `-0.0f`와 `0.0f`를 구분한다는 것을 알게 되었습니다. 조건문을 걸어서 해결하는 방법도 있지만 `0.0f`를 더하는게 가장 간편한 해결책인것 같아서 추가하게 되었습니다."*
125
+
126
+ ```kotlin
127
+ fun allPlayersMatchProfit(players: Collection<Player>): Profit {
128
+ val playersProfitSum = players.sumOf { player -> player.dealerMatchProfit(this).value }
129
+ return Profit(-playersProfitSum + 0.0) // ← -0.0 방지
130
+ }
131
+ ```
132
+
133
+ → **`-0.0` IEEE 754 함정 자가 학습 + 조사 + 해결책** = PR #131 (Leeyerin0210 *Double IEEE 754 함정 우회*) 결의 *학생 자가 재발견*. **MCP 룰 `negative-zero-floating-point-trap` 강화** 누적 2+ PR (#131·#143).
134
+
135
+ #### 6.1. *학생 자가 학습 깊이*
136
+
137
+ - 문제 인식 (`-0` 표시).
138
+ - 원인 조사 (`-0.0f` vs `0.0f` 구분).
139
+ - 해결책 비교 (조건문 vs `+ 0.0` 더하기).
140
+ - 자가 선택 (간편한 해결책).
141
+
142
+ **Kotlin/Java 어휘 깊은 자가 학습**.
143
+
144
+ ### 7. `dealerMatchProfit(dealer)` Tell-Don't-Ask + Player ↔ Dealer 자가 비교
145
+
146
+ ```kotlin
147
+ fun dealerMatchProfit(dealer: Dealer): Profit {
148
+ val profitRate = ProfitRate.calculateProfitRate(this.winLoss(dealer), this.cardStatus)
149
+ return betAmount.calculateProfit(profitRate)
150
+ }
151
+ ```
152
+
153
+ → **Player 가 dealer 와 자가 비교 + Profit 자가 계산 + Tell-Don't-Ask 정공** = PR #129·#138·#142·#126 결 합류.
154
+
155
+ ### 8. custom get vs function 학생 자가 4 분류
156
+
157
+ reviewer (Thread 16):
158
+
159
+ > *"커스텀 get() 프로퍼티로 구현하는 경우와 함수로 구현하는 경우는 어떻게 구분하면 좋을지 메다의 생각이 궁금해요!"*
160
+
161
+ 학생 자가 답변:
162
+
163
+ > *"커스텀 get() 프로퍼티*
164
+ > *- 클라이언트가 해당 값을 객체의 속성처럼 생각할 것 같을 경우*
165
+ > *- 단순한 객체의 상태를 받아 올 경우*
166
+ >
167
+ > *함수*
168
+ > *- 값을 가져오기 위해 파라미터가 필요한 경우*
169
+ > *- 값을 가져오는것이 아닌 객체를 변화시키는 조정자로 쓰일 경우*
170
+ >
171
+ > *로 정리했습니다. 이 기준에 따라서 다른 코드들도 수정해봐야 할 것 같네요"*
172
+
173
+ → **Kotlin 어휘 자가 4 분류** = PR #117 (parkjiminnnn *property val vs computed property*) 결 + PR #138 (rosemin928 *value class @JvmInline*) 결의 *Kotlin 어휘 자가 학습 정점*.
174
+
175
+ **MCP 룰 `property-vs-function-criteria` 후보** — *property (속성/상태) vs function (파라미터/조정자) 구분 기준 4 분류*.
176
+
177
+ ### 9. 추가 칭찬
178
+
179
+ - Thread 12: *"이제 한번에 세팅해줄 수 있겠어요 👍"* (HandCards 부생성자 vararg).
180
+ - Thread 16: *"Participant의 initCards 오버라이딩을 활용하여 다르게 보여주도록 구현했네요 👍"*.
181
+ - 모든 19 스레드 학생 자가 답변 + commit SHA (일부 미적용 = 답변만).
182
+
183
+ ## 못한 점 (설계 관점)
184
+
185
+ ### 1. Deck 컨트롤러 외부 주입 vs 내부 생성
186
+
187
+ reviewer (Thread 1): *"Deck을 컨트롤러 밖에서 생성해서 주입해준 이유가 있으신가요?"*
188
+
189
+ 학생 자가 답변:
190
+
191
+ > *"덱을 만들어서 주입하면 더 유연하게 운영 가능하지 않을까 생각했습니다. 현재와 같이 생성자를 생략하면 52장의 랜덤 카드가 카지노에게 주어지고 경우에 따라서는 2벌의 카드를 섞어서 사용하거나 섞지 않고 줄 수도 있으니까요"*
192
+
193
+ reviewer:
194
+
195
+ > *"오호 그렇군요! 저는 덱 생성을 컨트롤러 안에서 해도 되지 않을까?라고 생각했어요!🤔"*
196
+
197
+ → **DI vs 내부 생성 트레이드오프**:
198
+
199
+ | 안 | 장점 | 단점 |
200
+ |---|---|---|
201
+ | 외부 주입 (학생) | *유연성 (다른 Deck 가능) + 테스트* | *호출자가 Deck 어휘 알아야 함* |
202
+ | 내부 생성 (reviewer) | *호출자 간결* | *유연성 ↓ + 테스트 어려움* |
203
+
204
+ PR #138 (rosemin928 *Deck interface + DI*) 결의 *외부 주입 정공* 어휘 합류. **MCP 룰 `dependency-injection-vs-internal-creation` 후보**.
205
+
206
+ 다만 *reviewer 와 학생 의견 차이 = MCP `oop_propose_alternatives` 핵심 가치 합류*.
207
+
208
+ ### 2. `player.addCard(card)` Player 메서드 vs `deck.draw` 직접 (1단계 결 진화)
209
+
210
+ reviewer (Thread 2): *"player에게 카드를 추가하라고 하는 것은 어떨까요?"*
211
+
212
+ 학생 자가 답변:
213
+
214
+ > *"step1 PR에서 적은 궁금증에 관한 내용인 것 같습니다. (...) 와 같이 굳이? handCard에 메서드를 감싸는 쓸데없는 코드만 늘어나는것 아닌가 라는 생각으로 의도적으로 player에게 카드를 추가하라는 메서드는 만들지 않았습니다. (...) 현재 제가 생각한 대안으로*
215
+ > ```kt
216
+ > fun cardDraw(deck: Deck) {
217
+ > handCards.addCard(deck.getCard())
218
+ > }
219
+ > ```
220
+ > *와 같이 deck을 player가 참조하게 해서 player객체에게 드로우 하라는 메시지를 보내는 방식이 괜찮을 것 같다고 생각했습니다."*
221
+
222
+ 학생 코드 (실제 적용):
223
+
224
+ ```kotlin
225
+ fun fromDeckCardDraw(deck: Deck) {
226
+ handCards.cardAdd(deck.popCard())
227
+ }
228
+ ```
229
+
230
+ → **Player.fromDeckCardDraw(deck)** = *Tell-Don't-Ask + 도메인 메시지* + *위임 메서드 (handCards.cardAdd) 추가 책임 X* = *학생 1단계 자가 의문 (위임 메서드 = 쓸데없는 코드) 자가 해결*.
231
+
232
+ 다만 **`fromDeckCardDraw` 명명 양가** — *영어 어순 어색 (`drawFromDeck` 정공)*. **MCP 룰 `english-word-order-naming` 후보**. PR #87 (Aginst), PR #130 (bulidPlayers) 결 합류.
233
+
234
+ ### 3. 카드 이니셜 = 비즈니스 vs View 학생 자가 의문
235
+
236
+ reviewer (Thread 9): *"`intial`은 비즈니스 로직일까요, 뷰를 위한 로직일까요?"*
237
+
238
+ 학생 자가 답변:
239
+
240
+ > *"현재로서는 View만을 위해 기능하고 있고 View를 위한게 맞는 것 같습니다. 다만 카드 이니셜은 고정된 값이고 앞으로도 변할 일이 없는 단순히 표시 목적을 넘어 카드의 본질적인 특성이라고 생각해서 가지고 있는 편이 좋을 것 같다고 생각했습니다. 가령 이니셜 스트링을 사용해서 Enum 객체를 가져올 수 있도록 만든다면 편리하겠네요"*
241
+
242
+ → **카드 이니셜 = 표시 vs 본질 양가** = *PR #126 (Verdict 출력 문자열) vs PR #142 (에러 메시지 = Model OK)* 결의 *변경 가능성 = View 책임 vs 도메인 본질 = Model OK* 트레이드오프 합류.
243
+
244
+ **MCP 룰 `view-format-as-domain-invariant-tradeoff` 후보** — *표시 형식 vs 도메인 본질 트레이드오프*.
245
+
246
+ ### 4. `participantInfo` 인공 객체 자가 인지 — 형식 규칙 부산물
247
+
248
+ §5 참조. 학생 자가 비판 + *원래 그리던 꿈을 펼쳐볼까* 어휘.
249
+
250
+ 다만 **`participantInfo` 가 *실제 코드에는 없음*** = *PR 본문에 *BetHistory* 언급 → 2단계 최종 코드는 `BetAmount` (Player 멤버)* — *형식 규칙 자가 비판 후 자가 제거 정공*. PR #138 (BlackJackTable 자가 제거) 결과 같은 패턴.
251
+
252
+ ### 5. `Player(name, betAmount)` 2 변수 vs Dealer 1 변수 — Dealer 가 BetAmount 없음
253
+
254
+ ```kotlin
255
+ class Player(name: String = DEFAULT_NAME, private val betAmount: BetAmount) : GameParticipant(name = name)
256
+ class Dealer(name: String = DEFAULT_NAME) : GameParticipant(name = name)
257
+ ```
258
+
259
+ → **Player ↔ Dealer 비대칭 (Dealer 는 BetAmount X)** = PR #87 (jaeyeongjo `DealerInfo.getBetAmount() = 0` Dummy zero) 결의 *반대 시점 (Dealer 가 BetAmount 멤버 자체 없음)* 정공.
260
+
261
+ reviewer (Thread 19): *"`BetAmount`의 기본값이 왜 1이 되었을까요? 😢 딜러 때문이라면 딜러는 `BetAmount`를 안가져도 될 것 같아요!"*
262
+
263
+ → **reviewer 가 *Dealer 가 BetAmount 가져야 하는지* 추궁** = *학생의 1차 안 (BetAmount 기본값 1) → 2차 안 (Dealer 가 BetAmount 안 가짐)*.
264
+
265
+ **MCP 룰 `dummy-zero-for-domain-absent` 강화** 누적 2+ PR (#87·#143). *Dealer 가 BetAmount 가짐 vs 안 가짐 양가 = 학생 자가 학습 진화*.
266
+
267
+ ### 6. `GameParticipant` `protected val handCards: HandCards = HandCards()` — 매 인스턴스 신규 생성 + 초기 카드 X
268
+
269
+ ```kotlin
270
+ abstract class GameParticipant(val name: String) {
271
+ abstract val initCards: List<Card>
272
+ abstract val isDrawFinish: Boolean
273
+ protected val handCards: HandCards = HandCards() // ← 매 인스턴스 신규 생성, 카드 X
274
+ ...
275
+ fun fromDeckCardDraw(deck: Deck) {
276
+ handCards.cardAdd(deck.popCard())
277
+ }
278
+ }
279
+ ```
280
+
281
+ → **HandCards 초기 비어 있음 + 외부에서 cardAdd 호출** = *호출 순서 invariant 부재* (PR #142 lateinit, PR #139 var betAmount 결).
282
+
283
+ 대안:
284
+ - `GameParticipant(cards: List<Card>)` 생성자 인자 (초기 카드 보유).
285
+ - `Player(name, cards, betAmount)` (3 변수 — 형식 규칙 위반? 도메인 정합).
286
+
287
+ 학생의 부생성자 `Player(betAmount, cards)` 활용 시 초기 카드 보유. *호출자 책임*.
288
+
289
+ ### 7. `ProfitRate.calculateProfitRate(winLoss, cardStatus)` companion 정적
290
+
291
+ ```kotlin
292
+ companion object {
293
+ fun calculateProfitRate(winLoss: WinLoss, cardStatus: CardStatus): ProfitRate = when (winLoss) {
294
+ WinLoss.WIN -> if (cardStatus == CardStatus.BLACKJACK) BLACKJACK_WIN else NORMAL_WIN
295
+ WinLoss.LOSE -> LOSE
296
+ WinLoss.DRAW -> DRAW
297
+ }
298
+ }
299
+ ```
300
+
301
+ → **enum companion 정적 메서드 + 외부 인자 2개 (winLoss, cardStatus)** = *Tell-Don't-Ask 부분 위반*. *Player 가 `ProfitRate.calculateProfitRate(this.winLoss(dealer), this.cardStatus)` 호출* = *외부 호출 + enum 정적*.
302
+
303
+ 대안: **`WinLoss.toProfitRate(cardStatus: CardStatus): ProfitRate`** (WinLoss enum 에 메서드) — *enum 책임 강화*.
304
+
305
+ **MCP 룰 `enum-static-vs-instance-method-locator` 후보**.
306
+
307
+ ### 8. `BetAmount.MINIMUM_BET_AMOUNT = 0` (이전 1) — 학생 자가 학습 시점
308
+
309
+ ```kotlin
310
+ private const val MINIMUM_BET_AMOUNT = 0
311
+ ```
312
+
313
+ → **`MINIMUM_BET_AMOUNT = 0` + `require(value > 0)`** = *베팅 ≥ 1원*. PR #138 (1000원), PR #142 (0원 가능) 결과 다른 값.
314
+
315
+ **MCP 룰 `domain-rule-arbitrary-constant` 강화** 누적 4+ PR.
316
+
317
+ ### 9. `Player.initCards: List<Card> get() = cards.subList(0, 2)` — sublist 직접 노출
318
+
319
+ ```kotlin
320
+ override val initCards: List<Card> get() = cards.subList(0, 2)
321
+ ```
322
+
323
+ → **`subList` 외부 노출 + `cards.subList(0, 2)` 직접 indexing** = *Tell-Don't-Ask 위반 (`cards` 외부 호출 + subList)*. *HandCards 가 자가 처리 (예: `handCards.firstN(2)`) 가 정공*.
324
+
325
+ 대안: `HandCards.initCardsOf(count: Int): List<Card>` (PR #138 `Hand.show(count)` 결).
326
+
327
+ ### 10. `Dealer.allPlayersMatchProfit(players: Collection<Player>)` — 외부 players 인자
328
+
329
+ ```kotlin
330
+ fun allPlayersMatchProfit(players: Collection<Player>): Profit {
331
+ val playersProfitSum = players.sumOf { player -> player.dealerMatchProfit(this).value }
332
+ return Profit(-playersProfitSum + 0.0)
333
+ }
334
+ ```
335
+
336
+ → **Dealer 가 외부 players 인자 받음 + Dealer 자체는 players 멤버 X** = *PR #142 (Scoreboard.dealerProfit(players) 외부 인자 vs 멤버) 결과 같은 *redundant-parameter-vs-member* 가 아닌 *외부 의존 명시 정공* 변형*.
337
+
338
+ **MCP 룰 `external-collection-as-method-arg-vs-member` 후보** — *외부 컬렉션 인자 = 의존 명시 vs 멤버 보유*.
339
+
340
+ ### 11. `GameParticipants.profitInfos: List<ProfitInfo> get() = ...` — computed property + 매 호출 시 재계산
341
+
342
+ ```kotlin
343
+ val profitInfos: List<ProfitInfo>
344
+ get() {
345
+ val dealerProfitInfo = ProfitInfo(dealer.name, dealer.allPlayersMatchProfit(players))
346
+ val playersProfitInfos = players.map { ... }
347
+ return listOf(dealerProfitInfo) + playersProfitInfos
348
+ }
349
+ ```
350
+
351
+ → **`get()` 매 호출 시 재계산** = *비용 ↑* (PR #117·#143 결의 *property val vs computed property* 트레이드오프).
352
+
353
+ 대안: `val profitInfos = ...` (즉시 초기화) — *결과 1회 계산*. 다만 *players 변경 시 = stale*. **MCP 룰 `computed-property-vs-val-recompute-cost` 후보**.
354
+
355
+ ### 12. `GameParticipant.winLoss(rival)` `protected` — Player 만 호출
356
+
357
+ ```kotlin
358
+ protected fun winLoss(rival: GameParticipant): WinLoss = handCards.versusRivalWinLoss(rival.cardStatus, rival.bestValue)
359
+ ```
360
+
361
+ → **`protected` 가시성** = *자식 (Player/Dealer) 만 호출* + *외부 차단*. PR #87·#117 결의 *protected 가시성 정공*.
362
+
363
+ ### 13. `HandCards.cardAdd(card)` 명명 양가 — `addCard` 가 정공
364
+
365
+ ```kotlin
366
+ fun cardAdd(card: Card) { ... }
367
+ ```
368
+
369
+ → **`cardAdd` 영어 어순 어색** (`addCard` 정공). PR #87·#130 결의 *영문 명명 정확성*. **MCP 룰 `english-word-order-naming` 강화** 누적 2+ PR.
370
+
371
+ ### 14. `MutableList` 직접 사용 + 방어적 복사 자가 학습
372
+
373
+ reviewer (Thread 12):
374
+
375
+ > *"이제 한번에 세팅해줄 수 있겠어요 👍 다만 이렇게 MutableList로 받아서 바로 내부에서 사용한다면 어떤 문제가 있을까요?"*
376
+
377
+ 학생 자가 답변:
378
+
379
+ > *"외부에서 참조를 가지고 있을 경우 HandCard 외부에서 내부의 값을 조작할 수 있겠네요. 방어적 복사를 적용 해보도록 하겠습니다."*
380
+
381
+ → **MutableList 외부 참조 위험 자가 인지 + 방어적 복사 자가 학습** = PR #21·#117·#138 (mutable-list-public-exposure) 결 합류.
382
+
383
+ ### 15. PlayerTest 사라짐 (Deck object 제거 부작용)
384
+
385
+ reviewer (Thread 4):
386
+
387
+ > *"PlayerTest가 사라졌군요 😢 이김에 participant 패키지에 있는 모델들 테스트 작성도 하면 좋을 것 같아요!"*
388
+
389
+ 학생:
390
+
391
+ > *"Deck이 Object가 아니게 되면서 사라졌는데 말씀 주신대로 participant 패키지의 테스트들을 추가해야겠네요..."*
392
+
393
+ → **테스트 회귀 = Deck object 제거 부작용** + **테스트 추가 권유**. PR #87 (테스트 = 객체 설계 명세서) 결 + PR #130 (Singleton Deck 테스트 어려움) 결 합류.
394
+
395
+ **MCP 룰 `test-regression-from-deck-refactor` 후보** — *Deck 리팩터링 = 테스트 영향*.
396
+
397
+ ### 16. `getFirstCard()` → `openInitialHand` 추상 메서드 자가 학습
398
+
399
+ reviewer (Thread 11):
400
+
401
+ > *"이쯤에서 한번 고민해보면 좋을 것 같아요. 딜러가 첫 턴에 카드를 두 장 뽑고나서 한 장만 보여주는 것은 비즈니스 로직일까요, 뷰의 로직일까요?"*
402
+
403
+ 학생:
404
+
405
+ > *"비즈니스 로직이라고 생각해서 딜러 클래스에 getFirstCard()를 만들고 호출시켰는데 리뷰를 읽고 생각해보니 초기 카드를 가져오는 추상 메서드를 GameParticipant에 만들고 딜러와 플레이어 클래스에서 각각 구체화 시키는게 좋을 것 같네요"*
406
+
407
+ 학생 자가 적용 (실제 코드):
408
+ ```kotlin
409
+ // Participant
410
+ abstract val initCards: List<Card>
411
+
412
+ // Player
413
+ override val initCards: List<Card> get() = cards.subList(0, 2)
414
+
415
+ // Dealer
416
+ override val initCards: List<Card> get() = cards.subList(0, 1)
417
+ ```
418
+
419
+ → **카드 N장 공개 = 비즈니스 로직 + 추상 메서드 다형성** = PR #129·#126·#142 결 합류.
420
+
421
+ ### 17. `dealerMatchProfit(dealer: Dealer)` Player 만 호출 + 결과 부호 반전 — `Dealer.allPlayersMatchProfit` 호출
422
+
423
+ ```kotlin
424
+ fun allPlayersMatchProfit(players: Collection<Player>): Profit {
425
+ val playersProfitSum = players.sumOf { player -> player.dealerMatchProfit(this).value }
426
+ return Profit(-playersProfitSum + 0.0)
427
+ }
428
+ ```
429
+
430
+ → **Dealer 자가 결과 = -Players 합** = PR #36 (`operator fun not()`), PR #35 (`* -1`), PR #142 (`Scoreboard.dealerProfit`) 결 합류. **부호 반전 정공**.
431
+
432
+ ### 18. `winLoss` 메서드 Player 호출 / Dealer 미사용 — 비대칭
433
+
434
+ ```kotlin
435
+ // GameParticipant
436
+ protected fun winLoss(rival: GameParticipant): WinLoss = handCards.versusRivalWinLoss(...)
437
+
438
+ // Player.dealerMatchProfit
439
+ val profitRate = ProfitRate.calculateProfitRate(this.winLoss(dealer), this.cardStatus)
440
+ ```
441
+
442
+ → **Player.winLoss(dealer) 호출만** + **Dealer.allPlayersMatchProfit = Players 합 부호 반전** = *Dealer 자가 winLoss 호출 X*. **비대칭** = *학생의 *플레이어 결과 = 딜러 결과 부호 반전* 의도 일관*.
443
+
444
+ 다만 **PR #142 (양쪽 자가 비교 정공 = `compareAgainst`) 와 반대 시점 (Player 만 자가 비교)** = *Tell-Don't-Ask 부분 위반*.
445
+
446
+ PR #87·#129·#142 결의 *대칭 자가 비교 정공* vs PR #143 (비대칭 = 부호 반전) 트레이드오프.
447
+
448
+ **MCP 룰 `symmetric-compare-bidirectional-call` 강화** 누적 2+ PR (#142·#143). *반대 시점 트레이드오프*.
449
+
450
+ ### 19. `Profit(-playersProfitSum + 0.0)` `+ 0.0` 더하기 — `-0.0` 회피
451
+
452
+ §6 참조.
453
+
454
+ ### 20. `versusRivalWinLoss(rival.cardStatus, rival.bestValue)` HandCards 메서드 — 외부 cardStatus + bestValue 인자
455
+
456
+ ```kotlin
457
+ // GameParticipant
458
+ protected fun winLoss(rival: GameParticipant): WinLoss = handCards.versusRivalWinLoss(rival.cardStatus, rival.bestValue)
459
+ ```
460
+
461
+ → **HandCards 가 *rival.cardStatus + rival.bestValue* 2 외부 인자 받음** = *PR #142 (lambda-multiple-args-tuple-leak) 결과 같은 *Tuple 누수 변형***.
462
+
463
+ 대안: **`handCards.versusRivalWinLoss(rival.handCards)`** 또는 **`HandCards.compareAgainst(other: HandCards)`** — *HandCards ↔ HandCards 직접 비교*. **MCP 룰 `parameter-explosion-vs-object-passing` 후보**.
464
+
465
+ ### 21. 학생 자가 *isDrawFinish 활용* 의식
466
+
467
+ reviewer (Thread 13): *"Player의 `isDrawFinish()` 를 활용해볼 수 있을까요?"*
468
+
469
+ 학생:
470
+
471
+ > *"스스로 만들어놓고 정작 까먹고 안쓰는게 많은 것 같네요... 고치도록 노력해봐야겠습니다."*
472
+
473
+ → **자가 추상화 활용 부족 자가 인지** = *추상화 활용 점검 어휘 (PR #129·#138·#142)* 합류.
474
+
475
+ ### 22. `Player.isDrawFinish = this.cardStatus == CardStatus.BUST` — 21 시 hit 가능
476
+
477
+ ```kotlin
478
+ override val isDrawFinish: Boolean
479
+ get() = this.cardStatus == CardStatus.BUST
480
+ ```
481
+
482
+ → **Player BUST 시 종료 = 21 시 hit 가능 (`<=` 21)**. PR #129·#138·#139·#126 결과 동일. PR #35 (21 시 stop) 반대 시점.
483
+
484
+ ### 23. `Dealer.DEALER_DRAW_LIMIT = 16` + `<= 16` 정공
485
+
486
+ ```kotlin
487
+ override val isDrawFinish: Boolean
488
+ get() = handCards.bestCardValue <= DEALER_DRAW_LIMIT
489
+ ```
490
+
491
+ → **Dealer 16 시 stop 시점 = `<= 16`** = **블랙잭 룰 와전 가능 (PR #129 와 같음)**:
492
+
493
+ - *블랙잭 표준 = Dealer 16 이하 hit / 17 이상 stop*.
494
+ - *학생 코드 `<= 16 → isDrawFinish = true (종료)`* = *16 시 hit X = 와전*.
495
+
496
+ 대안: *`< 17` (PR #35 정공)* 또는 *`> 16` (16 시 hit, 17 시 stop)*.
497
+
498
+ **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 17+ PR ⭐⭐⭐. *학생 자가 룰 와전 = 17 미만 hit vs 17 이상 stop 양가성*.
499
+
500
+ PR #126 (`HIT_THRESHOLD = 16` + `<= 16` hit), PR #138 (`DEALER_MAX_SCORE = 16` + `<= 16` hit) 의 *정공* 반대 시점.
501
+
502
+ ### 24. `cardSize: Int` private 멤버 — 외부 노출 X
503
+
504
+ ```kotlin
505
+ private val cardSize: Int get() = handCards.cards.size
506
+ ```
507
+
508
+ → **`private val cardSize` 외부 노출 X** + **`val isInitHandCard: Boolean get() = cardSize == HandCards.INIT_CARD_SIZE`** = 외부 호출자는 *isInitHandCard 만 알면 됨* = *캡슐화 정공*.
509
+
510
+ reviewer (Thread 3): *"GameParticipant에 이미 만들어두었던 함수를 활용해볼 수 있을 것 같아요!"*
511
+
512
+ 학생: *"`participant.cardSize() < INIT_CARD_SIZE`룰 `participant.isInitHandCard()` 로 바꿀 수 있겠네요...!"*
513
+
514
+ → **자가 추상화 활용 부족 자가 인지** (§21 결).
515
+
516
+ ### 25. ProfitStatistics 의 로직 분리 — 모델 자가 처리
517
+
518
+ reviewer (Thread 7): *"ProfitStatistics의 로직들을 분리해서, 각 모델들이 일하게끔 만들 수 있겠다는 생각이 듭니다. 한번 고민해볼까요? 🤔"*
519
+
520
+ 학생: *"`ProfitStatistics`를 만들면서 딜러와 플레이어가 직접 수익이 얼마인지를 알려줄 수 있으면 좋을 것 같다고 생각했는데 구현을 고민해봐야겠습니다"*
521
+
522
+ → **god-object 회피 + 모델 자가 일** = *Player.dealerMatchProfit / Dealer.allPlayersMatchProfit* 자가 적용. PR #142 (Scoreboard) 결의 *반대 시점 (Scoreboard 통합 vs Player/Dealer 분산)*.
523
+
524
+ ## 리뷰어 의견 요지
525
+
526
+ - **Deck 컨트롤러 외부 주입 vs 내부 생성** — *DI 트레이드오프*.
527
+ - **player.addCard vs deck.draw 직접 (1단계 자가 의문 자가 진화)**.
528
+ - **GameParticipant 기존 함수 활용 (isInitHandCard)** — *자가 추상화 활용 부족*.
529
+ - **PlayerTest 사라짐 + participant 테스트 추가**.
530
+ - **`-0` 방지 + `0.0f` 더하기** — *Float IEEE 754 함정 자가 학습*.
531
+ - **상수화 (BetAmount 최소)** — *카지노 설정*.
532
+ - **ProfitStatistics 로직 분리 → 모델 자가 처리**.
533
+ - **1.5/1.0 배 = 한 클래스 묶음 (ProfitRate enum)**.
534
+ - **카드 이니셜 = 비즈니스 vs View 양가 (학생 자가 본질 어휘)**.
535
+ - **WinLossStatistics 추상화 (모델 자가 일)**.
536
+ - **딜러 첫 턴 한 장 = 비즈니스 vs View → 추상 메서드 정공**.
537
+ - **MutableList 외부 참조 위험 + 방어적 복사 자가 학습**.
538
+ - **Player.isDrawFinish 활용 부족 자가 인지**.
539
+ - **Kotlin 클래스 순서 컨벤션**.
540
+ - **`participantInfo` 인공 객체 → Dealer BetAmount X 권유 + 학생 자가 *원래 그리던 꿈을 펼쳐볼까***.
541
+ - **custom get vs function 학생 자가 4 분류**.
542
+ - **HandCards 승패 판단 + BetAmount.profit 리턴 + Dealer 합산**.
543
+ - **BetAmount 기본값 1 vs Dealer 가 BetAmount X**.
544
+
545
+ ## 대표 인용
546
+
547
+ > [medAndro PR 본문]
548
+ > *"Step2를 일단 기능을 빠르게 구현 완료하긴 했는데 의식의 흐름대로 짜서 이게 맞나 싶기도 한 코드가 된 것 같네요"*
549
+
550
+ → **학생 자가 *의식의 흐름 코드* 인정** = PR #139 (parkjiminnnn *진흙탕 코드*) 결 합류.
551
+
552
+ > [medAndro PR 본문]
553
+ > *"`ProfitStatistics`에서 일단 getter를 써서 구현해 보았는데 언제 함수를 쓰고 언제 getter를 쓰는지는 슬랙의 페토의 글을 보고 주말에 공부좀 해봐야 될 것 같습니다."*
554
+
555
+ → **슬랙 외부 자료 자가 학습**. *Kotlin 어휘 자가 학습 정점*.
556
+
557
+ > [medAndro Thread 5]
558
+ > *"코틀린에서 float는 `-0.0f`와 `0.0f`를 구분한다는 것을 알게 되었습니다. 조건문을 걸어서 해결하는 방법도 있지만 `0.0f`를 더하는게 가장 간편한 해결책인것 같아서 추가하게 되었습니다."*
559
+
560
+ → **Float IEEE 754 자가 학습 + 해결책 비교** — *깊은 자가 학습*. PR #131 결 재발견.
561
+
562
+ > [medAndro Thread 15]
563
+ > *"둘리 외에 어떤 공룡 리뷰어가 `요구사항을 지켜야 하지만 좋은 설계라고 생각하면 가끔은 깨부셔도..?` 라며 원래 그리던 꿈을 펼쳐보라는 리뷰를 다시는 것을 보았는데 저도 원래 그리던 꿈을 펼쳐볼까 합니다."*
564
+
565
+ → **다른 reviewer 어휘 cross-reference + 학생 자가 형식 규칙 비판** — *PR #138 결 강화 + 새로운 cross-reference 패턴*.
566
+
567
+ > [medAndro Thread 16]
568
+ > *"커스텀 get() 프로퍼티 - 클라이언트가 해당 값을 객체의 속성처럼 생각할 것 같을 경우 - 단순한 객체의 상태를 받아 올 경우. 함수 - 값을 가져오기 위해 파라미터가 필요한 경우 - 값을 가져오는것이 아닌 객체를 변화시키는 조정자로 쓰일 경우 로 정리했습니다."*
569
+
570
+ → **Kotlin 어휘 자가 4 분류 (property vs function)** — *학생 자가 학습 정점*.
571
+
572
+ > [medAndro Thread 13]
573
+ > *"스스로 만들어놓고 정작 까먹고 안쓰는게 많은 것 같네요... 고치도록 노력해봐야겠습니다."*
574
+
575
+ → **자가 추상화 활용 부족 자가 인지 (자가 비판 어휘)**.
576
+
577
+ ## 얻은 교훈 (보편)
578
+
579
+ 1. **PR 본문 자가 *의식의 흐름 코드* 인정 + 외부 자료 + 오프라인 만남** — *학습 적극성 정점*.
580
+
581
+ 2. **`-0.0` Float IEEE 754 함정 자가 학습 + 해결책 비교** — **MCP 룰 `negative-zero-floating-point-trap` 강화** 누적 2+ PR (#131·#143).
582
+
583
+ 3. **3 인스턴스 변수 제약 학생 자가 비판 + 다른 reviewer 어휘 cross-reference (*원래 그리던 꿈을 펼쳐볼까*)** — **MCP 룰 `form-rule-artificial-grouping-self-critique` 강화** 누적 2+ PR (#138·#143). **MCP 룰 `peer-reviewer-cross-reference` 후보**.
584
+
585
+ 4. **custom get vs function 학생 자가 4 분류** — *property (속성/상태) vs function (파라미터/조정자)*. **MCP 룰 `property-vs-function-criteria` 후보**.
586
+
587
+ 5. **WinLoss + ProfitRate enum 분리 (결과 vs 수익률)** — **MCP 룰 `result-vs-rate-enum-separation` 후보**. PR #142 (단일 GameResult) 반대 시점.
588
+
589
+ 6. **DI vs 내부 생성 (Deck)** — *유연성 vs 호출자 간결*. **MCP 룰 `dependency-injection-vs-internal-creation` 후보**.
590
+
591
+ 7. **Dealer 가 BetAmount X (반대 시점 1)** — *PR #87 (Dummy zero) 정공*. **MCP 룰 `dummy-zero-for-domain-absent` 강화** 누적 2+ PR.
592
+
593
+ 8. **블랙잭 1.5배 모델 (총 받음 1.5)** — *PR #36·#87·#138 결과 일치*. PR #35·#142 (순수익 0.5 모델) 와 반대 시점.
594
+
595
+ 9. **HandCards 외부 참조 위험 + 방어적 복사 자가 학습** — PR #21·#117·#138 결.
596
+
597
+ 10. **자가 추상화 활용 부족 자가 인지 (isDrawFinish 미사용)** — *학생 자가 비판*. **MCP 룰 `student-self-abstraction-underuse` 후보**.
598
+
599
+ 11. **양쪽 자가 비교 vs 부호 반전 (PR #142 양방 vs PR #143 부호 반전)** — *symmetric-compare 트레이드오프*. **MCP 룰 `symmetric-compare-bidirectional-call` 강화** 누적 2+ PR.
600
+
601
+ 12. **enum static vs instance method locator (ProfitRate.calculateProfitRate)** — **MCP 룰 후보**.
602
+
603
+ 13. **블랙잭 룰 와전 (`<= 16` = 16 시 stop, 룰 = 16 시 hit)** — **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 17+ PR ⭐⭐⭐.
604
+
605
+ 14. **외부 컬렉션 인자 vs 멤버 (Dealer.allPlayersMatchProfit(players))** — **MCP 룰 `external-collection-as-method-arg-vs-member` 후보**.
606
+
607
+ 15. **테스트 회귀 (Deck object 제거 부작용)** — **MCP 룰 `test-regression-from-deck-refactor` 후보**.
608
+
609
+ 16. **카드 이니셜 = 표시 vs 본질 트레이드오프** — **MCP 룰 `view-format-as-domain-invariant-tradeoff` 후보**.
610
+
611
+ 17. **영어 어순 어색 (`cardAdd`, `fromDeckCardDraw`)** — **MCP 룰 `english-word-order-naming` 강화** 누적 2+ PR.
612
+
613
+ 18. **computed property 매 호출 재계산 비용** — **MCP 룰 `computed-property-vs-val-recompute-cost` 후보**.
614
+
615
+ 19. **HandCards 캡슐화 학생 자가 의문 (Thread 17)** — *Tell-Don't-Ask 캡슐화 양가*.
616
+
617
+ 20. **모든 19 스레드 학생 자가 답변 + 학생 자가 4-5 분류 + 학생 자가 한계 인지 + 외부 자료** — *2025 코호트 정점 유지*.
618
+
619
+ ## 얻은 교훈 (도메인)
620
+
621
+ 1. **블랙잭 1.5배 (총 받음) 모델** — `BLACKJACK_WIN(1.5)`. PR #36·#87·#138 정공.
622
+
623
+ 2. **딜러 hit 한계 16 = `<= 16` 종료** — *룰 와전 가능 (16 시 stop)*. PR #129 결과 같은 와전.
624
+
625
+ 3. **카드 이니셜 = 도메인 본질 (학생 자가 어휘)** — *변경 가능성 X = Model OK*.
626
+
627
+ 4. **`-0.0` Float 함정** — *블랙잭 도메인 X, Kotlin 어휘*.
628
+
629
+ 5. **Dealer 가 BetAmount 멤버 X (반대 시점 1)** — *Player 만 betAmount*. PR #87 Dummy zero 정공.
630
+
631
+ 6. **WinLoss + ProfitRate enum 분리** — *블랙잭 결과 (3 종) + 수익률 (4 종) 분리*.
632
+
633
+ 7. **Dealer 수익 = -Players 합** — PR #36·#87·#142·#143 결.
634
+
635
+ ## MCP 룰 후보 신규 + 강화 (PR #143)
636
+
637
+ | 룰 | 신규 / 강화 | 누적 PR |
638
+ |---|---|---|
639
+ | `negative-zero-floating-point-trap` | 강화 | 2+ (#131·#143) |
640
+ | `form-rule-artificial-grouping-self-critique` | 강화 | 2+ (#138·#143) |
641
+ | `peer-reviewer-cross-reference` | 신규 | 1 (#143) |
642
+ | `property-vs-function-criteria` | 신규 | 1 (#143) |
643
+ | `result-vs-rate-enum-separation` | 신규 | 1 (#143) |
644
+ | `dependency-injection-vs-internal-creation` | 신규 | 1 (#143) |
645
+ | `dummy-zero-for-domain-absent` | 강화 | 2+ (#87·#143) |
646
+ | `symmetric-compare-bidirectional-call` | 강화 | 2+ (#142·#143) |
647
+ | `enum-static-vs-instance-method-locator` | 신규 | 1 (#143) |
648
+ | `blackjack-rule-fidelity-comparison` | 강화 | 17+ ⭐⭐⭐ |
649
+ | `external-collection-as-method-arg-vs-member` | 신규 | 1 (#143) |
650
+ | `test-regression-from-deck-refactor` | 신규 | 1 (#143) |
651
+ | `view-format-as-domain-invariant-tradeoff` | 신규 | 1 (#143) |
652
+ | `english-word-order-naming` | 강화 | 2+ (#143·#87) |
653
+ | `computed-property-vs-val-recompute-cost` | 신규 | 1 (#143) |
654
+ | `student-self-abstraction-underuse` | 신규 | 1 (#143) |
655
+ | `parameter-explosion-vs-object-passing` | 신규 | 1 (#143) |
656
+ | `domain-rule-arbitrary-constant` | 강화 | 4+ |
657
+ | `dsl-applicability-criteria` | (제거 추천) | (PR #35 결만) |
658
+
659
+ ## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
660
+
661
+ - ***학생 자가 *의식의 흐름 코드* 인정 + 외부 자료 + 오프라인 만남*** — medAndro PR #143 — *학습 적극성 정점*.
662
+ - ***`-0.0` Float IEEE 754 자가 학습 + 해결책 비교*** — medAndro PR #143 — *Kotlin/Java 어휘 깊은 자가 학습*. PR #131 결 재발견.
663
+ - ***다른 reviewer 어휘 cross-reference + 형식 규칙 자가 비판*** — medAndro PR #143 — *"둘리 외에 어떤 공룡 리뷰어가 ... 원래 그리던 꿈을 펼쳐보라는 리뷰를 다시는 것을 보았는데 저도 원래 그리던 꿈을 펼쳐볼까 합니다."*. **MCP 핵심 가치 합류 + 새로운 cross-reference 패턴**.
664
+ - ***Kotlin 어휘 자가 4 분류 (property vs function)*** — medAndro PR #143 — *학생 자가 학습 정점*.
665
+ - ***자가 추상화 활용 부족 자가 인지*** — medAndro PR #143 — *"스스로 만들어놓고 정작 까먹고 안쓰는게 많은 것 같네요..."*.
666
+
667
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **batch 21 신규 발견 = *학생이 다른 reviewer 어휘 cross-reference (peer-reviewer-cross-reference)* + *학생 자가 Kotlin 어휘 N 분류*** = *학습 가시화 정점 + 학생 ↔ 다른 reviewer 어휘 합류*.
668
+
669
+ ## 비교 (PR #130 → #143 진화 — 사족 X, 안티패턴 명시만)
670
+
671
+ - **1단계 #130 25 thread → 2단계 #143 19 thread** — *깊이 유지*.
672
+ - **1단계 #130 PR 본문 자가 한계 4 종 → 2단계 #143 PR 본문 자가 *의식의 흐름 코드* + 슬랙 외부 자료 + 오프라인 만남** — *학생 자가 학습 정점 진화*.
673
+ - **1단계 #130 Singleton Deck 자가 인지 → 2단계 #143 Deck DI + Player.fromDeckCardDraw 자가 적용** — *학습 시간성 정공*.
674
+ - **1단계 #130 `Number` 클래스 명명 충돌 → 2단계 #143 유지 (자가 비판 + 시간 부족)** — *학습 시간성 부분 한계*.
675
+ - **1단계 #130 outputView 함수 한번만 호출 학생/reviewer 자가 한계 → 2단계 #143 `versusRivalWinLoss` 외부 cardStatus/bestValue 인자 (Tuple 누수 변형)** — *Tell-Don't-Ask 진화 + 부분 위반*.
676
+ - **1단계 #130 학생 자가 한계 4 종 → 2단계 #143 학생 자가 추상화 활용 부족 자가 인지** — *자가 비판 깊이 진화*.
677
+
678
+ → *진화 비교 = 사족 아님* + *학생 자가 학습 정점 진화 + 형식 규칙 자가 비판 + 다른 reviewer 어휘 cross-reference 신규 패턴*.