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,683 @@
1
+ # PR #130 — [블랙잭 1단계] 메다 미션
2
+
3
+ - **Reviewee:** [@medAndro](https://github.com/medAndro)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/130
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@hyemdooly](https://github.com/hyemdooly) (둘리) — **신규 reviewer — 14번째** + **메타 케이스: 2023년 3월 학생 (PR #21·#35) → 2025년 reviewer 진화** (krrong 결과 같은 *학생 → reviewer* 패턴 2번째 사례)
7
+ - **라인 코멘트:** 25 스레드 — *PR 본문 자가 의문 3개 (TDD 학습 + 책임 분리 인사이트 + WinLossStatistics 자가 한계) + InputView 가 Player 생성 vs InputView 책임 한계 3-라운드 양방향 토론 + ArrayDeque vs MutableList vs Stack vs Queue 자료구조 자가 분석 (페어 학습) + 블랙잭 룰 정확성 자가 학습 (딜러 블랙잭 vs 플레이어 21점) + Deck object (싱글턴) 문제 학생 자가 인지 + outputView 함수 한번만 호출 학생/reviewer 양방향 자가 한계 인정 + Translator 과한 구현 + Card(cardIndex) 부생성자 의도 자가 토론*
8
+ - **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, PR #117·#129·#138·#126·#130 = **2025 코호트 5 PR 코퍼스 형성**).
9
+ - **메타 학습 케이스**: 학생 hyemdooly (PR #21·#35, 2023년 3월) = PR #130 의 reviewer 본인 → **2년 학생 → reviewer 진화** (krrong PR #32 → PR #148·#151 결과 같은 패턴).
10
+
11
+ ## 잘한 점 (설계 관점)
12
+
13
+ ### 1. PR 본문 자가 의문 3개 + 학생 자가 한계 명시 (2025 코호트 정점)
14
+
15
+ PR 본문:
16
+
17
+ > *"이번에 미션을 진행하면서 페어와 함께 TDD로 구현하여 정상적으로 동작시키는것을 최우선 목표로 삼았고 아직은 미숙하지만 모든 과정에서 최대한 TDD로 구현하도록 노력했습니다 현재의 TDD로 구현하고 있는 방식이 둘리가 보시기에 어떻게 생각하는지 궁금합니다."*
18
+
19
+ > *"현재로서는 각각의 객체들이 너무 많은 책임을 가지고 있고 패키지도 올바르게 분리하지 않았다고 생각합니다. 개선을 시키기 위한 인사이트를 던져주시면 감사하겠습니다!"*
20
+
21
+ > *"가장 마지막에 구현한 `WinLossStatistics` 클래스의 로직들은 TDD로는 구현하였으나 상수를 하드코딩하고 if문이 난무하고 메서드의 라인수가 길어지는 문제, `GameParticipant`의 `abstract fun play()`의 미사용, 예외 처리의 부재 등 여러 시간부족 이슈등으로 발생한 문제들을 인지하고 있으며 차차 개선해 나가고자 합니다!"*
22
+
23
+ → **학생 자가 의문 3개 + 한계 4개 명시 + 페어 프로그래밍 어휘 + TDD 학습 의도 + 시간 부족 인정**:
24
+
25
+ #### 1.1. *자가 한계 명시 4개*
26
+ - *각 객체 너무 많은 책임 (god-object)*
27
+ - *패키지 분리 안 됨*
28
+ - *상수 하드코딩 + if 난무 + 메서드 라인 ↑*
29
+ - *예외 처리 부재*
30
+
31
+ → **학생 자가 *코드 한계 자가 인지 정점*** = *MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘 정점*. PR #35 (hyemdooly 본인 자가 의문 3개) 결과 같은 어휘 = *학생 → reviewer 진화 후 학생 시기 어휘 일관*.
32
+
33
+ **MCP 룰 `student-self-limitations-explicit` 후보** — *학생 자가 한계 명시 = 학습 적극성 지표*.
34
+
35
+ ### 2. 학생 → reviewer 진화 메타 케이스 (hyemdooly 2년 학생 → reviewer)
36
+
37
+ - **2023년 3월**: hyemdooly = 학생 (PR #21 + PR #35 = 둘리 미션).
38
+ - **2025년 3월**: hyemdooly = reviewer (PR #130 medAndro 미션).
39
+
40
+ → **2년 학생 → reviewer 진화** = **krrong (PR #32 → PR #148·#151) 결과 같은 *학생 → reviewer 진화 패턴 2번째 사례***. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘 정점**.
41
+
42
+ #### 2.1. *학생 시기 hyemdooly 어휘 ↔ reviewer 시기 hyemdooly 어휘 일관성*
43
+
44
+ | 시기 | 어휘 |
45
+ |---|---|
46
+ | 2023 학생 (PR #21·#35) | PR 본문 자가 의문 3개 / 자가 의견 명시 / 도메인↔View 자가 입장 |
47
+ | 2025 reviewer (PR #130) | 학생 자가 의문 격려 / 양방향 토론 / 도메인↔View 자가 후퇴 |
48
+
49
+ → **학생 시기 자가 의문 어휘 → reviewer 시기 학생 자가 의문 격려 어휘** = *학습 시간성*. PR krrong 결과 같은 패턴.
50
+
51
+ **MCP 룰 `student-to-reviewer-evolution-meta` 강화** 누적 2+ PR (krrong + hyemdooly).
52
+
53
+ ### 3. 모든 25 스레드 학생 자가 답변 + commit SHA + 자가 후속 의문 5+ 회 (2025 코호트 정점)
54
+
55
+ - Thread 1: *InputView ↔ Player 생성 3-라운드 양방향 토론 + 외부글 (제리 테코톡 + 로또 PR 인용)*.
56
+ - Thread 6: *자료구조 ArrayDeque vs MutableList vs Stack vs Queue 자가 분석 + 페어 학습 인용*.
57
+ - Thread 11: *Deck object 의존성 문제 학생 자가 인지 + 대안 코드 제시*.
58
+ - Thread 15: *outputView.lineSeparator vs 함수 호출 위치 양방향 토론*.
59
+ - Thread 18: *outputView 함수 한번만 호출 학생 자가 한계 인정 + 학생 코드 제시 + reviewer 자가 한계 인정*.
60
+
61
+ → **PR #117·#129·#138·#126 결의 *학생 자가 학습 가시화 정점* 유지** + **2025 코호트 5 PR 합류**.
62
+
63
+ ### 4. ArrayDeque vs MutableList vs Stack vs Queue 자가 분석 (페어 학습)
64
+
65
+ reviewer (Thread 6): *"여러 자료구조 중에 `ArrayDeque`를 사용하신 이유가 무엇인지 궁금합니다!"*
66
+
67
+ 학생 자가 답변:
68
+
69
+ > *"카드를 한장씩 Pop해야 하는 상황에서 어떤 자료구조를 쓰면 좋을까 페어와 논의하다가 (페어의 제안 인용) 라는 페어의 제안으로 사용해보게 되었습니다.*
70
+ >
71
+ > *- ArrayDeque: 양쪽 끝에서 O(1) 시간 복잡도로 효율적인 추가/제거 작업 가능하며 메모리 효율적이지만, 제거 작업을 해도 내부 배열의 크기가 줄어들지 않음*
72
+ > *- MutableList: 끝에서 요소 추가/제거시 효율적이지만, 중간이나 처음에서 제거하는 작업은 O(n) 시간 복잡도로 비효율적*
73
+ > *- Stack: LIFO(Last-In-First-Out) 원칙을 따르며 한쪽 끝에서만 O(1) 시간 복잡도로 요소 추가/제거가 가능하지만 Java의 레거시 클래스로 성능 이슈 존재*
74
+ > *- Queue: FIFO(First-In-First-Out) 원칙을 따르며 한쪽 끝에서 추가하고 반대쪽 끝에서 제거하는 구조로, 자바의 Queue자체는 인터페이스이며 LinkedList나 ArrayDeque로 구현 가능*
75
+ >
76
+ > *라는걸 공부하게 되었고 현재로서는 ArrayDeque를 유지할 생각입니다."*
77
+
78
+ → **자료구조 4 안 자가 분석 + 페어 학습 + 다른 PR 인용**:
79
+
80
+ #### 4.1. *Kotlin 어휘 깊은 자가 학습*
81
+
82
+ PR #21·#23·#26·#58 결의 *카드덱 자료구조 (LinkedList vs ArrayDeque vs MutableList 뒤에서 pop)* 어휘 합류.
83
+
84
+ #### 4.2. *페어 학습 + 외부 인용*
85
+
86
+ 페어와의 토론 인용 + 다른 PR (`pull/128#discussion_r1986069929`) 인용 = **다른 학생의 학습 자가 참조**.
87
+
88
+ **MCP 룰 `peer-learning-cross-pr-reference` 후보** — *페어/다른 학생 학습 인용*.
89
+
90
+ ### 5. 블랙잭 룰 정확성 자가 학습 (딜러 블랙잭 vs 플레이어 21점)
91
+
92
+ reviewer (Thread 9):
93
+
94
+ > *"처음 2장의 카드가 에이스와 10(J·Q·K를 포함)으로 21점이 된 것을 '블랙잭'이라고 하며, 베팅액의 1.5배를 얻는다. 딜러가 블랙잭이라면 같은 블랙잭을 가진 플레이어를 제외한 모든 플레이어는 즉시 패배하며 베팅액을 잃는다. 딜러와 플레이어가 동시에 블랙잭인 경우에는 푸시(Push)라 하여 무승부가 된다. 푸시가 될 경우, 해당 플레이어는 자신이 베팅한 금액을 돌려받는다.*
95
+ >
96
+ > *딜러가 블랙잭인 경우에도 고려해주셔야 합니다! 딜러가 블랙잭(A + 10인 카드)이고 플레이어가 블랙잭이 아니지만 합이 21인 경우에도 딜러 승리입니다. 🥲"*
97
+
98
+ 학생: *"이런 룰을 몰랐습니다... 반영 해보겠습니다!"*
99
+
100
+ → **reviewer 가 *블랙잭 도메인 룰 인용 + 학생 자가 도메인 학습***:
101
+
102
+ #### 5.1. *블랙잭 룰 정확성 = 도메인 깊이*
103
+
104
+ - *블랙잭 (A + 10) 2장 = 즉시 21*.
105
+ - *딜러 블랙잭 vs 플레이어 21 (3장 이상) = 딜러 승리*.
106
+ - *딜러 vs 플레이어 동시 블랙잭 = 푸시 (DRAW)*.
107
+
108
+ PR #20·#64·#110·#28·#125·#147·#36·#26·#138 결의 *블랙잭 1.5배 룰 정확성* 어휘 강화.
109
+
110
+ **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 15+ PR ⭐⭐⭐.
111
+
112
+ ### 6. Deck object (싱글턴) 문제 학생 자가 인지 + 대안 제시
113
+
114
+ reviewer (Thread 11):
115
+
116
+ > *"덱에서 카드를 뽑는다는 것을 코드를 들어가서 보지 않으면 알기 어려워 보여요! object인 Deck을 도메인 모델 여기저기서 사용한다면 어떤 어려움이 있을 수 있을까요?"*
117
+
118
+ 학생 자가 답변 + 대안 코드 제시:
119
+
120
+ > *"의도치 않은 도메인에서 접근해서 덱이 보유한 카드를 소진시켜 버리는 문제가 발생하고 Deck이 여러 도메인과 결합되어 추후에 수정하기 까다로워질 같네요. 그리고 항상 Deck이 랜덤으로만 카드를 보관하고 있어서 테스트 하기 어려운것 같습니다.*
121
+ >
122
+ > *Deck이 Object가 아니라고 한다면 `Deck.giveCard()` 같은 코드는 애초에 불가능하고 컨트롤러에서 아래와 같이 덱 인스턴스에서 뽑아 직접 꽂아주며*
123
+ > ```kt
124
+ > player1.handCards.addCard(deck.giveCard())
125
+ > ```
126
+ > *GameParticipant 입장에서는 덱이 주든 딜러가주든 관심 없게끔 해야 할 것 같네요"*
127
+
128
+ → **Singleton Deck 안티패턴 자가 인지 4 가지**:
129
+ 1. *의도치 않은 접근 → 카드 소진 부작용*.
130
+ 2. *Deck ↔ 여러 도메인 결합 ↑*.
131
+ 3. *테스트 어려움 (항상 랜덤)*.
132
+ 4. *GameParticipant 가 카드 출처 모름 = Tell-Don't-Ask 정공*.
133
+
134
+ **MCP 룰 `singleton-deck-via-companion` 강화** 누적 19+ PR ⭐⭐⭐.
135
+
136
+ 다만 *학생 답변 *현재로서는 ArrayDeque를 유지할 생각* (Thread 6)* — *Singleton 자가 인지 vs 시간 부족 정공 X 양가성*.
137
+
138
+ ### 7. 학생 ↔ reviewer 양방향 토론 + 외부글 + 외부 PR 인용 (InputView ↔ Player 생성)
139
+
140
+ reviewer (Thread 1): *"`InputView`에서 `Player`를 생성해서 넘겨주지 않은 이유가 있으신가요?"*
141
+
142
+ 학생 자가 답변 (1라운드):
143
+
144
+ > *"이전 미션에서 `InputView`의 역할은 사용자의 입력을 받아 입력값을 가능한 원형을 유지한 채 컨트롤러로 전송하는것으로 이해했습니다. `Player`를 생성하는건 단순히 데이터를 담아서 넘겨주는게 아닌가? 싶기도 했는데 뷰에서 도메인 객체를 만들 때 예외가 발생한다면 도메인의 예외처리를 inputView에서 하게 되어 도메인의 역할을 침범하게 될 것 같다고 생각했습니다."*
145
+
146
+ reviewer (2라운드):
147
+
148
+ > *"아하! InputView에서 도메인을 몰라야한다면, OutputView에서 동일하게 몰라야할 것 같은데 OutputView에서는 참조를 하고 있어서 리뷰 드렸어요. 그렇다고 해서 뷰를 위한 모델을 만드는 것은 지금 단계에서 과할 수도 있다고 생각하는데, 이 부분은 크루들과 같이 얘기해보면 좋을 것 같아요!"*
149
+
150
+ 학생 자가 답변 (3라운드 + 외부 자료):
151
+
152
+ > *"처음엔 [3기 제리의 테코톡](https://youtu.be/ogaXW6KPc8I?t=236) 을 참고해서 View에서는 모델을 참조하거나 만들어도 되겠구나 라고 생각했었는데 [로또 리뷰 과정](https://github.com/woowacourse/kotlin-lotto/pull/127/files/00ec1f0f347e9f68fe406cf135068d75e602a6d1#r1965102144)에서 참조만 가능하고 생성은 불가능하게 하는게 좋겠다는 결론을 내려서 현재와 같아졌습니다. 다음 단계로 나아가면 DTO를 써야 할 것 같네요 현재단계에선 언급해주신대로 과한것 같구요...!"*
153
+
154
+ → **3 라운드 양방향 토론 + 외부글 (테코톡) + 외부 PR 인용 (로또 #127)**:
155
+
156
+ #### 7.1. *외부 자료 다양성*
157
+
158
+ - *3기 제리 테코톡* (선배 학생 자료).
159
+ - *로또 PR #127* (현재 미션 직전 학생 PR).
160
+
161
+ PR #87·#36·#21·#117·#129 결의 *외부글 + 자가 학습* 어휘 강화.
162
+
163
+ #### 7.2. *학생 자가 *View → DTO* 진화 의식*
164
+
165
+ 학생 *"다음 단계로 나아가면 DTO를 써야 할 것 같네요"* = *현재 단계 적절성 + 미래 단계 확장 의식*.
166
+
167
+ PR #21·#35 (hyemdooly 본인 학생 시기 `SuitModel/RankModel`) 결의 *미래 학습 어휘* 와 *시간 일치 (2년 후 medAndro 동일 의문)*.
168
+
169
+ **MCP 룰 `view-model-future-learning-awareness` 후보**.
170
+
171
+ ### 8. `enum Number` Suit/CardNumber 상수화
172
+
173
+ reviewer (Thread 3):
174
+
175
+ > *"suit, cardNumber를 상수화한다면 어떨까요? 스페이드, 하트, 다이아몬드, 클로버 / ACE, J, Q, K,... 더 명시적으로 표현할 수 있고, 점수도 갖고 있게 할 수 있으니, 점수 계산할 때도 편할 것 같아요!"*
176
+
177
+ 학생 자가 적용 (수정 후 `enum Number` 자가 구현):
178
+
179
+ ```kotlin
180
+ enum class Number(val value: List<Int>, val orderNumber: Int, val initial: String) {
181
+ ACE(listOf(1, 11), 1, "A"),
182
+ TWO(listOf(2), 2, "2"),
183
+ ...
184
+ }
185
+ ```
186
+
187
+ → **enum 변환 정공** = PR #117·#20·#28·#125 결.
188
+
189
+ **`Number` 클래스 명명 양가** — *Kotlin 표준 `kotlin.Number` 와 충돌 위험*. **MCP 룰 `class-name-vs-stdlib-collision` 후보**.
190
+
191
+ ### 9. `Rule` god-object 자가 인지 + class → object 변환
192
+
193
+ reviewer (Thread 4):
194
+
195
+ > *"class에 companion object만 있다면 class를 object로 만드는 것이 좋겠어요. 추가로, Rule이 하는 일을 각 객체에게 주어, 객체가 스스로 일을 하도록 하면 어떨까요?"*
196
+
197
+ 학생: *"object라는게 있다는걸 푸시하고 페어와 함께 서로 알게 되었습니다. (...) PR에서 언급했듯 각각의 객체, 특히 Rule이 너무 많은 일을 하는 것 같아서 책임을 분리하는 방향으로 리팩터링 해봐야 겠습니다!"*
198
+
199
+ → **Kotlin object 자가 학습** + **Rule god-object 자가 인지 (PR 본문에 명시 후 학생 자가 적용 권유)**.
200
+
201
+ **MCP 룰 `class-with-only-companion-to-object` 후보**. PR #117 (stateless 클래스 인스턴스화 vs companion) 결 강화.
202
+
203
+ ### 10. 추가 칭찬
204
+
205
+ - Thread 5: *"todo 주석 활용 👍"* — `// TODO` 주석 사용.
206
+ - Thread 19: *"손에 쥐고 있는 카드들이 직접 일을 하고 있네요 👍"* (HandCards Tell-Don't-Ask).
207
+
208
+ ## 못한 점 (설계 관점)
209
+
210
+ ### 1. `inputView` `outputView` private 처리 — 1단계 학습 시간성 한계
211
+
212
+ reviewer (Thread 2):
213
+
214
+ > *"inputView, outputView는 외부에서 사용하지 않도록 private 처리를 하면 좋겠어요!"*
215
+
216
+ 학생: *"이전 로또 미션에서도 받은 리뷰라 반성중입니다..."*
217
+
218
+ → **학습 시간성 한계 자가 인정** — *이전 미션 리뷰 재발*. **MCP 룰 `repeated-feedback-across-missions` 후보** — *미션 간 학습 시간성 한계*.
219
+
220
+ ### 2. `show` 이름 의미 vs 실제 (카드 리턴)
221
+
222
+ reviewer (Thread 7): *"`show`이지만 카드를 리턴하는 역할을 하고 있어요. 바꿔볼 수 있을까요?"*
223
+
224
+ 학생: *"확실히 잘못된 이름이네요 고민해서 바꿔보겠습니다"*
225
+
226
+ → **이름 의미 정확성** — PR #117 (createCardRank), PR #129 (이름 = 의미), PR #36 (decideAceValue) 결의 *이름 vs 실제 반환 의미 불일치*. **MCP 룰 `function-name-vs-return-semantic-mismatch` 강화** 누적 4+ PR.
227
+
228
+ ### 3. `WinLossStatistics` 도메인 vs View 책임
229
+
230
+ reviewer (Thread 8):
231
+
232
+ > *"아직 이쪽을 더 수정하겠다고 하셨지만 코멘트 조금 남겨봅니다! 출력을 위한 `String` 생성은 도메인이 아닌 뷰의 역할 아닐까요? 🤔"*
233
+
234
+ 학생: *"확실하게 뷰의 역할이 맞다고 생각합니다 (...) OutputView에서 처리 시켜 보겠습니다."*
235
+
236
+ → **String 생성 = View 책임** = PR #126 (Verdict 문자열 = View 책임) 결 합류. **MCP 룰 `string-formatting-view-responsibility` 후보**.
237
+
238
+ ### 4. `Deck = object (싱글턴)` 의 도메인 결합 문제 — §6 참조
239
+
240
+ 학생 자가 인지. **MCP 룰 `singleton-deck-via-companion` 강화** 누적 19+ PR.
241
+
242
+ ### 5. `drawCard` 위임 vs `handCards.addCard(deck.giveCard())` Tell-Don't-Ask
243
+
244
+ reviewer (Thread 11 후속): *"handCards에 다이렉트로 꽂기보다, drawCard에 넘기는 형태면 더 객체가 일을 하는 형태가 될 것 같아요!"*
245
+
246
+ → **Tell-Don't-Ask 정공** — *handCards.addCard 외부 호출 vs player.drawCard(card) 메시지 던지기*. PR #87·#129·#138·#126 결 합류.
247
+
248
+ ### 6. DSL Study 코드 = test 에 옮김
249
+
250
+ reviewer (Thread 12): *"DSL Study로 사용한 코드들은 test 코드에 같이 포함해도 되지 않을까요? test에만 사용하고 있으니까요!"*
251
+
252
+ → **production vs test 코드 분리** — *DSL 학습 코드 = production 의도 X*. PR #35 (hyemdooly *DSL 활용 시점*) 결의 *학생 → reviewer 진화 일관* (학생 시기 DSL 권유 → reviewer 시기 DSL 위치 권유).
253
+
254
+ **MCP 룰 `production-vs-test-code-separation` 후보**.
255
+
256
+ ### 7. `Deck.giveCard()` 테스트 = 카드 생성 + 반환만? — 유효 테스트
257
+
258
+ reviewer (Thread 13):
259
+
260
+ > *"`giveCard`를 했는데 안에서 카드를 생성해서 주기만 한다면 어떨까요? 유효한 테스트 코드라고 할 수 있을까요?"*
261
+
262
+ 학생: *"`덱의 카드를 한장 줄 수 있다`라고 바꾸고 카드의 수량이 줄어드는지도 검사해야 할 것 같습니다"*
263
+
264
+ → **테스트 = 동작 명세 (단순 동작 + 부작용 검증)** = PR #87·#129 결의 *테스트 = 객체 설계 명세서* 어휘. **MCP 룰 `test-side-effect-verification` 후보**.
265
+
266
+ ### 8. `PlayerTest` 가 Deck object 사용 = 외부에서 카드 출처 확인 불가
267
+
268
+ reviewer (Thread 14):
269
+
270
+ > *"이 코드만 보더라도 덱에서 카드를 뽑는지 겉으로 봐서는 알 수 없어요. `drawCard` 함수에서 카드를 생성해서 추가하기만 해도, 이 테스트는 통과할거에요!"*
271
+
272
+ 학생 자가 답변:
273
+
274
+ > *"이것도 덱이 Object라서 발생하는 문제 같습니다. 카드 인스턴스를 한장 전달받아 손패에 추가하면 애초에 이런 테스트가 안 생기겠네요"*
275
+
276
+ → **테스트 = 코드 의도 가시화 도구 + Singleton 의 테스트 문제 자가 인지**. PR #87·#129·#138 결의 *테스트 가능성 = 객체 설계 지표* 어휘.
277
+
278
+ ### 9. `outputView 함수 한번만 호출` — 학생 자가 한계 + reviewer 자가 한계 (4 라운드 양방향 토론)
279
+
280
+ reviewer (Thread 18): *"이 OutputView 함수를 한번만 쓰도록 수정해볼 수 있을까요?"*
281
+
282
+ 학생 자가 한계 인정 + 코드 제시:
283
+
284
+ > *"몇시간 고민해봤는데 답을 못찾겠습니다. 히트를 하면 한장을 드로우하고 카드 정보를 표시해야하고 히트를 한번 이상 하고 스테이 할 경우 카드 정보를 표시하지 말하야 하고 히트를 한번도 하지 않고 스테이 했을떄는 카드 정보를 표시해야 하는걸 다 지켜가면서 (...) 이런 코드는 짰는데 depth문제도 있고 딱봐도 정답은 아닌것 같네요... 힌트 부탁드립니다."*
285
+
286
+ reviewer 자가 한계 인정:
287
+
288
+ > *"아 제가 이 조건을 놓쳤군요 😢😢😢 저도 해봤는데 메다가 올려주신 코드가 최선이네요.. 이 리뷰는 넘겨주세요! 정말정말 미안해요!!🧎‍♀️"*
289
+
290
+ 학생: *"아니에요 고민하는 과정에서 저도 공부가 많이 되었어요 ☺️"*
291
+
292
+ → **4 라운드 양방향 토론 + 학생 자가 한계 + reviewer 자가 한계 인정 + 학생 격려**:
293
+
294
+ #### 9.1. *reviewer 자가 후퇴 (강한 어휘)*
295
+
296
+ PR #87·#129·#126 결의 *reviewer 자가 한계 인정* 어휘 정점. *"정말정말 미안해요!!"* = *강한 사과 어휘* = *학습 가시화 가치*.
297
+
298
+ **MCP 룰 `reviewer-self-limitation-explicit-apology` 후보** — *reviewer 가 자가 한계 강한 어휘 인정*.
299
+
300
+ #### 9.2. *학생이 reviewer 부담 최소화*
301
+
302
+ 학생 *"고민하는 과정에서 저도 공부가 많이 되었어요"* = *reviewer 부담 최소화 + 학습 가시화*.
303
+
304
+ ### 10. `Translator` 과한 구현 — Locale 변환
305
+
306
+ reviewer (Thread 16): *"이렇게 Locale에 따라 변환하는건 요구사항이 아니었는데 꼭 필요할까요? 🤔"*
307
+
308
+ 학생:
309
+
310
+ > *"`가령 2하트 라고 출력하는 것을 화면에 따라 ❤️2 이렇게 출력할지도 모릅니다.` 라는 다른 리뷰어의 리뷰를 우연히 보고 Suit enum을 Output에서 그대로 받아 처리해야 한다고 생각했고 더 나아가 현재는 한국어로만 출력하지만 다르게 출력하려면 어떻게 해야 할까 고민해 보다가 저렇게 구현해 보았습니다. 결론은 꼭 필요하지는 않지만 이미 구현해놓은걸 수정할 이유도 없어보입니다."*
311
+
312
+ → **YAGNI 위반 자가 인지 + 이미 구현된 코드 제거 비용** — *YAGNI (You Aren't Gonna Need It) 트레이드오프*. PR #146 결 어휘 합류.
313
+
314
+ **MCP 룰 `yagni-violation-removal-cost` 후보** — *YAGNI 위반 자가 인지 vs 제거 비용*.
315
+
316
+ ### 11. 초기 카드 장수 = 도메인 vs 컨트롤러
317
+
318
+ reviewer (Thread 17): *"초기 카드 장수를 컨트롤러가 들고 있는 이유는 무엇일까요?"*
319
+
320
+ 학생:
321
+
322
+ > *"플레이어의 카드를 초기화하는 등의 게임 진행 역할은 컨트롤러가 맡아야 하고 그때 필요한 상수라서 들고 있게 했던 것 같습니다. 초기 카드가 2장이라는 것은 게임의 본질적인 규칙이라 도메인이 가지는게 맞을 것 같고 HandCards에게 줄 것 같습니다."*
323
+
324
+ → **도메인 룰 = 도메인 상수 위치** = *INIT_CARD_SIZE = 도메인*. PR #129·#138 결.
325
+
326
+ **MCP 룰 `domain-constant-locator` 후보** — *도메인 룰 상수 위치 = 도메인*.
327
+
328
+ ### 12. `backing property` 학습 권유
329
+
330
+ reviewer (Thread 20): *"backing property에 대해 배우셨다면 활용해보세요!"*
331
+
332
+ → **Kotlin 어휘 자가 학습 권유** = PR #117 결.
333
+
334
+ ### 13. 테스트 fixture 초기값 세팅 - vararg 부생성자 자가 학습
335
+
336
+ reviewer (Thread 21): *"초기값을 세팅하기 위해 일일히 add하고 있군요! 더 간단하게 세팅할 방법이 없을까요?"*
337
+
338
+ 학생:
339
+
340
+ ```kt
341
+ class HandCards(
342
+ private val cards: MutableList<Card> = mutableListOf(),
343
+ )
344
+ ```
345
+ *로 HandCards를 수정하면 간단해 질 것 같아요...!"*
346
+
347
+ → **테스트 fixture 부생성자 자가 학습** = PR #126 (test-fixture-secondary-constructor) 결 합류.
348
+
349
+ ### 14. `CardStatus` 자가 계산 vs `HandCards` 자가 계산
350
+
351
+ reviewer (Thread 22): *"손에 쥔 카드들이 직접 자신의 상태를 계산한다면 어떨까요?"*
352
+
353
+ 학생:
354
+
355
+ > *"`CardStatus`가 직접 카드를 보고 `CardStatus`를 알려주는게 직관적인거 같고 이곳 저곳에서 불러다가 사용할 것 같아서 추가했었습니다. `calculateCardsStatus()`는 `HandCards` 클래스 에서만 사용하고 있고 앞으로도 그럴 것 같아서 옮겨볼게요!"*
356
+
357
+ → **상태 계산 책임 위치** — *enum companion 정적 vs HandCards 자가 계산*. **MCP 룰 `state-calculation-locator` 후보**. PR #117 (stateless 클래스 vs companion) 결.
358
+
359
+ ### 15. `orderNumber` 멤버 — enum 제공 기능 (ordinal) 활용
360
+
361
+ reviewer (Thread 23):
362
+
363
+ > *"`orderNumber`을 선언해주신 이유가 있으실까요? 순서때문이라면 `enum class`가 제공해주는 것들을 사용해서 다른 방법이 있을 것 같아요!"*
364
+
365
+ 학생: *getByOrderNumber 메서드 수정 + orderNumber 삭제 자가 적용*.
366
+
367
+ → **enum.ordinal 활용** — *Kotlin enum 자가 학습*. **MCP 룰 `enum-ordinal-vs-custom-property` 후보**.
368
+
369
+ ### 16. `Card(cardIndex: Int)` 부생성자 — 카드 섞기 의도 vs 도메인 위반
370
+
371
+ reviewer (Thread 24): *"Card를 생성할 때, cardIndex를 받아서 이렇게 계산해야만 할까요? 🤔 사실 카드 몇 번째가 어떤 문양과 번호인지는 관심사가 아닌 것 같은데.. 복잡한 것 같아요…"*
372
+
373
+ 학생 자가 답변:
374
+
375
+ > *"Deck에서 (...) 와 같이 섞여있는 카드를 쉽게 만들 수 있게 하기 위해서 고안된 부 생성자입니다. 전체 카드 인스턴스를 순서대로 일단 생성하고 섞는 방법도 생각해 보았는데 카드번호와 문양 조합 전부를 한장씩 가진 카드 컬렉션을 이중 for문을 사용하거나 flatMap을 사용해하여 생성한 뒤 섞는 방법만 생각나서 오히려 더 복잡해질 것 같아 이렇게 처리했습니다. 더 쉬운 방법이 떠오르진 않네요..."*
376
+
377
+ → **인덱스 기반 Card 생성 = 도메인 의미 누수** — *Card 의 도메인 의미 = (number, suit) / cardIndex = Deck 내부 위치*. **MCP 룰 `card-index-vs-card-identity` 후보**.
378
+
379
+ #### 16.1. *대안 3 가지*
380
+
381
+ | 안 | 장점 | 단점 |
382
+ |---|---|---|
383
+ | `Card(cardIndex)` (현재) | *Deck.shuffled().map { Card(it) } 간결* | *Card 가 cardIndex 알아야 함 = 도메인 누수* |
384
+ | `Card(number, suit)` + Deck flatMap | *Card 가 도메인 의미만* | *Deck 이 이중 for/flatMap 복잡* |
385
+ | `Card.entries` (sealed/enum) | *모든 카드 자가 정의* | *52 케이스 enum* |
386
+
387
+ ### 17. `Deck` 안에서 카드 생성 자연스러운가?
388
+
389
+ reviewer (Thread 25): *"Deck 안에서 카드를 생성하는 것이 자연스러운 걸까요? 🤔"*
390
+
391
+ 학생 자가 답변:
392
+
393
+ > *"블랙잭 모듈 내에서 싱글턴으로 랜덤한 카드를 들고 있어야 하는 환경에서는 자연스러운 것 같은데 외부에서 카드 컬렉션을 받아서 초기화 되는 덱이라면 이상한 것 같네요..."*
394
+
395
+ → **Singleton 의도 vs DI 의도 트레이드오프**:
396
+
397
+ | 안 | 장점 | 단점 |
398
+ |---|---|---|
399
+ | Deck object + 자가 생성 (현재) | *Singleton + 카드 자동 생성* | *DI 불가 + 테스트 어려움* |
400
+ | `class Deck(cards: List<Card>)` + 외부 주입 | *DI 정공 + 테스트 가능* | *생성자가 cards 받음* |
401
+ | `class Deck` + companion factory `from(cards)` | *factory 패턴 + 명시적 생성* | *companion ↑* |
402
+
403
+ PR #138 (학생 자가 interface Deck 분리) 결의 *Deck 테스트 가능성* 어휘 합류.
404
+
405
+ ### 18. `outputView.lineSeparator` Controller → OutputView 책임
406
+
407
+ reviewer (Thread 15): *"이런 함수는 다음에 나올 outputView 함수에 껴넣을 수 있을 것 같다는 생각이 들어요. 🤔 콘솔이 아닌 다른 뷰로 플랫폼이 바뀐다면?! 이라는 생각이 드네요!"*
408
+
409
+ 학생 자가 답변:
410
+
411
+ > *"`outputView.lineSeparator()` 한정으로는 OutputView 책임인데 컨트롤러로 잘못 들어간게 맞다고 생각합니다. (다른 코드 선택 의문)"*
412
+
413
+ → **lineSeparator = OutputView 책임 자가 인지** + **학생 코드 선택 의문 (드래그 오류)** = *양방향 토론 명료성 어휘*.
414
+
415
+ reviewer 자가 후속 (드래그 오류 인정): *"오우 제가 드래그를 잘못했군요?!"* — **reviewer 자가 한계 인정 어휘** (Thread 15·18 합쳐 2 자리 이상).
416
+
417
+ ### 19. 학생 코드 한계 자가 인지 vs reviewer 자가 한계 인정 = 양방향 학습 시간성
418
+
419
+ §9 §15 참조. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘 정점**.
420
+
421
+ ### 20. `Player.isDrawFinish() = handCards.getStatus() == CardStatus.BUST` — 21 시 hit 가능
422
+
423
+ ```kotlin
424
+ override fun isDrawFinish(): Boolean = handCards.getStatus() == CardStatus.BUST
425
+ ```
426
+
427
+ → **Player BUST 시점 hit 종료** = *PR #129·#138·#139·#126 결과 동일 (21 시 hit 가능)*. *PR #35 (hyemdooly *21 시 stop*) 반대 시점*.
428
+
429
+ 다만 *hyemdooly = reviewer 본인 (학생 시기 21 시 stop 적용)* → *reviewer 가 학생 코드 *21 시 hit 가능* 명시 X* = *학생 자가 자율*.
430
+
431
+ **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 15+ PR ⭐⭐⭐.
432
+
433
+ ### 21. `Dealer.isDrawFinish() = bestCardValue <= DEALER_DRAW_LIMIT` 명명 양가
434
+
435
+ ```kotlin
436
+ override fun isDrawFinish(): Boolean {
437
+ val bestCardValue = handCards.calculateBestCardValue()
438
+ return bestCardValue <= DEALER_DRAW_LIMIT
439
+ }
440
+
441
+ companion object {
442
+ private const val DEALER_DRAW_LIMIT = 16
443
+ }
444
+ ```
445
+
446
+ → **`isDrawFinish` 명명 양가** — *DrawFinish (그리기 종료) vs isDrawable (그릴 수 있음)*.
447
+
448
+ 학생 코드의 *`isDrawFinish() return bestCardValue <= 16`* = *16 이하 시 종료* = **블랙잭 룰 와전**:
449
+ - 블랙잭 표준 = *Dealer 16 이하 = hit (계속) / 17 이상 = stop (종료)*.
450
+ - 학생 코드 = *16 이하 → finish = true (종료)* = **반대 시점**.
451
+
452
+ 대안: *`isDrawFinish() return bestCardValue > 16`* (17 이상 시 finish).
453
+
454
+ **MCP 룰 `boolean-method-semantic-inversion` 후보** — *Boolean 메서드 의미 반전 = 호출자 혼동*. PR #117·#139 (turn 반환 의미 역방향) 결 합류.
455
+
456
+ ### 22. `CardStatus.calculateCardsStatus(cards: Collection<Card>)` — 외부에서 cards 받아 계산
457
+
458
+ ```kotlin
459
+ enum class CardStatus {
460
+ BLACKJACK, BUST, NORMAL;
461
+
462
+ companion object {
463
+ const val BLACKJACK_NUMBER = 21
464
+
465
+ fun calculateCardsStatus(cards: Collection<Card>): CardStatus = when {
466
+ cards.size == INIT_CARD_SIZE && cards.sumOf { it.getMaximumValue() } == BLACKJACK_NUMBER -> BLACKJACK
467
+ cards.sumOf { it.getMinimumValue() } > BLACKJACK_NUMBER -> BUST
468
+ else -> NORMAL
469
+ }
470
+ }
471
+ }
472
+ ```
473
+
474
+ → **enum companion 정적 메서드 + cards 외부 인자** = *Tell-Don't-Ask 부분 위반*. reviewer (Thread 22) 권유 = *HandCards 가 자가 계산*. 학생 자가 적용 권유.
475
+
476
+ ### 23. `Card.getMinimumValue() / getMaximumValue()` Ace 양가성
477
+
478
+ ```kotlin
479
+ fun getMinimumValue(): Int = number.value.first() // ACE = 1
480
+ fun getMaximumValue(): Int = number.value.last() // ACE = 11
481
+ ```
482
+
483
+ → **Ace 1↔11 양가 표현** — *value: List<Int>* 자가 활용. *NUMBER 가 multi-value 보유 (Ace: [1, 11])* = 정공.
484
+
485
+ PR #117·#138 결의 *Ace soft/hard 처리* 변형 — *List<Int> + first/last* 활용.
486
+
487
+ ### 24. `Number` 클래스 명명 = `kotlin.Number` 충돌 위험
488
+
489
+ ```kotlin
490
+ enum class Number(...)
491
+ ```
492
+
493
+ → **`kotlin.Number` 표준 클래스 명명 충돌 위험**. *import 시 명시 필요* + *호출자 가독성 ↓*.
494
+
495
+ 대안: `CardNumber` / `Rank` / `CardValue`.
496
+
497
+ **MCP 룰 `class-name-vs-stdlib-collision` 후보** — *표준 라이브러리 명명 충돌*.
498
+
499
+ ### 25. `HandCards.cards: MutableList<Card>` private — backing property 자가 적용
500
+
501
+ ```kotlin
502
+ class HandCards {
503
+ private val cards: MutableList<Card> = mutableListOf()
504
+
505
+ fun currentCards(): List<Card> = cards.toList()
506
+ ...
507
+ }
508
+ ```
509
+
510
+ → **mutable list private + `currentCards()` toList 방어적 복사** = PR #21·#117·#138 결의 *backing property + 방어적 복사* 일관.
511
+
512
+ reviewer (Thread 20) *"backing property에 대해 배우셨다면 활용해보세요!"* — *현재 안 OK + 추가 학습*.
513
+
514
+ ## 리뷰어 의견 요지
515
+
516
+ - **InputView 의 Player 생성 vs InputView 책임 한계** — 3 라운드 양방향 토론 + 외부 자료.
517
+ - **inputView/outputView private 처리** — 이전 미션 학습 시간성 한계.
518
+ - **suit/cardNumber 상수화 (enum)** — 명시적 표현 + 점수 보유.
519
+ - **class에 companion object만 있다면 → object 변환** + Rule god-object.
520
+ - **todo 주석 활용 칭찬**.
521
+ - **ArrayDeque 자료구조 자가 분석 (페어 학습)**.
522
+ - **`show` 이름 vs 카드 리턴 의미 불일치**.
523
+ - **String 생성은 도메인 vs View 책임 (WinLossStatistics)**.
524
+ - **블랙잭 룰 정확성 자가 학습 (딜러 블랙잭 vs 플레이어 21)**.
525
+ - **Deck object 의존성 문제 + 학생 자가 인지 + 대안 코드**.
526
+ - **DSL Study 코드 = test 에**.
527
+ - **Deck.giveCard 테스트 = 카드 수량 감소 검증**.
528
+ - **PlayerTest 가 Deck object 사용 = 외부에서 카드 출처 확인 불가**.
529
+ - **outputView.lineSeparator OutputView 책임 + reviewer 드래그 오류 자가 인정**.
530
+ - **Translator 과한 구현 (YAGNI 위반)**.
531
+ - **초기 카드 장수 = 도메인 상수**.
532
+ - **outputView 함수 한번만 호출 4 라운드 양방향 + reviewer 자가 한계 인정**.
533
+ - **HandCards 자가 일 칭찬**.
534
+ - **backing property 학습 권유**.
535
+ - **테스트 fixture 부생성자 자가 학습**.
536
+ - **CardStatus 자가 계산 vs HandCards 자가 계산**.
537
+ - **orderNumber 멤버 vs enum.ordinal 활용**.
538
+ - **Card(cardIndex) 부생성자 의도 vs 도메인 누수**.
539
+ - **Deck 안에서 카드 생성 자연스러운가? (DI vs Singleton)**.
540
+
541
+ ## 대표 인용
542
+
543
+ > [medAndro PR 본문]
544
+ > *"가장 마지막에 구현한 `WinLossStatistics` 클래스의 로직들은 TDD로는 구현하였으나 상수를 하드코딩하고 if문이 난무하고 메서드의 라인수가 길어지는 문제, `GameParticipant`의 `abstract fun play()`의 미사용, 예외 처리의 부재 등 여러 시간부족 이슈등으로 발생한 문제들을 인지하고 있으며 차차 개선해 나가고자 합니다!"*
545
+
546
+ → **학생 자가 한계 4 종 명시 + 시간 부족 인정**.
547
+
548
+ > [hyemdooly Thread 18]
549
+ > *"아 제가 이 조건을 놓쳤군요 😢😢😢 저도 해봤는데 메다가 올려주신 코드가 최선이네요.. 이 리뷰는 넘겨주세요! 정말정말 미안해요!!🧎‍♀️"*
550
+
551
+ → **reviewer 자가 한계 강한 어휘 인정 + 사과**. **MCP 핵심 가치 합류 정점**.
552
+
553
+ > [medAndro Thread 18]
554
+ > *"아니에요 고민하는 과정에서 저도 공부가 많이 되었어요 ☺️"*
555
+
556
+ → **학생이 reviewer 부담 최소화 + 학습 가시화**.
557
+
558
+ > [medAndro Thread 11]
559
+ > *"의도치 않은 도메인에서 접근해서 덱이 보유한 카드를 소진시켜 버리는 문제가 발생하고 Deck이 여러 도메인과 결합되어 추후에 수정하기 까다로워질 같네요. 그리고 항상 Deck이 랜덤으로만 카드를 보관하고 있어서 테스트 하기 어려운것 같습니다."*
560
+
561
+ → **Singleton 안티패턴 4 가지 자가 인지** — *부작용 + 결합 + 테스트 + Tell-Don't-Ask 위반*.
562
+
563
+ > [hyemdooly Thread 9]
564
+ > *"딜러가 블랙잭이라면 같은 블랙잭을 가진 플레이어를 제외한 모든 플레이어는 즉시 패배하며 베팅액을 잃는다. (...) 딜러가 블랙잭(A + 10인 카드)이고 플레이어가 블랙잭이 아니지만 합이 21인 경우에도 딜러 승리입니다. 🥲"*
565
+
566
+ → **블랙잭 도메인 룰 인용 + 학생 자가 도메인 학습** — *reviewer 가 도메인 룰 깊이 명시*.
567
+
568
+ > [medAndro Thread 1]
569
+ > *"처음엔 3기 제리의 테코톡 을 참고해서 View에서는 모델을 참조하거나 만들어도 되겠구나 라고 생각했었는데 로또 리뷰 과정에서 참조만 가능하고 생성은 불가능하게 하는게 좋겠다는 결론을 내려서 현재와 같아졌습니다. 다음 단계로 나아가면 DTO를 써야 할 것 같네요"*
570
+
571
+ → **외부 자료 다양성 (테코톡 + 다른 PR) + 미래 학습 의식**.
572
+
573
+ ## 얻은 교훈 (보편)
574
+
575
+ 1. **학생 → reviewer 진화 메타 케이스 (hyemdooly 2년)** — *krrong 결과 같은 패턴 2번째*. **MCP 룰 `student-to-reviewer-evolution-meta` 강화** 누적 2+ PR.
576
+
577
+ 2. **PR 본문 자가 한계 4 종 명시 + 시간 부족 인정** — *학생 자가 한계 명시 = 학습 적극성*. **MCP 룰 `student-self-limitations-explicit` 후보**.
578
+
579
+ 3. **3-4 라운드 양방향 토론 + 외부 자료 + 외부 PR 인용** — *학생 ↔ reviewer 깊이*. PR #87·#129·#138·#117 결 강화.
580
+
581
+ 4. **자료구조 4 안 자가 분석 + 페어 학습** — *ArrayDeque/MutableList/Stack/Queue*. **MCP 룰 `peer-learning-cross-pr-reference` 후보**.
582
+
583
+ 5. **블랙잭 룰 정확성 자가 학습 (딜러 블랙잭 vs 플레이어 21)** — *도메인 룰 깊이*. **MCP 룰 `blackjack-rule-fidelity-comparison` 강화** 누적 15+ PR ⭐⭐⭐.
584
+
585
+ 6. **Singleton Deck 안티패턴 4 가지 자가 인지** — *부작용 + 결합 + 테스트 + Tell-Don't-Ask 위반*. **MCP 룰 `singleton-deck-via-companion` 강화** 누적 19+ PR ⭐⭐⭐.
586
+
587
+ 7. **이전 미션 리뷰 재발 (`inputView` private)** — *학습 시간성 한계*. **MCP 룰 `repeated-feedback-across-missions` 후보**.
588
+
589
+ 8. **함수 이름 vs 실제 반환 의미 불일치 (`show`)** — **MCP 룰 `function-name-vs-return-semantic-mismatch` 강화** 누적 4+ PR.
590
+
591
+ 9. **String 생성 = View 책임 (PR #126 결)** — **MCP 룰 `string-formatting-view-responsibility` 후보**.
592
+
593
+ 10. **DSL Study 코드 = test 위치 (production vs test 분리)** — **MCP 룰 `production-vs-test-code-separation` 후보**.
594
+
595
+ 11. **테스트 = 동작 명세 + 부작용 검증** — **MCP 룰 `test-side-effect-verification` 후보**.
596
+
597
+ 12. **reviewer 자가 한계 강한 어휘 인정 + 사과** — *"정말정말 미안해요!!"*. **MCP 룰 `reviewer-self-limitation-explicit-apology` 후보**.
598
+
599
+ 13. **YAGNI 위반 자가 인지 vs 제거 비용 (Translator)** — **MCP 룰 `yagni-violation-removal-cost` 후보**.
600
+
601
+ 14. **도메인 룰 상수 위치 = 도메인 (초기 카드 장수)** — **MCP 룰 `domain-constant-locator` 후보**.
602
+
603
+ 15. **enum.ordinal vs 커스텀 orderNumber** — **MCP 룰 `enum-ordinal-vs-custom-property` 후보**.
604
+
605
+ 16. **Card 인덱스 기반 생성 vs 도메인 의미 누수** — **MCP 룰 `card-index-vs-card-identity` 후보**.
606
+
607
+ 17. **Boolean 메서드 의미 반전 (`isDrawFinish` 16 이하 = 종료)** — **MCP 룰 `boolean-method-semantic-inversion` 후보**.
608
+
609
+ 18. **클래스 명 vs 표준 라이브러리 충돌 (`Number`)** — **MCP 룰 `class-name-vs-stdlib-collision` 후보**.
610
+
611
+ 19. **상태 계산 위치 (enum companion 정적 vs HandCards 자가)** — **MCP 룰 `state-calculation-locator` 후보**.
612
+
613
+ 20. **모든 25 스레드 학생 자가 답변 + commit SHA + 자가 후속 의문 5+ 회** — *2025 코호트 5 PR 합류 정점*.
614
+
615
+ 21. **2025 코호트 5 PR 코퍼스 형성 (#117·#129·#138·#126·#130)** — *셀프 체크리스트 + 학생 자가 의문 + commit SHA 일관 패턴*.
616
+
617
+ 22. **외부 자료 다양성 (테코톡 + 외부 PR + Kotlin 공식 문서 + Medium 글 + Wikipedia)** — *학생/reviewer 자가 학습 모범*.
618
+
619
+ ## 얻은 교훈 (도메인)
620
+
621
+ 1. **블랙잭 룰 정확성 = 딜러 블랙잭 vs 플레이어 21 (3장 이상) = 딜러 승리** — 학생 자가 도메인 학습.
622
+
623
+ 2. **Ace List<Int> = [1, 11] 양가 표현** — *getMinimumValue / getMaximumValue 자가 활용*.
624
+
625
+ 3. **Dealer 16 이하 hit = `<= 16` 종료** = *PR #129 (`< 16` 와전) 결과 동일 = 명명 + 비교 양립 와전*. **PR #126·#138 정공 (`<= 16` 명명 hit)** 와 반대 시점.
626
+
627
+ 4. **카드덱 자료구조 (ArrayDeque) 자가 분석** — *4 안 + 페어 학습*.
628
+
629
+ 5. **`Number` enum + multi-value (Ace: [1, 11])** — *Ace 1↔11 자가 표현*.
630
+
631
+ 6. **Card(cardIndex) 부생성자 = Deck 섞기 의도** — *도메인 의미 누수 vs Deck flatMap 복잡도 트레이드오프*.
632
+
633
+ 7. **Singleton Deck (object) = 19+ PR 누적 안티패턴** — *학생 자가 인지 후 유지* (시간 부족).
634
+
635
+ ## MCP 룰 후보 신규 + 강화 (PR #130)
636
+
637
+ | 룰 | 신규 / 강화 | 누적 PR |
638
+ |---|---|---|
639
+ | `student-to-reviewer-evolution-meta` | 강화 | 2+ (krrong + hyemdooly) |
640
+ | `student-self-limitations-explicit` | 신규 | 1 (#130) |
641
+ | `peer-learning-cross-pr-reference` | 신규 | 1 (#130) |
642
+ | `blackjack-rule-fidelity-comparison` | 강화 | 15+ ⭐⭐⭐ |
643
+ | `singleton-deck-via-companion` | 강화 | 19+ ⭐⭐⭐ |
644
+ | `repeated-feedback-across-missions` | 신규 | 1 (#130) |
645
+ | `function-name-vs-return-semantic-mismatch` | 강화 | 4+ |
646
+ | `string-formatting-view-responsibility` | 신규 | 2+ (#126·#130) |
647
+ | `production-vs-test-code-separation` | 신규 | 1 (#130) |
648
+ | `test-side-effect-verification` | 신규 | 1 (#130) |
649
+ | `reviewer-self-limitation-explicit-apology` | 신규 | 1 (#130) |
650
+ | `yagni-violation-removal-cost` | 신규 | 2+ (#146·#130) |
651
+ | `domain-constant-locator` | 신규 | 1 (#130) |
652
+ | `enum-ordinal-vs-custom-property` | 신규 | 1 (#130) |
653
+ | `card-index-vs-card-identity` | 신규 | 1 (#130) |
654
+ | `boolean-method-semantic-inversion` | 신규 | 2+ (#117·#139·#130) |
655
+ | `class-name-vs-stdlib-collision` | 신규 | 1 (#130) |
656
+ | `state-calculation-locator` | 신규 | 1 (#130) |
657
+ | `view-model-future-learning-awareness` | 신규 | 3+ (#21·#35·#130) |
658
+ | `class-with-only-companion-to-object` | 신규 | 1 (#130) |
659
+
660
+ ## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
661
+
662
+ - ***hyemdooly (둘리) = 14번째 reviewer + 학생 → reviewer 진화 (2년)*** — *krrong 결과 같은 메타 케이스 2번째*. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 정점**.
663
+ - ***reviewer 자가 한계 강한 어휘 인정*** — hyemdooly PR #130 — *"정말정말 미안해요!!🧎‍♀️"* — *reviewer 가 자가 한계 명시 + 학생 부담 최소화*.
664
+ - ***학생이 reviewer 부담 최소화*** — medAndro PR #130 — *"고민하는 과정에서 저도 공부가 많이 되었어요 ☺️"* — *양방향 격려 어휘*.
665
+ - ***학생 자가 한계 4 종 명시 + 시간 부족 인정*** — medAndro PR #130 — *학생 자가 *코드 한계 자가 인지 정점***.
666
+ - ***외부 자료 다양성 (테코톡 + 외부 PR + 페어 + Medium + Wikipedia)*** — medAndro PR #130 — *학생 자가 학습 정점*.
667
+ - ***Singleton 안티패턴 4 가지 자가 인지*** — medAndro PR #130 — *부작용 + 결합 + 테스트 + Tell-Don't-Ask 위반*.
668
+ - ***블랙잭 도메인 룰 인용 + 학생 자가 도메인 학습*** — hyemdooly PR #130 — *reviewer 가 블랙잭 정확성 인용*.
669
+
670
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **2025 코호트 5 PR 코퍼스 형성 (#117·#129·#138·#126·#130)** + **학생 → reviewer 진화 메타 케이스 2번째 (hyemdooly = 2년)**.
671
+
672
+ ## 메타 케이스 비교 (krrong vs hyemdooly)
673
+
674
+ | 항목 | krrong (PR #32 → #148·#151) | hyemdooly (PR #21·#35 → #130) |
675
+ |---|---|---|
676
+ | 학생 시기 | 2023년 3월 | 2023년 3월 |
677
+ | reviewer 시기 | 2024년 3월 | 2025년 3월 |
678
+ | 진화 기간 | 1년 | 2년 |
679
+ | 학생 시기 어휘 | 자가 의문 + 학습 진행 | PR 본문 자가 의문 3개 + 자가 의견 명시 |
680
+ | reviewer 시기 어휘 | 양방향 토론 + reviewer 메타 | 양방향 토론 + reviewer 자가 한계 인정 |
681
+ | MCP `oh-my-oop` 합류 | *학습 = 시간 두고 반복* | *학습 = 시간 두고 반복 + reviewer 자가 한계* |
682
+
683
+ → **2년 진화 = 더 깊은 reviewer 어휘** (krrong 1년 < hyemdooly 2년). **MCP `oh-my-oop` 핵심 가치 정점 유지**.