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,348 @@
1
+ # PR #113 — [블랙잭 1단계] 포르 미션
2
+
3
+ - **Reviewee:** [@jiyuneel](https://github.com/jiyuneel)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/113
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@KwonDae](https://github.com/KwonDae) (제이든) — 2025 코호트 전담 reviewer (PR #117·#126·#129·#138·#139·#142·#143·#109·#113 분석 reviewer)
7
+ - **라인 코멘트:** 22 스레드 — *2025 코호트 셀프 체크리스트 PR 본문 + 모든 22 스레드 학생 자가 답변 + commit SHA + 학생 자가 후속 의문 5+ 회 (Player.playGame 추상화 의문 + 인자 폭증 의문 + Controller 책임 의문) + Hit/Stay Boolean vs Action enum (PR #117·#126 결과 반대 시점) + Deck null vs 예외 + companion → 인스턴스 + 고차함수 활용 + canHit 추상화 자가 학습 + Result enum 도메인 vs 뷰 + abstract vs open vs interface 자가 학습 + Participants 일급 컬렉션 자가 적용 + playGame 추상화 → Participants 역할 (reviewer 자가 수정)*
8
+ - **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, PR #117·#129·#130·#126·#138·#142·#143·#109·#113 = **2025 코호트 9 PR 코퍼스 성장**).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 의문 + 셀프 체크리스트 + 학생 자가 입장 명시 (2025 코호트 정점)
13
+
14
+ PR 본문 + 라인 자가 입장 (Thread 2 인용):
15
+
16
+ > *"`controller`를 게임의 중재자 또는 카지노라고 생각했습니다. 참가자가 처음에 뽑아야 하는 카드의 수(2장)는 게임의 룰에 해당하며, 이를 `controller`가 관리하는 것이 가장 바람직하다고 판단했습니다..!*
17
+ >
18
+ > *참가자에게 카드를 뽑으라는 메시지를 두 번씩 던져서 참가자는 카드 뽑기의 주체가 되지만, 몇 번 뽑아야 하는지는 게임의 흐름을 조율하는 `controller`가 결정하는 것이 적절하다고 생각했는데 어떻게 생각하시나요..?!"*
19
+
20
+ → **학생 자가 입장 명시 + reviewer 의견 요청** = PR #35·#126 (hyemdooly·doabletuple *학생 자가 입장 명시*) 결 합류.
21
+
22
+ reviewer 후속 (Thread 15):
23
+
24
+ > *"BlackJackGame 이라는 도메인 모델이 존재한다면 보다 명확해질 수 있을까요?"*
25
+
26
+ 학생 자가 적용 → *BlackjackGame 도메인 객체 자가 생성*.
27
+
28
+ **MCP 룰 `controller-as-game-mediator-vs-domain-game-object` 후보** — *Controller 가 게임 흐름 vs BlackjackGame 도메인 객체* 트레이드오프.
29
+
30
+ ### 2. `Hit/Stay Boolean` vs `Action enum` — PR #117·#126 결과 반대 시점
31
+
32
+ reviewer (Thread 1):
33
+
34
+ > *"Hit or Stay를 Boolean으로 구분할 수 있지 않을까요? 처음에 Action 이라는 키워드를 보고 어떤 의미인지 판단하기 쉽지 않을 것 같습니다."*
35
+
36
+ 학생 자가 적용: `readPlayerHit(player): Boolean`.
37
+
38
+ → **`Action enum` (PR #117·#126) vs `Boolean` (PR #113)** = **2 reviewer 의 *반대 시점 자가 적용*** = *MCP `oop_propose_alternatives` 핵심 가치 합류*:
39
+
40
+ - **PR #117·#126** (reviewer KwonDae·woowahan-dino): *String → Action enum (Stringly-typed 회피)*.
41
+ - **PR #113** (reviewer KwonDae): *Action → Boolean (의미 직관)*.
42
+
43
+ → **같은 reviewer (KwonDae) 의 *다른 학생에 다른 권유*** = *학생 컨텍스트 별 트레이드오프*.
44
+
45
+ **MCP 룰 `enum-vs-boolean-context-dependent` 후보** — *enum vs Boolean = 의미 명시 vs 직관성 트레이드오프*.
46
+
47
+ ### 3. `BlackjackGame` 도메인 객체 자가 적용 + 룰 응집
48
+
49
+ reviewer (Thread 15): *"BlackJackGame 이라는 도메인 모델이 존재한다면 보다 명확해질 수 있을까요?"*
50
+
51
+ 학생 자가 적용:
52
+
53
+ ```kotlin
54
+ fun distributeInitialCards() {
55
+ repeat(INITIAL_CARD_COUNT) {
56
+ participants.drawCard(deck)
57
+ }
58
+ }
59
+ ```
60
+
61
+ → **게임 룰 도메인 응집 + Controller 가벼움** = PR #129·#126·#142 결 합류.
62
+
63
+ ### 4. 학생 자가 *현실 메타포 = Controller = 게임 중재자/카지노* (Thread 2)
64
+
65
+ §1 인용. 학생이 자가 *Controller = 카지노* 메타포 사용 → reviewer *Controller 가 흐름 조율 vs 참가자 자가 뽑기* 권유.
66
+
67
+ → **현실 메타포 양가성** = PR #117·#129·#130·#143·#109 결의 *현실 메타포 정합* 어휘 누적 12+ PR ⭐⭐⭐.
68
+
69
+ 다만 *PR #129 reviewer = 참가자 자가 / PR #113 학생 자가 = Controller 중재자* = **메타포 양가**.
70
+
71
+ ### 5. `abstract class Participant` + canHit/getResult 추상 메서드 자가 학습
72
+
73
+ 학생 자가 답변 (Thread 16):
74
+
75
+ > *"`interface`는 상태를 가질 수 없으며, `open class`는 하위 클래스에서 공통 메서드를 구현하도록 강제할 수 없습니다. 딜러와 플레이어의 공통된 상태와 역할을 제공하면서, 일부 구체적인 로직은 각 클래스에서 구현하도록 하기 위해 `abstract class`를 사용했습니다!"*
76
+
77
+ → **abstract class vs open vs interface 3 분류 학생 자가 학습** = PR #129·#126·#138·#142·#143 결 합류 누적 6+ PR.
78
+
79
+ ### 6. 학생 자가 후속 의문 + reviewer 자가 권유 수정 (Thread 20·21)
80
+
81
+ 학생 자가 의문 (Thread 20):
82
+
83
+ > *"플레이어는 'y'를 입력하면 카드를 추가로 뽑을 수 있고, 딜러는 점수가 16 이하이면 카드를 추가로 뽑을 수 있습니다. 이처럼 카드를 뽑는 공통 역할이 있어 `Player`와 `Dealer`의 `playGame`를 추상화하고 싶었습니다.*
84
+ >
85
+ > *하지만 각 클래스의 `playGame`에서 필요로 하는 파라미터가 달라 다소 복잡해졌는데, 제이든이 보시기에는 어떠신지, 더 나은 추상화 방법이 있는지 피드백 부탁드립니다..! 🙏🏻"*
86
+
87
+ reviewer 자가 수정 (Thread 20):
88
+
89
+ > *"이 부분은 수정할게요. playGame의 내용은 각 참가자별로 게임을 진행하는 로직으로 Participant로의 추상화 보다는 Participants에서 역할을 할 수 있지 않을까 생각이 들었습니다. 현재 참가자의 결과를 계산하는 `getPlayerResults` 처럼 playGame은 Player 와 Dealer의 추상화 보다는 이미 추상화된 `canHit(), drawCard()` 를 사용하면 지금 하고 계신 고민들에 도움이 될 것 같아요"*
90
+
91
+ → **시그니처 차이 추상화 한계 + reviewer 자가 권유 수정 + 이미 추상화된 메서드 활용 권유** = PR #126 (abstract-method-blocked-by-signature-divergence) 결 강화 + PR #142·#109 (reviewer 자가 한계 인정/수정) 결 합류.
92
+
93
+ **MCP 룰 `reviewer-self-suggestion-revision` 후보** — *reviewer 가 자가 권유 수정 + 더 나은 안 제시*.
94
+
95
+ ### 7. 학생 자가 ShuffledCardGenerator + Deck(cards) DI 자가 적용
96
+
97
+ reviewer (Thread 8): *"Deck이 항상 랜덤으로 생성될 경우 해당 도메인은 테스트가 어려워집니다."*
98
+
99
+ 학생 자가 적용:
100
+
101
+ ```kotlin
102
+ class ShuffledCardGenerator {
103
+ fun generate(): List<Card> = ...
104
+ }
105
+
106
+ class Deck(cards: List<Card>) {
107
+ val cards: ArrayDeque<Card> = ArrayDeque(cards)
108
+ fun pick(): Card = cards.removeLast()
109
+ }
110
+ ```
111
+
112
+ → **DI + 카드 생성 분리** = PR #138·#143 (Deck DI) 결 합류. **MCP 룰 `interface-for-test-substitution` 강화** 누적 6+ PR.
113
+
114
+ ### 8. 추가 칭찬
115
+
116
+ - Thread 19: *"공통 로직 추상화 잘해주셨어요 👍"*.
117
+ - Thread 22: *"참가자들을 관리하여 역할을 분리할 수 있게 되었네요! 👍"*.
118
+
119
+ ## 못한 점 (설계 관점)
120
+
121
+ ### 1. `Deck.pick(): Card?` nullable 반환 — null vs 예외
122
+
123
+ reviewer (Thread 4): *"만약 덱이 비어있으면 어떤 일이 발생할까요?"*
124
+
125
+ 학생 자가 답변:
126
+
127
+ > *"덱이 비어있는 경우에 예외를 던질지 고민했는데, 카드가 없는 것도 정상적인 게임 상황이라고 판단하고 게임을 결과를 출력하도록 했습니다! 덱이 비어있으면 null을 반환하고, `controller`에서 null을 확인하여 프로그램을 종료하고 결과를 출력합니다."*
128
+
129
+ → **null 반환 정공** = PR #35 (galcyurio Kotlin 예외 처리 4 원칙) 결의 *논리 오류 X = null 반환* 정공. **MCP 룰 `kotlin-exception-handling-strategy` 강화** 누적 4+ PR (#129·#138·#35·#113).
130
+
131
+ ### 2. Deck companion → 인스턴스 변경 (학생 자가 자가 정정)
132
+
133
+ reviewer (Thread 5): *"Deck의 변수와 함수들을 모두 companion object에 구현한 배경은 무엇이었을까요? 🧐"*
134
+
135
+ 학생: *"여기저기서 `Deck`에 접근할 수 있을 것 같아 현재는 인스턴스를 만들어 사용하도록 변경했습니다!"*
136
+
137
+ → **Singleton 자가 회피 + 인스턴스 정공** = PR #130·#138·#143 (Singleton Deck 안티패턴) 결 누적 20+ PR ⭐⭐⭐.
138
+
139
+ ### 3. Players 일급 컬렉션 사용자 입력 한계 학생 자가 의문
140
+
141
+ reviewer (Thread 7): *"만들어주신 Players 일급컬렉션의 역할을 제대로 하고 있는걸까요?"*
142
+
143
+ 학생 자가 의문:
144
+
145
+ > *"`Players` 일급컬렉션을 활용하는 방법을 고민해보았지만, 플레이어는 매번 카드를 뽑을지 여부를 view에서 입력받아야 해서 해당 로직을 도메인으로 옮기는 것이 쉽지 않았습니다. 😢 현재 구조에서는 사용자의 입력이 필요한 부분이 존재하여 `Players` 내부에서 구현하기에 한계가 있는데, 이를 해결할 수 있는 방법이 있을까요..?"*
146
+
147
+ reviewer 답변 (Thread 14): *"입력받는 로직을 domain으로 옮겨야만 해결이 가능할까요? hint. kotlin에는 [고차함수](https://kotlinlang.org/docs/lambdas.html)라는게 존재합니다."*
148
+
149
+ 학생 자가 적용 + 자가 한계 인정:
150
+
151
+ > *"고차함수를 활용하여 참가자들이 각자 게임을 진행하도록 변경해봤습니다! 다만, 아직 고차함수가 익숙하지 않아 적절하게 사용하였는지는 잘 모르겠습니다..! 😢"*
152
+
153
+ → **사용자 입력 vs 도메인 = 고차함수 정공 + 학생 자가 학습 한계 인정** = PR #87·#129·#138·#126 결.
154
+
155
+ ### 4. Result enum 도메인 vs 뷰 (PR #126·#143 결과 같은 어휘)
156
+
157
+ reviewer (Thread 10): *"승, 패, 무 는 도메인 로직일까요?"*
158
+
159
+ 학생 자가 답변:
160
+
161
+ > *"해당 값은 출력을 할 때만 필요한 정보이므로 뷰 로직이라고 생각합니다! `OutputView`에서 처리하도록 수정했습니다."*
162
+
163
+ → **String 출력 = View 책임** = PR #126·#130·#143 결 강화 누적 4+ PR.
164
+
165
+ ### 5. Rank 기호 표시 = 도메인 vs 뷰 (변경 가능성 지표)
166
+
167
+ reviewer (Thread 12): *"만약 A 대신 기호로 표시해달라는 요구사항이 온다면 도메인 로직을 수정해야 할까요?"*
168
+
169
+ → **변경 가능성 = View 책임 지표** = PR #126 (KwonDae 동일 어휘) 결 강화 누적 2+ PR.
170
+
171
+ ### 6. 인자 폭증 (4 람다 인자) — 학생 자가 의문
172
+
173
+ 학생 코드 (Thread 21):
174
+
175
+ ```kotlin
176
+ fun playTurns(
177
+ onPlayerResponse: (Player) -> Boolean,
178
+ onPlayerDraw: (Player) -> Unit,
179
+ onDealerDraw: (Dealer) -> Unit,
180
+ ) {
181
+ participants.playGame(deck, onPlayerResponse, onPlayerDraw, onDealerDraw)
182
+ }
183
+ ```
184
+
185
+ 학생 자가 의문:
186
+
187
+ > *"`participants`에게 메세지를 던지는 방식으로 변경했습니다! 다만, 이렇게 변경하니 인자를 너무 많이 넘겨주는 건 아닌가 싶긴 하네요.. 😅"*
188
+
189
+ → **콜백 람다 폭증 학생 자가 인지** = PR #36·#142·#35 (`callback-lambda-explosion`) 결 합류.
190
+
191
+ ### 7. 결과 계산 책임 분배 + 학생 자가 의문 2 가지 (Thread 11)
192
+
193
+ 학생 자가 의문:
194
+
195
+ > *"1. 플레이어는 `승 or 패`의 결과가 나오는 반면, 딜러는 모든 플레이어와 비교하여 `n승 n패` 형식의 결과가 나옵니다. 그렇기에 controller에서 딜러의 결과를 계산하는 로직은 아직 남아있습니다.*
196
+ >
197
+ > *2. 변경되기 전의 코드는 모든 플레이어의 결과를 계산한 후, 그 결과를 바탕으로 딜러의 결과를 계산했습니다. 플레이어의 결과에 따라서 딜러의 결과가 결정된다고 생각해서 이렇게 구현했었습니다. 다른 참가자와 비교하여 결과를 계산하도록 변경하면서 동일한 비교를"*
198
+
199
+ → **Player 1대1 결과 vs Dealer n승n패 형식 비대칭 + 동일 비교 반복** = PR #142 (doabletuple 자가 코드 예시 + 자가 의문) 결 합류. **MCP 룰 `symmetric-compare-bidirectional-call` 강화** 누적 3+ PR (#142·#143·#113).
200
+
201
+ ### 8. `Players.players` 2 depth 일급 컬렉션 → Participants 자가 적용
202
+
203
+ reviewer (Thread 17): *"2 depth로 들어가는 `players.players` 으로도 일급컬렉션의 용도가 생기는 부분 같아요..!"*
204
+
205
+ 학생 자가 적용: *Participants 클래스 추가 (딜러 + 플레이어 관리)*.
206
+
207
+ → **PR #129 (compile-time-singleton + Participants 생성자 타입 분리) 결 합류**.
208
+
209
+ ### 9. `Hand` 생성자 vs emptyList 기본값
210
+
211
+ reviewer (Thread 3): *"현재 생성자가 사용되는곳은 Participant 뿐이어서 생성자로 받지 않아도 차이는 없어보이네요!"*
212
+
213
+ 학생 자가 적용: `Hand` 기본 `emptyList()`.
214
+
215
+ → **불필요한 생성자 인자 제거** — PR #109·#138 (test fixture 생성자) 결과 같은 어휘.
216
+
217
+ ### 10. 확장 함수 위치 (Controller 내부 vs Domain)
218
+
219
+ reviewer (Thread 18): *"Participant 확장함수가 Controller 내부에 있는게 자연스러울까요? 🧐"*
220
+
221
+ 학생: *"덱에 카드가 비어있으면 다시 카드를 넣어주도록 변경하여 해당 확장함수는 삭제했습니다!"*
222
+
223
+ → **확장 함수 위치 = 도메인 위치 정공**. **MCP 룰 `extension-function-locator` 후보**.
224
+
225
+ ### 11. `Dealer.canHit() = score <= 16` + `Player.canHit() = score <= 21`
226
+
227
+ ```kotlin
228
+ abstract fun canHit(): Boolean
229
+ ```
230
+
231
+ → **각자 다른 기준 자가 적용** = PR #129·#126·#138·#142·#143 결.
232
+
233
+ 다만 *Player canHit `score <= 21`* — *21 시 hit 가능* = PR #129·#138·#139·#126·#130·#142·#143 결과 동일 (21 시 hit 가능 모델). PR #35 (21 시 stop) 반대 시점.
234
+
235
+ ### 12. `getResult` 추상 메서드 + Player/Dealer override
236
+
237
+ ```kotlin
238
+ abstract fun getResult(other: Participant): Result
239
+ ```
240
+
241
+ → **Tell-Don't-Ask 정공 + 양쪽 자가 비교** = PR #142·#143·#109 결.
242
+
243
+ ### 13. 한 도메인 객체 (`BlackjackGame`) 다른 도메인 객체 (`Participants`) 동시 보유 — 책임 중첩
244
+
245
+ 학생 코드: *BlackjackGame + Participants 동시 존재* = PR #142·#143 (Game/Scoreboard 분리) 결 합류. *Controller → BlackjackGame → Participants 3 단계 메시지*.
246
+
247
+ ### 14. 모든 22 스레드 학생 자가 답변 + commit SHA + 자가 후속 의문 5+ 회 — 2025 코호트 정점
248
+
249
+ ## 리뷰어 의견 요지
250
+
251
+ - **Hit/Stay Boolean 권유 (PR #117·#126 반대 시점)**.
252
+ - **Controller 흐름 vs 참가자 자가 분배 (학생 자가 입장 + reviewer 양방향)**.
253
+ - **Hand 생성자 제거 + emptyList 기본값**.
254
+ - **Deck null 반환 vs 예외**.
255
+ - **Deck companion → 인스턴스 변경**.
256
+ - **canHit 공통 로직 자가 학습**.
257
+ - **Players 일급 컬렉션 사용자 입력 한계 학생 자가 의문 + 고차함수 권유**.
258
+ - **테스트 가능성 = Deck DI + ShuffledCardGenerator 분리**.
259
+ - **Result enum 도메인 vs 뷰**.
260
+ - **getResult 추상 메서드 + 학생 자가 의문 2가지 (Player 1대1 vs Dealer n승n패)**.
261
+ - **Rank 기호 표시 = 도메인 vs 뷰 (변경 가능성)**.
262
+ - **고차함수 입력받기 + 학생 자가 한계 인정**.
263
+ - **BlackjackGame 도메인 객체 권유 + 학생 자가 적용**.
264
+ - **abstract vs open vs interface 자가 학습**.
265
+ - **Players.players 2 depth + Participants 일급 컬렉션 자가 적용**.
266
+ - **playGame 추상화 → Participants 역할 (reviewer 자가 수정)**.
267
+ - **확장 함수 위치 (Controller vs Domain)**.
268
+
269
+ ## 대표 인용
270
+
271
+ > [KwonDae Thread 1]
272
+ > *"Hit or Stay를 Boolean으로 구분할 수 있지 않을까요? 처음에 Action 이라는 키워드를 보고 어떤 의미인지 판단하기 쉽지 않을 것 같습니다."*
273
+
274
+ → **enum vs Boolean = 의미 명시 vs 직관성** — *PR #117·#126 정공 (enum) 반대 시점*.
275
+
276
+ > [jiyuneel Thread 2]
277
+ > *"`controller`를 게임의 중재자 또는 카지노라고 생각했습니다. 참가자가 처음에 뽑아야 하는 카드의 수(2장)는 게임의 룰에 해당하며, 이를 `controller`가 관리하는 것이 가장 바람직하다고 판단했습니다..!"*
278
+
279
+ → **학생 자가 *Controller = 카지노* 현실 메타포** — *PR #129 (참가자 자가) 반대 시점 양가*.
280
+
281
+ > [KwonDae Thread 20]
282
+ > *"이 부분은 수정할게요. (...) playGame은 Player 와 Dealer의 추상화 보다는 이미 추상화된 `canHit(), drawCard()` 를 사용하면 지금 하고 계신 고민들에 도움이 될 것 같아요"*
283
+
284
+ → **reviewer 자가 권유 수정 + 이미 추상화 활용** — *PR #142·#109 결 합류*.
285
+
286
+ > [jiyuneel Thread 21]
287
+ > *"`participants`에게 메세지를 던지는 방식으로 변경했습니다! 다만, 이렇게 변경하니 인자를 너무 많이 넘겨주는 건 아닌가 싶긴 하네요.. 😅"*
288
+
289
+ → **학생 자가 콜백 람다 폭증 인지** — *PR #36·#142 결 합류*.
290
+
291
+ ## 얻은 교훈 (보편)
292
+
293
+ 1. **enum vs Boolean = 의미 명시 vs 직관성 트레이드오프 (PR #117·#126 반대 시점)** — **MCP 룰 `enum-vs-boolean-context-dependent` 후보**.
294
+
295
+ 2. **Controller = 게임 중재자/카지노 vs 참가자 자가 (현실 메타포 양가)** — *PR #129 결과 반대 시점*. **MCP 룰 `controller-as-game-mediator-vs-domain-game-object` 후보**.
296
+
297
+ 3. **reviewer 자가 권유 수정 + 이미 추상화 활용** — **MCP 룰 `reviewer-self-suggestion-revision` 후보**.
298
+
299
+ 4. **사용자 입력 vs 도메인 = 고차함수 정공 + 학생 자가 한계 인정** — PR #87·#129·#138·#126 결.
300
+
301
+ 5. **결과 비대칭 (Player 1대1 vs Dealer n승n패) + 동일 비교 반복** — **MCP 룰 `symmetric-compare-bidirectional-call` 강화** 누적 3+ PR.
302
+
303
+ 6. **Players 일급 컬렉션 사용자 입력 한계 학생 자가 의문 + 고차함수 답변** — *학생 자가 학습 정점*.
304
+
305
+ 7. **null 반환 = 정상 게임 상황 (Kotlin 예외 처리 4 원칙)** — **MCP 룰 `kotlin-exception-handling-strategy` 강화** 누적 4+ PR.
306
+
307
+ 8. **현실 메타포 양가 (Controller 카지노 vs 참가자 자가)** — **MCP 룰 `metaphor-fidelity-locator` 강화** 누적 12+ PR ⭐⭐⭐.
308
+
309
+ 9. **abstract vs open vs interface 학생 자가 3 분류** — *PR #129·#126·#138·#142·#143·#113 결 합류 누적 6+ PR*.
310
+
311
+ 10. **확장 함수 위치 (Controller vs Domain)** — **MCP 룰 `extension-function-locator` 후보**.
312
+
313
+ 11. **변경 가능성 = View 책임 지표 (PR #126 결)** — *Rank 기호 표시*.
314
+
315
+ 12. **모든 22 스레드 학생 자가 답변 + commit SHA + 자가 후속 의문 5+ 회** — *2025 코호트 정점 유지*.
316
+
317
+ ## 얻은 교훈 (도메인)
318
+
319
+ 1. **Dealer canHit `score <= 16` + Player canHit `score <= 21`** — *각자 기준 자가 적용*.
320
+
321
+ 2. **카드 N장 뽑기 = 도메인 룰 (학생 자가 *카지노* 메타포 + reviewer *참가자 자가* 메타포 양가)**.
322
+
323
+ 3. **Player 1대1 결과 vs Dealer n승n패 결과 비대칭** — *학생 자가 의문*.
324
+
325
+ ## MCP 룰 후보 신규 + 강화 (PR #113)
326
+
327
+ | 룰 | 신규 / 강화 | 누적 PR |
328
+ |---|---|---|
329
+ | `enum-vs-boolean-context-dependent` | 신규 | 1 (#113) |
330
+ | `controller-as-game-mediator-vs-domain-game-object` | 신규 | 1 (#113) |
331
+ | `reviewer-self-suggestion-revision` | 신규 | 1 (#113) |
332
+ | `symmetric-compare-bidirectional-call` | 강화 | 3+ (#142·#143·#113) |
333
+ | `metaphor-fidelity-locator` | 강화 | 12+ ⭐⭐⭐ |
334
+ | `kotlin-exception-handling-strategy` | 강화 | 4+ |
335
+ | `extension-function-locator` | 신규 | 1 (#113) |
336
+ | `interface-for-test-substitution` | 강화 | 6+ |
337
+ | `string-formatting-view-responsibility` | 강화 | 4+ |
338
+ | `singleton-deck-via-companion` | 강화 | 20+ ⭐⭐⭐ |
339
+ | `abstract-without-abstract-method` | 강화 | 6+ |
340
+
341
+ ## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
342
+
343
+ - ***학생 자가 *Controller = 카지노* 현실 메타포*** — jiyuneel PR #113 — *현실 메타포 양가성*.
344
+ - ***reviewer 자가 권유 수정 + 이미 추상화 활용*** — KwonDae PR #113 — *PR #142·#109 결 합류*.
345
+ - ***Hit/Stay enum vs Boolean = 같은 reviewer 의 다른 학생 다른 권유*** — KwonDae PR #117·#126 (enum) vs PR #113 (Boolean) — *학생 컨텍스트 별 트레이드오프*.
346
+ - ***학생 자가 콜백 람다 폭증 인지*** — jiyuneel PR #113 — *PR #36·#142 결 합류*.
347
+
348
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **2025 코호트 9 PR 코퍼스 성장**.
@@ -0,0 +1,265 @@
1
+ # PR #140 — [블랙잭 2단계] 포르 미션
2
+
3
+ - **Reviewee:** [@jiyuneel](https://github.com/jiyuneel)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/140
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@KwonDae](https://github.com/KwonDae) (제이든) — 1단계 #113 동일 reviewer
7
+ - **라인 코멘트:** 16 스레드 — *PR 본문 자가 의문 + 학생 자가 의문 5+ 회 + 람다 4개 인자 폭증 자가 의문 (PR #142 결과 동일) + 고차함수 = View 의존 X 학생 자가 학습 + 다형성 compare 추상화 학생 자가 코드 예시 + 수익률 = GameResult 책임 (PR #142 결) + abstract → sealed class 학생 자가 변경 + sealed 라이브러리 배포 시 제약 reviewer 메타 어휘 + Profit 팩토리 메서드 자가 적용 + thisScore 외부 의존 → 본인 점수 자가 (Tell-Don't-Ask) + tailrec 자가 적용*
8
+ - **양 단계 완성 reviewee** (1단계 #113 batch 21 분석 완료 + 2단계 #140 = batch 22 추가).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 학습 의식 + 학생 자가 의문 5+ 회
13
+
14
+ PR 본문:
15
+
16
+ > *"제이든, 안녕하세요 :) 2단계 미션을 진행하면서 고민한 부분이 많아서 조금 늦어진 것 같아요 😂 이전 피드백도 #113 모두 반영하고자 노력했습니다!"*
17
+
18
+ → **학생 자가 학습 적극성 + 1단계 → 2단계 사이 학습 시간성** = PR #138·#142·#143 결 합류.
19
+
20
+ ### 2. 람다 4개 인자 폭증 학생 자가 의문 (PR #142 결과 동일)
21
+
22
+ 학생 자가 의문 (Thread 1):
23
+
24
+ > *"하지만 변경해보니 고차함수를 `controller` → `BlackjackGame` → `Participants`로 넘기게 되었고, 너무 많이 넘겨주는 건 아닌가 싶어 해결할 방법도 고민해봤지만 방법을 찾지 못했습니다.. 😢 또한 4개의 매개변수도 많지 않나 싶었지만 플레이어와 딜러가 게임을 하려면 모두 필요한 정보여서 이렇게 구현하게 되었습니다."*
25
+
26
+ reviewer 답변 (Thread 5):
27
+
28
+ > *"여러 가지 방법이 있을 것 같아요*
29
+ > *- onDraw 를 하나의 람다로 사용할 수 없을까?*
30
+ > *- 불가능하다면 람다 매개변수를 묶어서 활용해볼 수 있을까?"*
31
+
32
+ 학생 자가 적용:
33
+
34
+ ```kotlin
35
+ // onPlayerDraw + onDealerDraw 통합
36
+ when (participant) {
37
+ is Player -> ...
38
+ is Dealer -> ...
39
+ }
40
+ ```
41
+
42
+ → **람다 통합 = 타입 체크로 분기** + **`abstract class` → `sealed class` 학생 자가 변경 (when exhaustive)**. PR #142 (lambda-multiple-args-tuple-leak) 결 합류.
43
+
44
+ ### 3. 고차함수 = View 의존 X 학생 자가 학습
45
+
46
+ reviewer (Thread 2):
47
+
48
+ > *"고차함수는 View에 대한 직접적인 의존성을 제거하고, 추상화된 동작(람다)만을 전달받아 실행합니다. 따라서 도메인은 View의 구체적인 구현을 알 필요가 없기에 의존한다고 볼 수 없습니다. 고차함수를 사용함으로써 어떤 이점이 있었을까요?*
49
+ > *- 특정 행동 추상화*
50
+ > *- 전달받은 action 만 실행하므로 실제 내부 구현은 관심 X*
51
+ > *- 테스트"*
52
+
53
+ 학생 자가 답변:
54
+
55
+ > *"고차함수를 사용하면 도메인은 추상화된 행동만 전달받기 때문에 구체적인 구현을 알 수 없습니다! `Participant`의 입장에서는 단순히 `카드를 뽑았을 때 어떠한 행동을 해야 돼` 정도만 알 뿐, 그 행동이 어떤 것인지는 알지 못합니다. 또한, 테스트 코드에서는 `{ true }`와 같이 전달하면 되므로 view와 무관하게 테스트를 할 수 있고 테스트가 비교적 용이해집니다!"*
56
+
57
+ → **고차함수 = 추상화된 행동 + 테스트 용이성** = PR #109 (5 라운드 양방향 토론 + reviewer 자가 정정) 결 합류. **MCP 룰 `higher-order-function-as-domain-view-decoupling` 후보**.
58
+
59
+ ### 4. `abstract class` → `sealed class` 학생 자가 변경 (when exhaustive)
60
+
61
+ 학생 자가 적용 (Thread 5):
62
+
63
+ > *"또한 이 과정에서 when 문에서 모든 하위 클래스를 처리할 수 있도록 `abstract class`였던 `Participant` 클래스를 `sealed class`로 변경했습니다."*
64
+
65
+ reviewer (Thread 7): 외부글 (codestates 다형성 + stackoverflow interface/abstract/sealed 비교).
66
+
67
+ 학생 자가 답변:
68
+
69
+ > *"`sealed class`로 구현하면 `Participant`를 상속하는 새로운 타입이 추가되었을 때, 컴파일 타임에 모든 하위 타입을 확인할 수 있어 더 안전하다고 생각했습니다..! 특히 `when` 문에서 모든 타입을 처리하도록 강제하고 예상치 못한 타입을 방지할 수 있다는 장점이 있다고 생각했는데, 혹시 제가 고려하지 못한 점이 있을까요..? 😯"*
70
+
71
+ reviewer 메타 어휘 (Thread 13):
72
+
73
+ > *"맞아요 sealed class 는 compiler 가 나머지 분기에 대해 처리하지 않아도 된다는 장점이 존재합니다. 그렇다면 포르가 이 블랙잭 미션을 라이브러리로 배포한다고 했을 때, 사용자들에게 Paricipant를 확장할 수 있도록 제공한다고 가정해본다면 어떤 일이 발생할 수 있을지 고민해볼까요?*
74
+ >
75
+ > *hint. 직접 패키지를 새로 만들어 Participant 를 확장해보기"*
76
+
77
+ → **sealed class 라이브러리 배포 시 사용자 확장 제약** = *sealed = 모듈 한정 = 외부 확장 X*. **MCP 룰 `sealed-class-library-extension-constraint` 후보**.
78
+
79
+ PR #129·#126·#138·#142·#143·#113 결의 *sealed vs abstract vs open* 결 합류 정점.
80
+
81
+ ### 5. `Profit` 팩토리 메서드 + 자가 계산 (PR #142 cashOut 결 합류)
82
+
83
+ ```kotlin
84
+ fun from(bettingAmount: BettingAmount, gameResult: GameResult): Profit =
85
+ Profit(bettingAmount * gameResult.rate)
86
+ ```
87
+
88
+ → **Profit 자가 계산 + 팩토리 메서드** = PR #142 `GameResult.cashOut(player)` 결 합류.
89
+
90
+ ### 6. operator overloading `times` 자가 적용
91
+
92
+ ```kotlin
93
+ operator fun times(rate: Double): Double = value * rate
94
+ ```
95
+
96
+ → **value class + operator times** = PR #142·#36 결 합류.
97
+
98
+ ### 7. tailrec 자가 적용 + 학생 자가 어휘
99
+
100
+ 학생 자가 답변 (Thread 10):
101
+
102
+ > *"새로 알게 된 `tailrec` 키워드를 활용하여 변경해보았습니다! 재귀로 호출하여 코드의 가독성을 높이면서, 컴파일 과정에서 while 문으로 변환하여 성능도 최적화할 수 있어 좋은 것 같습니다 👍🏻"*
103
+
104
+ ```kotlin
105
+ tailrec fun playGame(draw: () -> Card, shouldContinue: ..., onDraw: ...) {
106
+ if (canHit() && shouldContinue(this)) {
107
+ receiveCard(draw())
108
+ onDraw(this)
109
+ playGame(draw, shouldContinue, onDraw)
110
+ }
111
+ }
112
+ ```
113
+
114
+ → **`tailrec` 자가 학습 + 적용** = PR #138·#142 (rosemin928·doabletuple) 결 합류 누적 3+ PR.
115
+
116
+ ### 8. compare 공통 로직 추상화 + 학생 자가 코드 예시 (Thread 3)
117
+
118
+ ```kotlin
119
+ // Participant.kt
120
+ protected fun compare(thisScore: Score, otherScore: Score): GameResult =
121
+ when {
122
+ thisScore > otherScore -> GameResult.WIN
123
+ thisScore < otherScore -> GameResult.LOSE
124
+ else -> GameResult.DRAW
125
+ }
126
+ ```
127
+
128
+ → **공통 비교 로직 추출** = PR #142 (super 키워드) 결 합류.
129
+
130
+ ### 9. 추가 칭찬
131
+
132
+ - Thread 8: *"중복 로직이 깔끔하게 없어졌네요 👍"*.
133
+ - Thread 14: *"연산자 오버로딩을 잘 활용해주셨어요 👍"*.
134
+ - Thread 15: *"입력받는 곳에서도 재귀를 잘 활용해주셨습니다 👍"*.
135
+ - 모든 16 스레드 학생 자가 답변 + commit SHA.
136
+
137
+ ## 못한 점 (설계 관점)
138
+
139
+ ### 1. `thisScore` 외부 의존 → 본인 점수 자가 (Tell-Don't-Ask)
140
+
141
+ reviewer (Thread 12):
142
+
143
+ > *"thisScore 라는 값을 외부로 부터 받아야 할까요? 참가자는 본인의 점수를 알고 있습니다. '나'의 점수와 '상대방' 점수를 비교하면 되는 로직일거에요. 그렇다면 나의 점수도 외부 값에 의존해야 할까요? 또는 비교해야 할 대상이 늘어난다면 그만큼 함수 또는 파라미터가 늘어나야 할까요?.?*
144
+ >
145
+ > *자식클래스는 다른 참가자를 받는데 왜 부모클래스는 두 참가자를 받아야만 하는걸까요?"*
146
+
147
+ → **부모 클래스 두 점수 vs 본인 점수 자가** = *Tell-Don't-Ask 정공*. **MCP 룰 `parameter-vs-self-state-access` 후보**.
148
+
149
+ ### 2. sealed class 라이브러리 확장 제약 — §4 참조
150
+
151
+ reviewer 의 메타 어휘 (Thread 13) = *sealed class 의 라이브러리 외부 확장 X 제약 = 사용자 확장 가능성 의식*.
152
+
153
+ → **라이브러리 사용자 시점 어휘** = PR #87·#76·#107·#82 (maintainer perspective locator) 결 + **사용자 확장 의식** 어휘 합류.
154
+
155
+ **MCP 룰 `sealed-class-library-extension-constraint` 후보** — *sealed = 모듈 내부 + 라이브러리 배포 시 사용자 확장 X*.
156
+
157
+ ### 3. else 분기 처리 = 논리 오류 (Thread 6)
158
+
159
+ reviewer (Thread 6):
160
+
161
+ > *"현재 else 분기처리로 들어온다는 것은 어떤 오류에 해당할까요? 또한 어떤 방법으로 오류 대응을 할 수 있을까요?"*
162
+
163
+ 학생: *"추상 클래스를 사용했을 때 `else` 분기처리로 들어오는 상황은 예상하지 못한 타입이 들어왔을 때 발생하는 논리적 오류입니다. 이때 `IllegalArgumentException`와 같은 예외를 던져 대응할 수 있을 것입니다."*
164
+
165
+ → **else 분기 = 논리 오류** = PR #35 (Kotlin 예외 처리 4 원칙 - 논리 오류 시 예외) 결 합류.
166
+
167
+ ### 4. 테스트 범위 (Thread 16) — 역할 중심
168
+
169
+ 학생 자가 의문:
170
+
171
+ > *"테스트 코드를 작성하는 과정에서, 어느 정도까지 테스트를 해야 하는지에 대한 의문이 생겼습니다. 현재 제 코드에서 게임 실행이 controller → BlackjackGame → Participants → Player 순서로 호출하여 진행됩니다. 테스트 코드를 전부 작성하지는 못했지만,, 각 클래스에서 게임 실행에 대한 테스트가 중복될 것 같은데, 어떤 범위까지 테스트를 작성해야 할지에 대한 조언을 구하고 싶습니다..!"*
172
+
173
+ reviewer 답변:
174
+
175
+ > *"먼저 각 클래스와 객체별로 역할을 중심으로 테스트를 작성하면 됩니다. (...) BlackjackGame: 게임 규칙과 진행을 관리하는 역할 → 게임 규칙과 주요 로직. Participants 및 Player: 개별 [...]"*
176
+
177
+ → **테스트 = 역할 중심 (PR #87·#129·#142·#109 결 합류)** = *MCP `oh-my-oop` 핵심 가치 (역할·책임·협력) 어휘 정점*.
178
+
179
+ **MCP 룰 `test-by-role-not-by-flow` 후보** — *역할 중심 테스트 vs 흐름 중심 테스트*.
180
+
181
+ ### 5. `super` 키워드 학생 자가 답변 (Thread 8)
182
+
183
+ reviewer: *"중복 로직이 깔끔하게 없어졌네요 👍 그렇다면 super 키워드에 대해 찾아보시면 더 도움이 될 것 같습니다 🙃"*
184
+
185
+ 학생 자가 답변:
186
+
187
+ > *"부모 클래스인 `Participant`의 `compare` 함수는 두 참가자의 점수를 비교하는 연산을 하고, 자식 클래스의 `resultAgainst` 함수는 다른 참가자를 받아와 결과를 계산합니다. 두 함수의 함수 시그니처가 달라 super 키워드를 사용하지 않아도 되었던 것 같습니다..!"*
188
+
189
+ → **시그니처 차이 = super 활용 불필요** + *PR #142 결의 *시그니처 차이 추상화 한계* 어휘 합류*.
190
+
191
+ ### 6. `BlackjackResult` 클래스 - 게임 결과 + 수익 계산
192
+
193
+ ```kotlin
194
+ // BlackjackResult - 수익 계산
195
+ ```
196
+
197
+ → **결과 통계 + 수익 계산 책임 분리** = PR #142 (Scoreboard) 결 합류. **MCP 룰 `result-aggregation-locator` 강화** 누적 3+ PR (#126·#142·#140).
198
+
199
+ ### 7. 모든 16 스레드 학생 자가 답변 + commit SHA — 2025 코호트 정점 유지
200
+
201
+ ## 대표 인용
202
+
203
+ > [KwonDae Thread 2]
204
+ > *"고차함수는 View에 대한 직접적인 의존성을 제거하고, 추상화된 동작(람다)만을 전달받아 실행합니다."*
205
+
206
+ → **고차함수 = 도메인 ↔ View 의존 X** — PR #109 결과 합류.
207
+
208
+ > [KwonDae Thread 13]
209
+ > *"그렇다면 포르가 이 블랙잭 미션을 라이브러리로 배포한다고 했을 때, 사용자들에게 Paricipant를 확장할 수 있도록 제공한다고 가정해본다면 어떤 일이 발생할 수 있을지 고민해볼까요?"*
210
+
211
+ → **라이브러리 배포 시점 메타 어휘** — *사용자 확장 의식*.
212
+
213
+ > [KwonDae Thread 12]
214
+ > *"thisScore 라는 값을 외부로 부터 받아야 할까요? 참가자는 본인의 점수를 알고 있습니다."*
215
+
216
+ → **Tell-Don't-Ask 어휘**.
217
+
218
+ > [jiyuneel Thread 4]
219
+ > *"참가자는 각자의 승패를 판단하고, `BlackjackResult`는 게임 결과를 바탕으로 수익 계산을 함으로써 각 객체의 책임이 분리되었습니다!"*
220
+
221
+ → **학생 자가 책임 분리 어휘**.
222
+
223
+ ## 얻은 교훈 (보편)
224
+
225
+ 1. **람다 4개 인자 폭증 학생 자가 의문 + reviewer 람다 통합 권유** — PR #142·#143 결 합류 + sealed class 변경.
226
+
227
+ 2. **고차함수 = 도메인 ↔ View 의존 X** — **MCP 룰 `higher-order-function-as-domain-view-decoupling` 후보**.
228
+
229
+ 3. **`abstract class` → `sealed class` 학생 자가 변경 (when exhaustive + 라이브러리 제약)** — **MCP 룰 `sealed-class-library-extension-constraint` 후보**.
230
+
231
+ 4. **`thisScore` 외부 의존 → 본인 점수 자가 (Tell-Don't-Ask)** — **MCP 룰 `parameter-vs-self-state-access` 후보**.
232
+
233
+ 5. **테스트 = 역할 중심** — **MCP 룰 `test-by-role-not-by-flow` 후보**.
234
+
235
+ 6. **tailrec 자가 적용** — 누적 3+ PR.
236
+
237
+ 7. **Profit 팩토리 메서드 자가 계산** — PR #142 결 합류.
238
+
239
+ 8. **operator overloading 자가 활용** — PR #36·#142 결.
240
+
241
+ 9. **else 분기 = 논리 오류** — PR #35 결.
242
+
243
+ 10. **결과 통계 + 수익 계산 책임 분리 (BlackjackResult)** — **MCP 룰 `result-aggregation-locator` 강화** 누적 3+ PR.
244
+
245
+ ## MCP 룰 후보 신규 + 강화 (PR #140)
246
+
247
+ | 룰 | 신규 / 강화 | 누적 PR |
248
+ |---|---|---|
249
+ | `higher-order-function-as-domain-view-decoupling` | 신규 | 1 (#140) |
250
+ | `sealed-class-library-extension-constraint` | 신규 | 1 (#140) |
251
+ | `parameter-vs-self-state-access` | 신규 | 1 (#140) |
252
+ | `test-by-role-not-by-flow` | 신규 | 1 (#140) |
253
+ | `tailrec-optimization-applicability` | 강화 | 3+ (#138·#142·#140) |
254
+ | `result-aggregation-locator` | 강화 | 3+ (#126·#142·#140) |
255
+ | `super-keyword-for-shared-logic` | 강화 | 3+ (#138·#142·#140) |
256
+ | `sealed-vs-abstract-vs-open-locator` | 강화 | 7+ |
257
+ | `kotlin-exception-handling-strategy` | 강화 | 5+ |
258
+
259
+ ## 비교 (PR #113 → #140)
260
+
261
+ - **1단계 #113 22 thread → 2단계 #140 16 thread**.
262
+ - **1단계 #113 Hit/Stay Boolean → 2단계 #140 sealed class 학생 자가 변경**.
263
+ - **1단계 #113 Players 일급 컬렉션 사용자 입력 한계 자가 의문 → 2단계 #140 고차함수 자가 학습**.
264
+ - **1단계 #113 BlackjackGame 도메인 객체 자가 적용 → 2단계 #140 BlackjackResult + Profit 책임 분리**.
265
+ - **2단계 #140 학생 자가 학습 정점 유지** (commit SHA + 자가 의문 5+ 회).