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,189 @@
1
+ # PR #43 — [블랙잭 2단계] 스캇 미션
2
+
3
+ - **Reviewee:** [@chws0508](https://github.com/chws0508)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/43
5
+ - **단계:** 2단계
6
+ - **리뷰어:** @namjackson (잭슨)
7
+ - **라인 코멘트:** 10 스레드 — *학생 자가 책임 위치 매우 깊은 의문* + *1단계 권고 적극 반영 (Score, 상태 패턴, sealed class)*
8
+ - **양 단계 분석 reviewee** (1단계 #26 별도). 학생 자가 진화 모범.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **1단계 권고 적극 반영 + 상태 패턴 자가 도입** — 학생 자가 답변: *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"* (1단계의 Player 스코어 분기 깊이 → 2단계 상태 패턴 자가 적용). 잭슨 칭찬: *"상태 패턴을 활용해주셨네요 👍 👍"* / *"sealed class 👍"*. **PR #39 (rhthrhrl0 상태 패턴 처음 자가 학습) / PR #98 (chaehyuns 상태 패턴 시도) 결**.
13
+ - **학생 자가 책임 위치 매우 깊은 의문** — *"게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."* — **학생이 *4 후보 명시 + reviewer 의 책임 기준 자가 의문* 모범**. PR #128·#135·#108·#133·#136·#137·#148·#151·#98·#95·#99·#23 와 같은 결.
14
+ - **잭슨 자가 한계 인정 + 책임 위치 트레이드오프 명시** — *"GameResultType에게 승패를 결정하는 책임을 주었는데, GameResultType에는 결국 playerScoreState와 dealerScoreState를 모두 알아야한다는 단점또한 생기는것 같아요. 승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"* — **MCP `oop_propose_alternatives` 어휘와 일치**. PR #95 (말리빈 *"옳고 그름 없고 장단점만"*) / PR #23 (말리빈 *"제 개인적인 의견입니다"*) / PR #26 (잭슨 *"개인적인 의견이니 참고만"*) 결.
15
+ - **suggestion 블록 활용 2회** — `cardDeck.shuffled()[0]` → `cardDeck.shuffled().first()` / when 분기 직접 비교 코드 suggestion. PR #26 (잭슨 *given-when-then + expression body*) 결.
16
+ - **학생 자가 잘못된 가정 자가 인정** — *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"* — **학생 자가 잘못된 가정 자가 인정 + Kotlin 어휘 자가 학습**. PR #23 1단계의 *else 지양 극단 적용* / PR #146 *YAGNI 자가 인정* 결.
17
+ - **interface 프로퍼티 자가 학습 권고** — 잭슨: *"코틀린에서 인터페이스에서는 프로퍼티도 선언할수 있어요 😄 필요에 따라서, 함수대신 프로퍼티도 사용할수 있습니당!"*. **Kotlin 어휘 (interface property) 자가 학습** — PR #98·#99·#146·#137 의 *Kotlin 어휘 학습* 결.
18
+
19
+ ## 못한 점 (설계 관점)
20
+
21
+ ### 1. `compareScoreValue` 점수 차이 계산 → 직접 비교 권고
22
+
23
+ 잭슨 suggestion:
24
+
25
+ ```kotlin
26
+ fun compareScoreValue(dealerScoreValue: Int, playerScoreValue: Int): GameResultType {
27
+ return when {
28
+ playerScoreValue > dealerScoreValue -> WIN
29
+ dealerScoreValue < playerScoreValue -> LOSE
30
+ else -> DRAW
31
+ }
32
+ }
33
+ ```
34
+
35
+ 잭슨 진단: *"점수차이를 계산하신 이유가 있나욤? 그냥 크기를 비교해주는게 좀더 직관력이 있지않을까욤?"*
36
+
37
+ 학생: *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"*
38
+
39
+ → **3 가지 학습**:
40
+
41
+ #### 1.1. *`when (값)` vs `when { 조건 }` 두 형태*
42
+
43
+ - *`when (x) { 1 -> ..., 2 -> ... }`* — *값 매칭*. 학생 *잘못된 가정 (소괄호 필수)*.
44
+ - *`when { x > y -> ..., x < y -> ... }`* — *조건 매칭 (if-else-if chain 대체)*. **Kotlin 의 강력한 어휘**.
45
+
46
+ #### 1.2. *점수 차이 vs 직접 비교*
47
+
48
+ - *점수 차이 (`dealer - player`) → 부호 검사* = *우회 + 직관성 ↓*.
49
+ - *직접 비교 (`>`, `<`, `==`) → enum 결과* = *직관 + 단순*.
50
+
51
+ #### 1.3. *학생 자가 잘못된 가정 자가 인정 모범*
52
+
53
+ **Kotlin 어휘 학습 갭 자가 노출 = 학습 가시화 모범**. PR #23 (멘델 *else 지양 극단*) / PR #146 (yrsel *YAGNI 자가 인정*) 결.
54
+
55
+ ### 2. `GameResultType` 책임 위치 — 학생 자가 매우 깊은 의문
56
+
57
+ 잭슨 메타 진단:
58
+
59
+ > *"GameResultType에게 승패를 결정하는 책임을 주었는데, GameResultType에는 결국 playerScoreState와 dealerScoreState를 모두 알아야한다는 단점또한 생기는것 같아요. 승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"*
60
+
61
+ 학생 자가 매우 깊은 의문:
62
+
63
+ > *"이 부분이 상당히 어려운 것 같습니다 ㅠㅠ 게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."*
64
+
65
+ → **5 가지 학습**:
66
+
67
+ #### 2.1. *책임 위치 = 4 후보*
68
+
69
+ 학생 자가 명시:
70
+ - (A) **Player** — 플레이어가 자기 승패 판단.
71
+ - (B) **BlackJackGame** — 게임이 승패 판단 (god-object 위험).
72
+ - (C) **GameResultType (enum)** — *enum 이 행동 가짐 = OOP 함정 (enum 만능)*.
73
+ - (D) **별도 객체 (예: Judge / Referee)** — *심판 객체 분리*.
74
+ - (E, 학생 선택) **State** — *상태가 자기 승패 결정 (다형성)*.
75
+
76
+ PR #74 (송핑크 *Referee 자가 토론*) / PR #23 1단계 (멘델 *3 후보 + 그림*) / PR #70·#98 (chaehyuns *Judge 분리*) 결.
77
+
78
+ #### 2.2. *enum에 행동 부여 = 양가성*
79
+
80
+ - *enum + 행동* = *Kotlin 어휘 풍부 + 멤버별 분기 캡슐화*. PR #137·#148·#90·#146 의 *enum + when exhaustive* 결.
81
+ - *그러나 enum 이 *다른 객체 (Player, Dealer) 의 내부 상태* 까지 알아야 한다면* = *책임 누수*.
82
+
83
+ #### 2.3. *State 패턴 = 다형성 디스패치*
84
+
85
+ - *각 State (BlackJack, Bust, Hit, Stay) 가 자기 승패 결정 메서드*.
86
+ - *외부는 `state.compareTo(other)` 만 호출* → *enum 분기 제거*.
87
+
88
+ PR #93·#136·#152 의 *State.compareTo: GameResult 다형성* 결.
89
+
90
+ #### 2.4. *책임 기준 자가 의문 모범*
91
+
92
+ 학생의 *"리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다"* — **reviewer 의 *책임 기준* 자가 의문**. *학생이 *경험/규칙* 을 묻는 것이 아니라 *판단 기준* 을 묻는 것* = **메타 학습 자가 명시**.
93
+
94
+ #### 2.5. *"정답은 없는거니, 고민만해주셔도 좋아요"* — reviewer 메타 어휘
95
+
96
+ 잭슨의 *"정답은 없는거니"* — **MCP `oh-my-oop` 의 핵심 가치**. PR #95 (말리빈 *"옳고 그름 없고 장단점만"*) / PR #23·#26 결.
97
+
98
+ ### 3. `Player 스코어 분기 깊이` → 상태 패턴 자가 적용
99
+
100
+ 잭슨 진단: *"Player의 스코어 별로 분기처리를 해주어서, 각 스코어별 케이스가 나누어졌지만, 반면에, 결국 뎁스가 깊어져서, 한번에 승패로직을 파악하기는 힘들수도 있다고 생각이 들어요!"*
101
+
102
+ 학생: *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"*
103
+
104
+ → **`if-else 분기 깊이 < State 다형성`**:
105
+ - *if-else N 단 분기* = *읽기 힘듦 + 변경 시 N 곳 모두 수정*.
106
+ - *State 객체 N 개* = *각 객체에 분기 책임 분산 + 새 상태 추가 시 새 State 클래스 1개*.
107
+
108
+ PR #98 (chaehyuns 상태 패턴 시도) / PR #39 (rhthrhrl0 상태 패턴 처음) / PR #93·#136·#152·#90 의 *State 정공* 결.
109
+
110
+ ### 4. `shuffled()[0]` → `shuffled().first()`
111
+
112
+ 잭슨 suggestion: `return cardDeck.shuffled().first()`
113
+
114
+ → **Kotlin 어휘 (.first())** — *`[0]`* (배열 인덱스) < *`.first()`* (의도 명시). *비어있을 때 `NoSuchElementException` 명시 + 의도 가독성*.
115
+
116
+ ### 5. `Controller god-object` — `BlackJack.runGame()` 결과 반환
117
+
118
+ 잭슨: *"게임시작시 , 플레이어 턴 -> 딜러턴 의 게임을 통해서 결과를 리턴하는 부분은 BlackJack 클래스내에서 관리하는 책임이 아닐까요? 컨트롤러에서는 blackJackGame 게임을 실행시키고, 결과만 받아오면 어떨까요? `val gameResult = blackJackGame.runGame(`"*
119
+
120
+ → **Controller 절차 분기 < BlackJack 도메인 응집**:
121
+ - *Controller 가 *플레이어 턴 → 딜러 턴 → 결과* 분기* = *도메인 절차 누수*.
122
+ - *`blackJackGame.runGame()` 단일 진입점* = *도메인 절차 캡슐화 + Controller 는 결과만 출력*.
123
+
124
+ PR #99 (s6m1n *Controller god-object 메타 질문*) / PR #95 (송핑크 *game.start() 결과 반환*) / PR #28·#78·#112·#125·#147 의 *Controller god-object* 결.
125
+
126
+ ### 6. `private` 가시성 — 외부 노출 함수만 public
127
+
128
+ 잭슨: *"외부에 노출되지않는 함수들은 private으로 관리해주세요!"*
129
+
130
+ → **Kotlin 가시성 어휘** = *public default 방치 = 불필요 API 노출*. PR #99 (s6m1n *protected 자가 학습*) 결.
131
+
132
+ ### 7. `interface 프로퍼티` 자가 학습
133
+
134
+ 잭슨: *"코틀린에서 인터페이스에서는 프로퍼티도 선언할수 있어요 😄 필요에 따라서, 함수대신 프로퍼티도 사용할수 있습니당!"*
135
+
136
+ → **Kotlin interface vs Java interface**:
137
+ - *Java*: 메서드만 (default impl 가능, but no fields).
138
+ - *Kotlin*: *추상 프로퍼티 선언 가능* (`val score: Int`) + *구현체가 백킹 필드 또는 getter 제공*.
139
+ - *학생 코드의 `fun getValue(): Int`* < *`val value: Int`* — *getter 함수 < 프로퍼티 어휘*.
140
+
141
+ PR #98 (chaehyuns *fun interface vs interface*) 결.
142
+
143
+ ### 8. `주석 코드 수정`
144
+
145
+ 잭슨: *"주석 코드를 수정해주세요!"*
146
+
147
+ → **주석 정리 = 일상 책임**. PR #28·#79 의 *주석 정리* 결.
148
+
149
+ ## 리뷰어 의견 요지 (잭슨 / namjackson)
150
+
151
+ 10 코멘트 특징 (PR #26 와 동일 reviewer):
152
+
153
+ - **suggestion 블록 활용 2회** — *when 분기 + `shuffled().first()`*. PR #26 (잭슨 *given-when-then + expression body*) / PR #39 (말리빈 *if return*) 결.
154
+ - **메타 질문 + 책임 기준 자가 토론** — *"승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요!"* — **책임 기준 메타 어휘**.
155
+ - **MCP `oop_propose_alternatives` 어휘 일치** — *"정답은 없는거니, 고민만해주셔도 좋아요!"* / *"이부분도 정답이 없는부분이니 고민만해주셔도 좋을거같아요!"*. PR #26 (잭슨 *"개인적인 의견이니 참고만"*) 결.
156
+ - **칭찬 분포** — *sealed class 👍*, *상태 패턴 👍👍*, *Kotlin 어휘 (interface 프로퍼티) 추가 학습* — *학생 자가 진화 인정*.
157
+ - **머지 시점 학생 자가 회고 권유 없음** — *10 thread = 가벼운 분량 + 1단계 권고 적극 반영* 으로 빠른 머지.
158
+
159
+ ## 대표 인용
160
+
161
+ > *"게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."* — chws0508 (학생 자가 4 후보 + reviewer 책임 기준 자가 의문 모범)
162
+
163
+ > *"승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"* — namjackson (책임 기준 + MCP 핵심 어휘)
164
+
165
+ > *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"* — chws0508 (1단계 권고 자가 반영 + 상태 패턴 자가 적용)
166
+
167
+ > *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"* — chws0508 (학생 자가 잘못된 가정 자가 인정 + Kotlin 어휘 자가 학습)
168
+
169
+ ## 얻은 교훈
170
+
171
+ 1. **책임 위치 = *기준 자가 의문 모범*** — *학생이 *4 후보 명시 + reviewer 의 판단 기준 자가 의문*. **메타 학습 자가 명시**. PR #95 (송핑크 *abstract vs open 자가 의문*) / PR #99 (s6m1n *Return enum 자가 의문*) 결.
172
+
173
+ 2. **`enum 에 행동 부여` 양가성** — *Kotlin 어휘 풍부 + 멤버별 분기 캡슐화* vs *다른 객체 내부 상태 까지 알아야 함 = 책임 누수*. PR #137·#148·#90·#146 의 *enum + when exhaustive* / PR #93 *sealed without differentiation* 결.
174
+
175
+ 3. **`State 다형성` = if-else 분기 깊이 해결** — *각 State 가 자기 승패 결정 메서드 → 외부 분기 제거*. PR #93·#136·#152 의 *State.compareTo* / PR #98·#39·#43 학생 자가 적용 결.
176
+
177
+ 4. **잭슨의 *"정답은 없는거니, 고민만해주셔도 좋아요"*** — **MCP `oh-my-oop` 핵심 어휘**. PR #95·#23·#26 와 같은 결. *reviewer 가 *판단 기준 강요 X + 학생 선택지 인정* 메타 어휘*.
178
+
179
+ 5. **`when (값)` vs `when { 조건 }` Kotlin 어휘 갭 자가 인정** — *학생이 *잘못된 가정 (소괄호 필수) 자가 명시 + 자가 학습*. **MCP 룰 후보 `when-pattern-vs-condition`** = *Kotlin 어휘 학습 갭 진단*.
180
+
181
+ 6. **`interface 프로퍼티` Kotlin 어휘** — *Java interface (메서드만) vs Kotlin interface (추상 프로퍼티 + 메서드)*. *getter 함수 (`fun getValue()`) < 프로퍼티 (`val value`)*.
182
+
183
+ 7. **`Controller god-object → BlackJack.runGame()` 결과 반환** — *Controller 절차 분기 < 도메인 응집*. PR #99·#95·#28·#78·#112·#125·#147 결.
184
+
185
+ 8. **suggestion 블록 활용 (Kotlin 어휘 + 코드 단순화)** — *when 분기 직접 비교 + `shuffled().first()`*. PR #26·#39 결.
186
+
187
+ 9. **1단계 권고 적극 반영 + 상태 패턴 자가 적용** = *학생 자가 진화 모범*. *PR #26 1단계 권고 (Player 스코어 분기) → PR #43 2단계 자가 적용 (State 패턴)* — **양 단계 본 reviewer 만 가능한 진화 가시화**. PR #98·#39·#74·#67 결.
188
+
189
+ 10. **수직 책임 분포 (4 후보) + 학생 자가 명시** — *Player / BlackJackGame / GameResultType / 별도 객체* — *학생이 *책임 후보를 명시적으로 나열* + reviewer 가 *기준 자가 토론*. **MCP `oop_propose_responsibilities` 어휘와 일치**.
@@ -0,0 +1,351 @@
1
+ # PR #109 — [블랙잭 1단계] 오이 미션
2
+
3
+ - **Reviewee:** [@cucumber99](https://github.com/cucumber99)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/109
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@hyemdooly](https://github.com/hyemdooly) (둘리) — 2025 코호트 신규 reviewer (PR #130·#143·#109 분석 reviewer)
7
+ - **라인 코멘트:** 25 스레드 — *PR 본문 자가 의문 3개 (생성자 vs Deck interface + UI 모델 도메인 분리 + Person 추상 클래스) + 학생/reviewer 5 라운드 양방향 토론 (Game 책임 + Deck 외부 주입 vs 딜러 보유) + reviewer 자가 정정 + 학생 자가 의문 + 테스트 = 도메인 설계 개선 어휘 + State 별 카드 장수 책임 + State 가 객체 vs 값 받기 + 상수 도메인 위치 + assertAll vs 여러 assertThat + Deck 생성 자연스러운가?*
8
+ - **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, PR #117·#129·#130·#126·#138·#142·#143·#109 = **2025 코호트 8 PR 코퍼스 성장**).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 의문 3개 + 페어 학습 + 자가 입장 명시
13
+
14
+ PR 본문 (Thread 1·3 인용):
15
+ - *Hand 일급 컬렉션 + Person 추상 → Hand 생성자 받음 vs Deck interface 추상화 학생 자가 의문*.
16
+ - *UI 모델 분리 (PersonUiModel) + 도메인 vs View 책임 학생 자가 의문*.
17
+ - *Person 추상 클래스로 Dealer/Player 구현 자가 적용*.
18
+
19
+ → **학생 자가 의문 3개 + 자가 입장 + 페어 학습** = PR #21·#35·#126 결의 *PR 본문 자가 의문 3개* 어휘 합류. 2025 코호트 정점 유지.
20
+
21
+ ### 2. `Deck` 생성 책임 학생 ↔ reviewer 5 라운드 양방향 토론
22
+
23
+ reviewer (Thread 13): *"`Deck`에서 카드를 생성하는 것은 자연스러운 액션일까요?"*
24
+
25
+ 학생:
26
+
27
+ > *"저는 `Deck`이 게임에서 사용될 카드들을 관리하므로, 생성에 대한 책임 또한 가지고 있어도 된다고 생각했습니다! (...) 둘리의 생각은 어떠신가요?🤔"*
28
+
29
+ reviewer:
30
+
31
+ > *"저는 카드들을 외부에서 주입받는 형태를 사용할 것 같아요. 🤔 덱은 누군가가 카드를 뽑을 수 있도록 관리하는 역할은 맞지만, 생성을 한다고 생각하지는 않아요. 카드가 비었다고 해서 새로운 덱을 생성해주는 것도 어색해요. (...) 처음부터 빈 값을 세팅할 수 있다면 더 자연스럽지 않을까요?"*
32
+
33
+ → **5 라운드 양방향 + DI vs 자가 생성 트레이드오프** = PR #143 (medAndro 결의 *Deck 외부 주입 vs 내부 생성*) 합류. **MCP `oop_propose_alternatives` 핵심 가치 합류**.
34
+
35
+ ### 3. State 별 카드 장수 책임 + State 객체 vs 값 받기
36
+
37
+ reviewer (Thread 5·6): *"`State`들이 객체를 받기 보다는 실제 값들(카드 개수, 스코어)을 받아서 판단하면 어떨까요? 여기서 관심사는 사람보다는 사람이 가지고 있는 것들이라고 생각해요!"* + *"`State`에 따른 뽑을 수 있는 카드 장수를 선언하면 어떨까요?"*
38
+
39
+ → **State 책임 분리 + 관심사 = 카드 (사람 X)** = PR #87·#142·#138 (state pattern + abstract method) 결의 *State 자식 책임* 어휘 강화.
40
+
41
+ **MCP 룰 `state-receives-value-vs-object` 후보** — *State 가 객체 받기 vs 값 받기 (관심사)*.
42
+
43
+ ### 4. Game 책임 5 라운드 양방향 토론 + reviewer 자가 정정 + 학생 자가 결정
44
+
45
+ reviewer (Thread 19): *"사실 저는 지금 구조에서 Game 존재의 이유를 잘 모르겠어요. (...) 오히려 분리해서 더 가독성이 떨어지는 것 같아요. 🤔"*
46
+
47
+ 학생 자가 의문 + 자가 결정:
48
+
49
+ > *"`Game` 객체를 사용하지 않고, 컨트롤러에 도메인 로직이 노출되어도 괜찮을까요? 혹은 컨트롤러에 도메인 로직이 노출될 수 밖에 없는 상황이라면, 설계가 잘못된 것인가요?"*
50
+
51
+ 학생 자가 결정: *"지금 당장은 Game의 문제를 해결할 방법이 떠오르지 않아서, 우선은 Game 객체를 사용하지 않게끔 하겠습니다."*
52
+
53
+ reviewer 자가 정정:
54
+
55
+ > *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏 **람다 함수로 전달하는 것은 도메인이 뷰에 의존하지 않는 것이 맞습니다. 뷰의 함수를 참조하는 것이 아니라서요!** 저도 이 이후로 조금 더 생각을 해봤는데, 오이 의견대로 우선 Game을 사용하되 함수를 너무 타고 들어가지 않게끔 단순하게 만들면 좋아지지 않을까 싶어요!!"*
56
+
57
+ → **5 라운드 양방향 + 학생 자가 결정 → reviewer 자가 정정 + 변경 인정** = PR #126·#130·#142 (reviewer 자가 한계 인정) 결 정점 강화. **MCP 룰 `reviewer-self-position-revision` 후보** — *reviewer 가 자가 의견 변경 + 학생 의견 인정*.
58
+
59
+ ### 5. 학생 자가 *현실 메타포 (딜러가 카드 분배)*
60
+
61
+ 학생 자가 답변 (Thread 17):
62
+
63
+ > *"현실에서의 블랙잭 게임을 생각해보면, 딜러가 정확히 하나의 덱을 가지고 있으면서 각 플레이어와 자신에게 카드를 분배하는 것이 적절하다고 생각했습니다."*
64
+
65
+ → **학생 자가 현실 메타포 어휘** = PR #117·#129·#130 결의 *현실 메타포 정합* 학생 자가 합류. **MCP 룰 `metaphor-fidelity-locator` 강화** 누적 11+ PR ⭐⭐⭐.
66
+
67
+ 다만 *PR #117 reviewer 의 *카드뭉치에서 꺼내서 플레이어 받는다* 메타포* vs *PR #109 학생 자가 *딜러가 분배* 메타포* = **현실 메타포 양가성 (분배자 = 딜러 vs 카드뭉치)**.
68
+
69
+ ### 6. 학생 자가 *factory 함수 vs 생성자 동일 역할* 인지
70
+
71
+ reviewer (Thread 2): *"팩토리 함수가 생성자랑 동일한 역할을 하는 것으로 보여요!"*
72
+
73
+ → **팩토리 함수 무의미 = 생성자 활용** = PR #21·#142 결의 *불필요한 추상화* 변형. **MCP 룰 `factory-function-vs-constructor-redundancy` 후보**.
74
+
75
+ ### 7. UI 모델 분리 (PersonUiModel) + 안드로이드 어휘
76
+
77
+ reviewer (Thread 3):
78
+
79
+ > *"사실 UiModel을 사용하는 경우는 실제 안드로이드 개발에서 자주 사용되긴 합니다. Data - Domain - Presentation 계층으로 나누게 되면서 각 계층의 모델들을 만들 수 있어요. (지금 당장 몰라도 되는 내용이니 그렇구나 하고 넘어가주세요.ㅎㅎ) 우선 저는 Ui Model이 도메인이 아니라고 생각해요. 지금 구조에서는 View의 역할에 가깝다고 생각합니다."*
80
+
81
+ → **3 계층 (Data/Domain/Presentation) 분리 + 학생 부담 최소화 어휘** = PR #21·#35 (galcyurio SuitModel 미래 학습) 결 + PR #130 (hyemdooly RankModel 자가 적용) 결의 **학생 → reviewer 진화 어휘 일관**.
82
+
83
+ ### 8. 추가 칭찬
84
+
85
+ - Thread 7: *"확장 함수 사용 👍"*.
86
+ - Thread 9: *"테스트 코드에 kotest의 DSL을 활용해주셨군요 👍"*.
87
+ - 학생 자가 답변 풍부 + 학생 자가 코드 예시 (PR 본문) + 학생/reviewer 5 라운드 양방향 토론 4 자리 (Thread 13·15·17·19).
88
+
89
+ ## 못한 점 (설계 관점)
90
+
91
+ ### 1. 부생성자 vs Default value (Kotlin 어휘)
92
+
93
+ reviewer (Thread 4): *"여기서 부생성자가 필요할까요?"* + *"아하 Default value를 사용할 수 있을 것 같아서 드린 리뷰였어요!"* + 외부글 (kotlinlang.org/docs/classes.html#constructors).
94
+
95
+ 학생 자가 답변:
96
+
97
+ > *"특정 카드들을 플레이어나 딜러가 가지고 있을 때의 상황을 테스트하기 위해서 `Hand`를 생성자로 전달하거나, 전달하지 않을 경우 내부에서 기본으로 생성하게 됩니다. 때문에 외부에서 부 생성자로 `Hand`를 받아올 경우 외부와의 참조를 끊기 위해 `Hand`에 `copy`를 선언하고 그대로 사용했습니다."*
98
+
99
+ → **부생성자 vs Kotlin default value 트레이드오프** = PR #126·#130 결의 *test-fixture-secondary-constructor* 어휘 + Kotlin default value 어휘 비교.
100
+
101
+ ### 2. `setName` 이름 vs 출력 동작 — 이름 의미 불일치
102
+
103
+ reviewer (Thread 12): *"이름은 `setName`이지만 하는 일은 출력이군요 🤔"*
104
+
105
+ → **이름 의미 정확성** = PR #36·#117·#129·#130·#139 (`function-name-vs-return-semantic-mismatch`) 결 누적 5+ PR.
106
+
107
+ ### 3. flag → 명시적 이름
108
+
109
+ reviewer (Thread 14): *"flag말고 더 명시적인 이름이 있을까요?"* — *Boolean 변수 명명 정확성*.
110
+
111
+ **MCP 룰 `boolean-variable-naming` 후보**.
112
+
113
+ ### 4. `dealer.draw()` = `deck.draw()` 위임만 — 책임 모호
114
+
115
+ reviewer (Thread 15·17): *"이게 무슨 로직일까 생각했는데 딜러가 뽑아서 플레이어에게 주고있는 것이군요. 결국 플레이어가 카드를 뽑고 있는 것이니, 각자 덱에서 카드를 뽑는다 생각하면 더 단순해지지 않을까요?"*
116
+
117
+ 학생: *"`dealer.draw()`는 결국 `deck.draw()`를 반환할 뿐, 추가적인 동작은 하지 않는데요. 이렇게 되면 카드를 드로우하는 책임은 최종적으로 `Deck`에게 있는건가요?"*
118
+
119
+ reviewer 자가 답변:
120
+
121
+ > *"카드를 뽑아서 리턴하고 있는건 deck이고 뽑은 카드를 리턴하고 있는 것도 dealer인데, deck에서 뽑은 카드를 그대로 dealer가 던져준다고 해서 dealer에게는 책임이 없다고 할 수 있을까요? 크루들과 함께 대화해보면 좋을 것 같네요!"*
122
+
123
+ → **단순 위임 메서드 = 책임 모호** = PR #129·#87·#138 (`simple-delegation-method-unnecessary`) 결 강화 누적 5+ PR.
124
+
125
+ ### 5. Player 의 람다 인자 (decideHit, onHit) - View 의존
126
+
127
+ reviewer (Thread 11): *"출력 때문에 String에 이름을 넣기 위해 이렇게 된 람다식으로 보입니다. 뷰를 제외하고 봤을 때, 이런 구조는 자연스러운 구조일까요? 🤔"*
128
+
129
+ 학생: *"근데 둘리가 말한 몇 가지 버그 중 하나가 해당 구조때문에 발생한다는걸 알아버렸어요..🥲 또한 플레이어 객체가 `View`의 메소드에 의존하고 있기 때문에 문제가 될 수 있을 것 같아요. 해당 부분은 개선하겠습니다!"*
130
+
131
+ → **람다 = View 결합 + 버그 발생 자가 학습** = PR #36·#129·#138·#142 결 합류.
132
+
133
+ ### 6. 상수 도메인 위치 (`GameRule` → 관련 모델 분산)
134
+
135
+ reviewer (Thread 20): *"이 상수들을 관련된 도메인 모델로 옮겨볼 수 있지 않을까요?"*
136
+
137
+ 학생: *"하나의 상수가 여러 곳에서 사용되는 경우가 있어서 우선 `GameRule`에 모아놨습니다."*
138
+
139
+ → **`GameRule` 상수 모음 vs 각 도메인 모델 분산** = PR #130 (domain-constant-locator) 결의 *반대 시점*.
140
+
141
+ #### 6.1. *2 가지 트레이드오프*
142
+
143
+ | 안 | 장점 | 단점 |
144
+ |---|---|---|
145
+ | GameRule 상수 모음 (학생) | *상수 한 자리 + 여러 곳 공유 간결* | *도메인 의미 분산 + 한 클래스 비대* |
146
+ | 각 도메인 모델 분산 (reviewer) | *각 모델 자가 상수 + 도메인 의미 명확* | *상수 ↑ + 공유 시 모델 ↔ 모델 의존* |
147
+
148
+ **MCP 룰 `constant-aggregation-vs-domain-distribution` 후보**.
149
+
150
+ ### 7. `assertAll` vs 여러 assertThat
151
+
152
+ reviewer (Thread 10): *"`assert`를 한 함수에 여러번 쓰면 어떤 불편함이 생길 수 있을까요?"*
153
+
154
+ 학생: *"`assertThat`중 하나라도 검증에 실패하면 이후 `assertThat`이 실행되지 않는 문제가 있었네요. `kotest`나, `assertAll`을 활용해보겠습니다!"*
155
+
156
+ → **테스트 fail-fast vs fail-all** = *학생 자가 학습*. **MCP 룰 `assert-all-vs-multiple-assertions` 후보**.
157
+
158
+ ### 8. 테스트 = 도메인 설계 개선 어휘 (학생 자가 의문 + reviewer 답변)
159
+
160
+ 학생 자가 의문 (Thread 25):
161
+
162
+ > *"테스트 코드에서 카드를 직접 추가하지 않고 생성자로 주입하기 위해서는 도메인의 코드가 바뀌어야 하는데요. 테스트를 위해 도메인을 변경하는 것은 바람직한가요?"*
163
+
164
+ reviewer:
165
+
166
+ > *"테스트가 용이하도록 설계를 개선하는 것은 도메인을 변경하는 것일까요?"*
167
+
168
+ → **테스트 = 도메인 설계 개선 어휘** = PR #87 (jaeyeongjo *테스트 = 객체 설계 명세서*) + PR #129·#142 (테스트 가능성 = 객체 설계 지표) 결 강화 정점. 누적 4+ PR.
169
+
170
+ **MCP 룰 `test-driven-domain-improvement` 강화** — *테스트 용이 = 설계 개선 어휘*.
171
+
172
+ ### 9. `given/when/then` 표준 vs 학생 코드 양가
173
+
174
+ reviewer (Thread 18):
175
+
176
+ > *"given/when/then에 어떤 행위를 하는지 다시 한번 살펴보면 좋겠어요. 제가 보기에 여기서 when은, given에 가까워보여요. 빈 덱을 만들기 위함이니까요!"*
177
+
178
+ → **테스트 BDD 어휘 (given/when/then) 정확성** — *학생 자가 학습*. **MCP 룰 `bdd-given-when-then-fidelity` 후보**.
179
+
180
+ ### 10. Participant 0 리턴 vs 예외
181
+
182
+ reviewer (Thread 22): *"더 뽑을 수 없다면 0을 리턴하는 것이 자연스럽지 않을까요?"*
183
+
184
+ 학생: *"예외를 발생시키는 것보다 둘리가 말한 방식이 더 자연스러울 것 같아요😊"*
185
+
186
+ → **예외 vs 0 리턴** = PR #35 (galcyurio Kotlin 예외 처리 4 원칙) 결 합류.
187
+
188
+ ### 11. 테스트 함수 이름 vs 결과 불일치
189
+
190
+ reviewer (Thread 23): *"테스트함수 이름과 결과가 일치하지 않는 것 같아요. 🤔"* — *PR #36·#117 (`function-name-vs-return-semantic-mismatch`) 결 합류*.
191
+
192
+ ### 12. `Game(dealer, players)` init 블록에서 카드 분배 — 생성 시 부작용
193
+
194
+ ```kotlin
195
+ class Game(val dealer: Dealer, val players: List<Player>) {
196
+ init {
197
+ players.forEach { player -> handOutCard(player) }
198
+ handOutCard(dealer)
199
+ }
200
+ ...
201
+ }
202
+ ```
203
+
204
+ → **생성자 init 블록 부작용** = *Game 생성 시 자동 카드 분배* = *학생 자가 의문 (Thread 24) reviewer 답변*. **MCP 룰 `init-block-side-effect` 후보**.
205
+
206
+ ### 13. 학생 자가 *Game 사용 X 결정* → reviewer 자가 정정 (Game 유지)
207
+
208
+ §4 참조. **학생 자가 결정의 한계 + reviewer 자가 정정** = *학생/reviewer 양방향 토론 정점*.
209
+
210
+ ### 14. `processTurn` `processDealerHit` `askHit` Game 메서드 4개 + 람다 인자
211
+
212
+ ```kotlin
213
+ fun askHit(decideHit: (String) -> Boolean, onHit: (Player) -> Unit) { ... }
214
+ fun processDealerHit(): Boolean { ... }
215
+ private fun askHitForEachPlayer(player: Player, decideHit: ..., onHit: ...) { ... }
216
+ private fun processTurn(player: Player, decideHit: ..., onHit: ...) { ... }
217
+ ```
218
+
219
+ → **Game 의 람다 인자 4개 메서드** = *PR #36 (callback-lambda-explosion) 결 합류*. *PR #142 결의 *Game 분리 + 책임 응집* 어휘 합류*.
220
+
221
+ ### 15. `dealer.canHit()` Tell-Don't-Ask + Dealer 자가 판단
222
+
223
+ ```kotlin
224
+ fun processDealerHit(): Boolean {
225
+ if (dealer.canHit()) { handOutCard(dealer); return true }
226
+ return false
227
+ }
228
+ ```
229
+
230
+ → **Dealer.canHit() 호출 = Tell-Don't-Ask 부분 정공**. 다만 *Game 이 분기 처리* = *완전 Tell-Don't-Ask X*.
231
+
232
+ 대안: `dealer.processHit(): Boolean` (Dealer 자가 처리). **MCP 룰 `external-flow-control-vs-internal` 후보**.
233
+
234
+ ## 리뷰어 의견 요지
235
+
236
+ - **PR 본문 자가 의문 3개에 답변 (Thread 1·3 + 인용)**.
237
+ - **부생성자 vs Kotlin default value + 외부글**.
238
+ - **State 가 객체 vs 값 받기 (관심사)** + **State 별 카드 장수 책임**.
239
+ - **UI Model = View 역할 + 3 계층 (Data/Domain/Presentation) + 학생 부담 최소화**.
240
+ - **`setName` 이름 vs 출력 동작 = 이름 의미 불일치**.
241
+ - **`flag` 명시적 이름**.
242
+ - **dealer.draw() = deck.draw() 위임 = 책임 모호**.
243
+ - **Player 의 람다 인자 = View 의존 + 버그 발생**.
244
+ - **Deck 생성 책임 5 라운드 양방향 + 외부 주입 권유**.
245
+ - **상수 도메인 분산 vs `GameRule` 모음**.
246
+ - **assertAll vs 여러 assertThat**.
247
+ - **테스트 = 도메인 설계 개선 어휘 (학생 자가 의문 + reviewer 답변)**.
248
+ - **given/when/then BDD 어휘 정확성**.
249
+ - **Participant 0 리턴 vs 예외**.
250
+ - **테스트 함수 이름 vs 결과 불일치**.
251
+ - **Game 책임 5 라운드 양방향 + reviewer 자가 정정 (Game 유지 권유)**.
252
+ - **딜러 Deck 보유 vs 외부 주입 (학생 자가 현실 메타포 + reviewer 람다 외부 주입)**.
253
+ - **kotest DSL 칭찬 + 확장 함수 사용 칭찬**.
254
+
255
+ ## 대표 인용
256
+
257
+ > [hyemdooly Thread 13]
258
+ > *"저는 카드들을 외부에서 주입받는 형태를 사용할 것 같아요. 🤔 덱은 누군가가 카드를 뽑을 수 있도록 관리하는 역할은 맞지만, 생성을 한다고 생각하지는 않아요. 카드가 비었다고 해서 새로운 덱을 생성해주는 것도 어색해요."*
259
+
260
+ → **Deck 생성 = 자연스럽지 않음 어휘**.
261
+
262
+ > [cucumber99 Thread 17]
263
+ > *"현실에서의 블랙잭 게임을 생각해보면, 딜러가 정확히 하나의 덱을 가지고 있으면서 각 플레이어와 자신에게 카드를 분배하는 것이 적절하다고 생각했습니다."*
264
+
265
+ → **학생 자가 현실 메타포** — *PR #117·#129·#130 결의 *현실 메타포 정합* 학생 자가 합류*.
266
+
267
+ > [hyemdooly Thread 19]
268
+ > *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏 **람다 함수로 전달하는 것은 도메인이 뷰에 의존하지 않는 것이 맞습니다.** (...) 오이 의견대로 우선 Game을 사용하되 함수를 너무 타고 들어가지 않게끔 단순하게 만들면 좋아지지 않을까 싶어요!!"*
269
+
270
+ → **reviewer 자가 의견 변경 + 학생 의견 인정** — *PR #126·#130·#142 결의 *reviewer 자가 한계 인정* 어휘 정점 강화*.
271
+
272
+ > [cucumber99 Thread 25]
273
+ > *"테스트 코드에서 카드를 직접 추가하지 않고 생성자로 주입하기 위해서는 도메인의 코드가 바뀌어야 하는데요. 테스트를 위해 도메인을 변경하는 것은 바람직한가요?"*
274
+
275
+ → **학생 자가 *테스트 vs 도메인 변경* 자가 의문**.
276
+
277
+ > [hyemdooly Thread 25]
278
+ > *"테스트가 용이하도록 설계를 개선하는 것은 도메인을 변경하는 것일까요?"*
279
+
280
+ → **테스트 = 도메인 설계 개선 어휘** — *PR #87·#129·#142 결 강화 정점*.
281
+
282
+ ## 얻은 교훈 (보편)
283
+
284
+ 1. **PR 본문 자가 의문 3개 + reviewer 인용 답변** — *2025 코호트 정점 유지*.
285
+
286
+ 2. **Deck 외부 주입 vs 내부 생성 (5 라운드 양방향)** — **MCP 룰 `dependency-injection-vs-internal-creation` 강화** 누적 2+ PR (#143·#109).
287
+
288
+ 3. **State 가 객체 vs 값 받기 (관심사)** — **MCP 룰 `state-receives-value-vs-object` 후보**.
289
+
290
+ 4. **Game 책임 5 라운드 + reviewer 자가 정정** — **MCP 룰 `reviewer-self-position-revision` 후보**. PR #126·#130·#142 결 강화.
291
+
292
+ 5. **현실 메타포 학생 자가 사용** — **MCP 룰 `metaphor-fidelity-locator` 강화** 누적 11+ PR ⭐⭐⭐.
293
+
294
+ 6. **테스트 = 도메인 설계 개선 어휘** — **MCP 룰 `test-driven-domain-improvement` 후보** + PR #87·#129·#142 강화. 누적 4+ PR.
295
+
296
+ 7. **factory 함수 vs 생성자 동일 역할 = 무의미 추상화** — **MCP 룰 `factory-function-vs-constructor-redundancy` 후보**.
297
+
298
+ 8. **UI Model = View 역할 + 3 계층 + 학생 부담 최소화** — *PR #21·#35·#130 결 합류*.
299
+
300
+ 9. **상수 도메인 분산 vs 모음 트레이드오프** — **MCP 룰 `constant-aggregation-vs-domain-distribution` 후보**.
301
+
302
+ 10. **assertAll vs 여러 assertThat (테스트 fail-fast vs fail-all)** — **MCP 룰 `assert-all-vs-multiple-assertions` 후보**.
303
+
304
+ 11. **BDD given/when/then 어휘 정확성** — **MCP 룰 `bdd-given-when-then-fidelity` 후보**.
305
+
306
+ 12. **init 블록 부작용 (Game 생성 시 자동 카드 분배)** — **MCP 룰 `init-block-side-effect` 후보**.
307
+
308
+ 13. **외부 흐름 제어 vs 객체 내부 (`dealer.canHit()` 외부 분기 vs `dealer.processHit()` 자가)** — **MCP 룰 `external-flow-control-vs-internal` 후보**.
309
+
310
+ 14. **Boolean 변수 명명 (flag → 명시적)** — **MCP 룰 `boolean-variable-naming` 후보**.
311
+
312
+ 15. **부생성자 vs Kotlin default value + 외부글** — **MCP 룰 `secondary-constructor-vs-default-value` 후보**.
313
+
314
+ 16. **모든 25 스레드 학생 자가 답변 + 학생/reviewer 5 라운드 양방향 토론 4 자리** — *2025 코호트 정점 유지*.
315
+
316
+ ## 얻은 교훈 (도메인)
317
+
318
+ 1. **딜러 = 카드 분배자 (학생 자가 현실 메타포)** — *PR #117 (카드뭉치에서 꺼내서 플레이어 받는다) 와 반대 시점 양가*.
319
+
320
+ 2. **State 별 카드 장수 (Dealer 1장 / Player 2장)** — *State 책임 분리*.
321
+
322
+ 3. **블랙잭 룰 정확성 = 학생 자가 적용** (코드에 명시 없으니 추가 검증 필요).
323
+
324
+ ## MCP 룰 후보 신규 + 강화 (PR #109)
325
+
326
+ | 룰 | 신규 / 강화 | 누적 PR |
327
+ |---|---|---|
328
+ | `state-receives-value-vs-object` | 신규 | 1 (#109) |
329
+ | `reviewer-self-position-revision` | 신규 | 1 (#109) |
330
+ | `metaphor-fidelity-locator` | 강화 | 11+ ⭐⭐⭐ |
331
+ | `test-driven-domain-improvement` | 강화 | 4+ (#87·#129·#142·#109) |
332
+ | `factory-function-vs-constructor-redundancy` | 신규 | 1 (#109) |
333
+ | `dependency-injection-vs-internal-creation` | 강화 | 2+ (#143·#109) |
334
+ | `constant-aggregation-vs-domain-distribution` | 신규 | 1 (#109) |
335
+ | `assert-all-vs-multiple-assertions` | 신규 | 1 (#109) |
336
+ | `bdd-given-when-then-fidelity` | 신규 | 1 (#109) |
337
+ | `init-block-side-effect` | 신규 | 1 (#109) |
338
+ | `external-flow-control-vs-internal` | 신규 | 1 (#109) |
339
+ | `boolean-variable-naming` | 신규 | 1 (#109) |
340
+ | `secondary-constructor-vs-default-value` | 신규 | 1 (#109) |
341
+ | `simple-delegation-method-unnecessary` | 강화 | 5+ |
342
+ | `function-name-vs-return-semantic-mismatch` | 강화 | 5+ |
343
+
344
+ ## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
345
+
346
+ - ***5 라운드 양방향 토론 + reviewer 자가 정정 4 자리 (Thread 13·15·17·19)*** — hyemdooly PR #109 — *학생 자가 결정 → reviewer 자가 정정 (학생 의견 인정)*.
347
+ - ***테스트 = 도메인 설계 개선 어휘*** — hyemdooly PR #109 — *PR #87·#129·#142 결 정점 강화*.
348
+ - ***학생 자가 현실 메타포*** — cucumber99 PR #109 — *학생이 reviewer 전에 자가 사용*.
349
+ - ***reviewer 자가 모호 어휘 인정 + 학생 의견 인정 (Thread 19)*** — hyemdooly PR #109 — *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏"*. **MCP 핵심 가치 합류 정점**.
350
+
351
+ → **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **2025 코호트 8 PR 코퍼스 성장**.