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,278 @@
1
+ # PR #22 — [블랙잭 1단계] 링링 미션
2
+
3
+ - **Reviewee:** [@RightHennessy](https://github.com/RightHennessy)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/22
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@galcyurio](https://github.com/galcyurio) (**신규 reviewer — 10번째**)
7
+ - **라인 코멘트:** 16 스레드 — *학생 자가 PR 본문 질문 명시 + OCP 칭찬 + 테스트 가독성 (Google Testing Blog 인용) + LinkedList pop 자가 학습*
8
+ - **신규 reviewee** (2023년 3월 코호트).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **PR 본문 자가 질문 명시** — *"아, 추가로 제 질문들은 아래 코드에 달아놓았습니다. 😊"* — **PR 본문에 *질문이 인라인 코멘트로* 분산 명시**. PR #76·#82·#107·#46·#91·#11·#13 결.
13
+ - **`GameResultCondition` enum + OCP 칭찬** — galcyurio: *"말씀해주신 것처럼 장단점이 있습니다. 지금 방법은 추가적인 분기가 생길 경우 기존 코드를 건드리지 않고도 enum constant를 추가하여 기능을 추가할 수 있다는 장점이 있습니다. 그래서 저는 OOP 관점에서 보았을 때, 개방 폐쇄 원칙을 잘 지켰다고 생각해요 :+1:"*. **개방폐쇄 원칙 (OCP) 명시 + 칭찬**. PR #16·#137·#100 의 *원칙 명시 어휘* 결.
14
+ - **`CardPack` 분리 칭찬** — galcyurio: *"네, 잘 구현해주셨습니다 :+1:"* (CardPack 분리).
15
+ - **테스트 가독성 자가 학습 (Google Testing Blog 인용)** — galcyurio + 학생 인용:
16
+
17
+ > *Google Testing Blog (Testing on the Toilet): "One property of a good test is `clarity`. Clarity means that a test should serve as readable documentation for humans, describing the code being tested in terms of its public APIs. Two more important properties are `completeness` and `conciseness`. A test is complete when its body contains all of the information you need to understand it, and concise when it doesn't contain..."*
18
+
19
+ **외부 자료 + 학생 자가 인용 + 자가 적용**. PR #91·#95·#23·#26·#16·#46·#77 의 *외부 자료* 결의 *학생측 외부 자료 인용*.
20
+
21
+ ## 못한 점 (설계 관점)
22
+
23
+ ### 1. `Cards size == INITIAL_CARDS_SIZE` 검증 — 학생 자가 의문
24
+
25
+ 학생 자가 의문: *"카드를 한장도 안받은 경우에 가진 카드를 보여주기위한 코드인데요, 이 하나를 위해 Controller에서 Cards를 import 하는 것이 적합할까요? 아니면 controller 안에서 상수처리를 해야할지, view에서 경우를 나누어 처리를 해줘야할지 궁금합니다!"*
26
+
27
+ galcyurio 1: *"Cards는 항상 size가 INITIAL_CARDS_SIZE일 수밖에 없으니 체크를 할 필요가 없습니다."*
28
+
29
+ ```kotlin
30
+ init {
31
+ require(cards.size == INITIAL_CARDS_SIZE)
32
+ }
33
+ ```
34
+
35
+ galcyurio 2: *"위와 별개로 domain에서 ui를 의존하는 반대의 경우는 문제가 되더라도 ui layer에서 domain layer의 클래스를 사용하는 것은 문제 없습니다."*
36
+
37
+ galcyurio 3: PR #22 다른 위치 URL 인용.
38
+
39
+ 학생 자가 답변: *"아 이 로직은 한장도 더 받지 않고 'n'을 응답하고 끝난 경우 현재 들고 있는 카드를 보여주기 위해 있는 로직이어서 삭제하지 않았습니다..! (한장이라도 더 받은 사람은 마지막에 'n'을 입력해도 가진 카드를 출력하지 않습니다...!)"*
40
+
41
+ → **3 가지 학습**:
42
+
43
+ #### 1.1. *`init { require }` Kotlin 어휘 = 객체 invariant*
44
+
45
+ - *생성 시점 검증* + *Cards size 보장*.
46
+ - PR #16·#9·#107 결.
47
+
48
+ #### 1.2. *`UI → Domain` 의존 vs `Domain → UI` 의존 양방향성 명시*
49
+
50
+ galcyurio: *"domain에서 ui를 의존하는 반대의 경우는 문제가 되더라도 ui layer에서 domain layer의 클래스를 사용하는 것은 문제 없습니다."* — **MCP 룰 후보 `dependency-direction-clarification`** = *UI → Domain 의존은 OK / Domain → UI 의존은 문제*. PR #145 (junseo511 *View 가 Domain 객체 생성*) 결.
51
+
52
+ #### 1.3. *학생 자가 *기능 의도* 명시 후 자가 결정*
53
+
54
+ *"한장도 더 받지 않고 'n'을 응답하고 끝난 경우 현재 들고 있는 카드를 보여주기 위해"* — **기능 의도 명시 후 자가 유지 결정**. PR #91·#11·#43 결.
55
+
56
+ ### 2. `enum 내 companion object` 불가 + 상수 공유
57
+
58
+ 학생: *"21을 상수처리하고 싶었는데, enum 클래스 내부에서는 companion object를 사용불가하다는 것을 알았습니다. 상수처리를 하지 않는 것이 맞을까요? 아니면 다른 클래스에서 이미 존재하는 상수값을 가져오는 것이 맞을까요?"*
59
+
60
+ galcyurio: *"다른 곳에서 해당 상수를 쓰지 않는다면 top-level에 private으로 선언해두면 됩니다. 하지만 Player를 보니 이미 선언된 곳이 있으니 해당 상수를 public으로 풀어주신 후 참조하는게 어떨까요?"*
61
+
62
+ 학생: *"조언해주신대로 Player의 상수를 참조하였습니다! 🤗"*
63
+
64
+ → **3 가지 학습**:
65
+
66
+ #### 2.1. *enum 내 companion object Kotlin 어휘 (실제로는 가능)*
67
+
68
+ 학생의 *"enum 내부에서는 companion object를 사용불가"* = *Kotlin 어휘 학생 자가 잘못된 가정* — *실제로는 가능* (Kotlin 1.x+).
69
+
70
+ #### 2.2. *상수 위치 = 사용처 응집*
71
+
72
+ - *한 곳만 사용* = *top-level private*.
73
+ - *여러 곳 사용* = *기존 상수 위치 public*.
74
+
75
+ **MCP 룰 후보 `constant-shared-vs-local`**. PR #11·#16 결.
76
+
77
+ #### 2.3. *Player 의 상수를 GameResultCondition enum 이 참조 = 의존 방향*
78
+
79
+ *도메인 객체 (Player) 의 상수* → *enum 이 참조* = *의존 OK*. 반대 (Player → enum 상수) 도 OK.
80
+
81
+ ### 3. `Card` View 로직 누수
82
+
83
+ galcyurio: *"UI 로직입니다. UI layer의 View에서 데이터를 받아서 UI를 그리도록 개선해보세요."*
84
+
85
+ 학생: *"UI 로직에서 이뤄져야 하는 일에 대해 모두 UI에서 행할 수 있도록 코드를 변경하였습니다."*
86
+
87
+ → **MCP 기존 룰 `enum-with-ui-value`**. PR #137·#77·#23·#26·#16·#9·#11·#13·#82 결.
88
+
89
+ ### 4. `ALL_CARDS` mutable static — CardPack 객체 분리 권유
90
+
91
+ galcyurio: *"변경 가능한 컬렉션을 static하게 선언해두는 것은 좋지 않습니다. `ALL_CARDS`가 모두 remove되는 경우에 이 프로그램은 더 이상 정상적으로 동작하지 않을거에요. 모든 카드를 불변으로 캐시해두는 것과 그 카드들을 하나씩 draw 하는 기능을 별도로 분리해보세요."*
92
+
93
+ 학생 자가 의문: *"제가 이해를 잘 못한 것 같아 추가적으로 질문을 드리자면.. > 모든 카드를 불변으로 캐시해두는 것과 그 카드들을 하나씩 draw 하는 기능을 별도로 분리해보세요. 이 말씀이 단순히 remove를 하지 말라는 뜻일까요? 아니면 캐싱을 따로 해두고 다른 카드 덱을 만들어서 그 안에서 draw 하라는 말씀이실까요? 😂"*
94
+
95
+ galcyurio: *"remove 뿐만 아니라 add 또한 되어선 안됩니다. 현재 구현은 계속해서 같은 종류의 카드가 나올 수도 있기 때문에 잘못된 구현입니다. > 캐싱을 따로 해두고 다른 카드 덱을 만들어서 그 안에서 draw 하라는 말씀이실까요? 😂 맞습니다. 변경 가능한 컬렉션을 가진 CardPack과 같은 구현체를 만들어보세요."*
96
+
97
+ → **3 가지 학습**:
98
+
99
+ #### 4.1. *Static mutable = 전역 상태 + 의도 변화 위험*
100
+
101
+ - *`val ALL_CARDS: MutableList`* = *프로그램 전역 + remove/add 가능*.
102
+ - *모두 remove = 동작 X / add = 중복 카드*.
103
+
104
+ **MCP 룰 후보 `static-mutable-collection-unsafe`**. PR #11·#46·#16 결.
105
+
106
+ #### 4.2. *불변 캐시 + 가변 Deck 분리*
107
+
108
+ - *`val ALL_CARDS: List<Card>`* (불변 + static) + *`class CardPack(remainingCards: MutableList<Card>)`* (가변 인스턴스) — *원본 보호 + draw 시 인스턴스 카드 소진*.
109
+
110
+ PR #74·#108·#133·#46·#77·#26 결.
111
+
112
+ #### 4.3. *학생 자가 의문 + reviewer 명확화*
113
+
114
+ *"이 말씀이 단순히 remove를 하지 말라는 뜻일까요?"* — **학생 자가 학습 갭 명시 모범**. PR #95·#107·#16·#76 결.
115
+
116
+ ### 5. `GameResult` 승/패/무 String = UI 로직
117
+
118
+ galcyurio: *"승, 패, 무 String은 UI 로직입니다. UI layer에서 GameResult에 따라 승, 패, 무를 출력하도록 만들어보세요."*
119
+
120
+ → **enum-with-ui-value 강화**. PR #137·#77·#23·#26·#16·#9·#11·#13·#82·#100·#82·#80 결.
121
+
122
+ ### 6. `when` 활용
123
+
124
+ galcyurio: *"when expression을 활용해보세요."*
125
+
126
+ 학생: *"when으로 분기처리를 하도록 코드를 변경하였습니다!"*
127
+
128
+ → **Kotlin when 어휘**. PR #91·#9·#26·#43·#16·#76 결.
129
+
130
+ ### 7. `Shape` UI 로직
131
+
132
+ galcyurio: *"UI 로직입니다. UI layer에서 데이터를 받아서 그리도록 만들어보세요."*
133
+
134
+ → **enum-with-ui-value 결**.
135
+
136
+ ### 8. `BlackJackRefereeTest` 함수명 = 룰 설명 가능?
137
+
138
+ galcyurio: *"테스트 케이스 이름에는 어떻게 동작하는지 또는 요구사항이 명시되어야 합니다. 누군가에게 블랙잭의 룰에 대해 설명할 때, `딜러를 상대로 링링은 패배하고 우기는 승리하고 써니는 무승부`하는 게임이라고 이야기할 수 있을까요? 링링은 왜 패배하는지, 우기는 왜 승리하는지, 써니는 왜 무승부하는지가 드러나야 합니다."*
139
+
140
+ 학생: *"카드합으로 승무패를 구별한다는 것을 반영하여 함수 이름을 변경하였습니다!"*
141
+
142
+ → **테스트명 = 룰 설명 가능 + 이유 명시**. PR #26·#46·#99·#107·#145·#9 의 *테스트 명세서* 결.
143
+
144
+ ### 9. `테스트 본문 = clarity + completeness + conciseness` Google Blog
145
+
146
+ galcyurio: *"테스트 본문에는 테스트하고자 하는 것을 이해할 수 있는 정보를 모두 가지고 있어야 하고, 반대로 불필요한 내용을 전부 감추어야 합니다."* + [Google Testing Blog 글](https://testing.googleblog.com/2014/03/testing-on-toilet-what-makes-good-test.html)
147
+
148
+ 학생 자가 인용 + 매우 긴 답변 (위 §잘한점) + 자가 정리:
149
+
150
+ > *"제가 생각했을때 이 테스트에서 불필요한 정보는 점수에 영향을 주지 않는 카드의 모양, 플레이어의 이름이고, 꼭 필요한 정보는 뽑은 카드 목록과 그 카드의 합이라고 생각했습니다."*
151
+
152
+ galcyurio 추가 권유 + 코드 예시:
153
+
154
+ ```kotlin
155
+ // given
156
+ val player1 = createPlayer(CardNumber.SEVEN, CardNumber.K) // 9
157
+ val player2 = createPlayer(CardNumber.EIGHT, CardNumber.ONE) // 17
158
+ ```
159
+
160
+ 학생: *"테스트 코드 밖에서 불필요한 요소들을 처리하여, 테스트 코드 안에서는 필요한 요소들만 입력 받아 객체를 반환하도록 하는 함수를 생성하였습니다."*
161
+
162
+ → **5 가지 학습**:
163
+
164
+ #### 9.1. *학생 자가 외부 자료 인용*
165
+
166
+ 학생이 *Google Blog 영어 원문 자가 발췌* + *3 properties (clarity/completeness/conciseness) 명시* — **학생측 외부 자료 인용 모범**. PR #91·#77 의 *외부 책 인용* 결.
167
+
168
+ #### 9.2. *불필요 정보 분리 = 테스트 픽스처 함수 추출*
169
+
170
+ - *`createPlayer(cardNumber, cardNumber)` 헬퍼* = *카드 모양/플레이어 이름 등 불필요 정보 함수 내부에 숨김*.
171
+
172
+ PR #99 (KwonDae *Test Fixture 품질*) / PR #91 (murjune *createBustPlayers vararg*) 결.
173
+
174
+ #### 9.3. *학생 자가 의문 + reviewer 코드 예시*
175
+
176
+ 학생 자가 *불필요 정보 식별 (모양/이름)* + reviewer 가 *코드 예시 (createPlayer)* 첨부.
177
+
178
+ #### 9.4. *side effect 없이 반환 = 유연한 구조*
179
+
180
+ galcyurio: *"side effect 없이 반환을 해주는 현재 구조가 더 유연한 구조입..."* — **함수형 + 결과 반환**.
181
+
182
+ #### 9.5. *불필요 정보 검토 vs 학생 인식 갭*
183
+
184
+ galcyurio 추가 권유 *"여전히 테스트 코드에 불필요한 정보가 남아있습니다"* — *학생이 첫 시도 후에도 추가 불필요 정보 존재* — **테스트 정제 = 반복 학습**.
185
+
186
+ ### 10. `BlackJackRefereeTest 구조` 자가 의문
187
+
188
+ 학생: *"BlackJackRefree는 딜러와 플레이어들을 넘겨 각각의 사람들이 가지는 카드를 비교하는 구조라, 무엇을 테스트하고 있는지 한눈에 깔끔하게 보일 수 없는 구조라 생각했습다. (물론 제가 놓치고 있는 것일 확률이 높지만요..) 그렇다면 이 구조가 잘못된 것일까요? 지금처럼 `BlackJackRefree` 를 통해 결과를 새로운 `List<PlayerGameResult>`로 만들어서 반환하는 것이 아니라, 결과를 바로바로 출력해주는 것이 더 나을까요?"*
189
+
190
+ galcyurio: *"side effect 없이 반환을 해주는 현재 구조가 더 유연한 구조입..."*
191
+
192
+ → **side effect X 결과 반환 = 함수형 정공**. PR #145·#46·#76 결.
193
+
194
+ ### 11. `DealerTest` 동일 불필요 정보
195
+
196
+ galcyurio: *"BlackJackRefereeTest와 마찬가지로 나머지 테스트 케이스도 불필요한 정보를 분리해보세요!"*
197
+
198
+ → **반복 적용**.
199
+
200
+ ### 12. `LinkedList pop` 활용
201
+
202
+ galcyurio: *"직접 0번째 카드를 가져오는 대신 `LinkedList`와 같이 이미 잘 만들어진 자료구조를 활용해보는건 어떨까요?"*
203
+
204
+ 학생: *"코틀린에는 왜 pop이 없지.? 라고 생성해서 자꾸 shuffle했던 것 같습니다. Linked List를 사용하면 해결 가능한 거였군요..! ㅎㅎ 수정하였습니다."*
205
+
206
+ → **Kotlin 자료구조 어휘 + Java LinkedList 활용**. **MCP 룰 후보 `data-structure-tool-knowledge`**. PR #46·#23 결.
207
+
208
+ ### 13. `CardPack` 최초 1회 셔플
209
+
210
+ galcyurio: *"현실처럼 CardPack을 최초에 한 번만 셔플해주셔도 충분합니다 :)"*
211
+
212
+ 학생: *"앗.. 그렇군요 ㅎㅎ.. 계속해서 랜덤해서 뽑는다고 생각해서 자꾸 shuffle했던 것 같습니다. 최초 한번만 shuffle 하도록 변경하겠습니다!"*
213
+
214
+ → **PR #77·#66 (Deck shuffle 위치) 결**.
215
+
216
+ ### 14. `테스트 함수` 위치 (테스트 함수 아래)
217
+
218
+ galcyurio: *"테스트 클래스에서는 테스트 함수가 더 중요하므로 테스트 함수 아래에 위치하도록 해주세요."*
219
+
220
+ → **테스트 파일 구조 컨벤션**. PR #145 (코드 포맷 가독성) 결.
221
+
222
+ ### 15. `BlackJackRefereeTest` 함수 외부 처리 자가 적용
223
+
224
+ 학생: *"불필요한 일을 테스트 함수 외부에서 처리하도록 코드를 수정하였습니다!"*
225
+
226
+ → **자가 적용 명시**.
227
+
228
+ ## 리뷰어 의견 요지 (galcyurio) — **신규 reviewer**
229
+
230
+ 16 코멘트 특징:
231
+
232
+ - **`:+1:` 칭찬 + `OOP/OCP 원칙` 명시** — *"개방 폐쇄 원칙을 잘 지켰다고 생각해요 :+1:"* — **객체지향 원칙 약어 명시**. PR #16·#137·#100 (조영호 어휘 + KwonDae) 결의 *galcyurio 합류*.
233
+ - **외부 자료 첨부** — *Google Testing Blog* — PR #91·#67·#23·#26·#16·#46·#77·#107·#82 결.
234
+ - **`UI → Domain 의존 OK / Domain → UI 의존 문제` 명시 어휘** — **MVC 의존 방향 메타**.
235
+ - **코드 예시 첨부** — `createPlayer(CardNumber, CardNumber)` 코드.
236
+ - **반복 권유 (지속적 정제)** — *"여전히 불필요한 정보가 남아있습니다"* — *학생이 첫 시도 후 추가 정제 필요*.
237
+
238
+ ## 대표 인용
239
+
240
+ > *"그래서 저는 OOP 관점에서 보았을 때, 개방 폐쇄 원칙을 잘 지켰다고 생각해요 :+1:"* — galcyurio (OCP 명시 칭찬)
241
+
242
+ > *"domain에서 ui를 의존하는 반대의 경우는 문제가 되더라도 ui layer에서 domain layer의 클래스를 사용하는 것은 문제 없습니다."* — galcyurio (MVC 의존 방향 메타)
243
+
244
+ > *"One property of a good test is `clarity`. Clarity means that a test should serve as readable documentation for humans, describing the code being tested in terms of its public APIs."* — RightHennessy (Google Testing Blog 자가 인용)
245
+
246
+ > *"코틀린에는 왜 pop이 없지.? 라고 생각했었는데 Linked List를 사용하면 해결 가능한 거였군요..!"* — RightHennessy (Kotlin 자료구조 어휘 자가 학습)
247
+
248
+ > *"이 말씀이 단순히 remove를 하지 말라는 뜻일까요? 아니면 캐싱을 따로 해두고 다른 카드 덱을 만들어서 그 안에서 draw 하라는 말씀이실까요? 😂"* — RightHennessy (학생 자가 학습 갭 명시)
249
+
250
+ ## 얻은 교훈
251
+
252
+ 1. **`MVC 의존 방향 메타`** — *UI → Domain OK / Domain → UI 문제*. **MCP 룰 후보 `dependency-direction-clarification`**.
253
+
254
+ 2. **`개방 폐쇄 원칙 (OCP)` 명시** — *enum 추가 = 기존 코드 변경 X = OCP 정공*. PR #16·#137·#100 결.
255
+
256
+ 3. **`Static mutable collection unsafe`** — *전역 + remove/add 가능 = 동작 X*. **MCP 룰 후보 `static-mutable-collection-unsafe`**.
257
+
258
+ 4. **`불변 캐시 + 가변 Deck 인스턴스 분리`** — PR #74·#108·#133·#46·#77·#26 결.
259
+
260
+ 5. **`테스트 본문 3 properties (clarity/completeness/conciseness)`** — *Google Testing Blog 외부 자료 + 학생 자가 인용*. **MCP 룰 후보 `test-3-properties-clarity-completeness-conciseness`**.
261
+
262
+ 6. **`LinkedList pop` 활용** — *Kotlin 자료구조 어휘 + Java 표준 라이브러리 활용*. **MCP 룰 후보 `data-structure-tool-knowledge`**.
263
+
264
+ 7. **`enum 내 companion object` 어휘 가능성** — *학생 자가 잘못된 가정 (불가) vs 실제 가능*. **MCP 룰 후보 `kotlin-vocabulary-misconception`**.
265
+
266
+ 8. **`상수 공유 vs local`** — *한 곳 = top-level private / 여러 곳 = public*. **MCP 룰 후보 `constant-shared-vs-local`**.
267
+
268
+ 9. **`테스트명 = 룰 설명 가능 + 이유 명시`** — *"왜 패배/승리/무승부?"* — PR #26·#46·#99·#107·#145·#9 결.
269
+
270
+ 10. **`테스트 정제 = 반복 학습`** — *첫 시도 후에도 추가 불필요 정보 검토*. PR #99 (Test Fixture 진화) 결.
271
+
272
+ 11. **`init { require }` Kotlin 어휘 = 객체 invariant** — PR #16·#9·#107 결.
273
+
274
+ 12. **`side effect X 결과 반환 = 함수형 정공`** — PR #145·#46·#76 결.
275
+
276
+ 13. **`외부 자료 학생측 인용` 모범** — PR #91·#77 결의 *학생측 강화*.
277
+
278
+ 14. **`galcyurio reviewer 패턴`** — *간결 + 원칙 명시 + 외부 자료 + 코드 예시 + 반복 권유* — **10번째 reviewer 합류**.
@@ -0,0 +1,188 @@
1
+ # PR #48 — [블랙잭 2단계] 링링 미션
2
+
3
+ - **Reviewee:** [@RightHennessy](https://github.com/RightHennessy)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/48
5
+ - **단계:** 2단계
6
+ - **리뷰어:** @galcyurio
7
+ - **라인 코멘트:** 13 스레드 — *Controller 책임 BlackJackGame 이전 자가 학습 + CardPack draw() 테스트 + UI 의존 분리 매우 긴 토론*
8
+ - **양 단계 분석 reviewee** (1단계 #22 별도). 학생 자가 PR 본문 *코드 더럽고 복잡* 인정.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **PR 본문 자가 *코드 복잡* 인정** — *"베팅 금액 기능을 추가하면서 코드가 굉장히.. 더럽고 복잡해져서 마음이 불편하네요.. 🙇‍♀️"* — **학생 자가 코드 부채 자가 인정**. PR #100·#145 결.
13
+ - **`CardPack` 1단계 권고 자가 반영** — 학생: *"저번에 리뷰해주신 대로, 처음에만 shuffle 한 후, linkedList를 이용하여 카드를 한장 뽑도록 코드를 변경했습니다."* — **PR #22 1단계 권고 자가 적용 + 보고**. PR #46·#107·#145·#76 결의 *1단계 권고 자가 반영 + 명시*.
14
+ - **재입력 받기 칭찬** — galcyurio: *"재입력 받기 👍"*. PR #11 (ki960213 *ReadValueSureModifier*) 결.
15
+ - **`BlackJackGame` 테스트 작성 칭찬** — galcyurio: *"BlackJackGame 테스트 작성 :+1: 가독성도 좋네요!"* — **1단계 권고 후속 테스트 가시화**. PR #99·#46·#91 결.
16
+ - **`GameResultCondition` 제거 + BlackJackReferee 응집 자가 반영** — 학생: *"GameResultCondition을 개선하지 못한 점이 가장.. 아쉬운데요, 상태 판단을 위해 너무 많은 일을 하고 있다는 생각이 들었습니다. 어떤 식으로 개선해야 좋을까요,,? 😥"* + galcyurio: *"GameResultCondition을 제거한 다음 이 로직들을 BlackJackReferee에서 burst인지 draw인지를 판단하고 GameResult를 반환하도록 만들어보면 어떨까요?"* + 학생 자가 적용. **학생 자가 의문 + reviewer 구체 권고 + 자가 적용 모범**.
17
+
18
+ ## 못한 점 (설계 관점)
19
+
20
+ ### 1. `Controller god-object → BlackJackGame` — 학생 자가 의문 + 매우 긴 토론
21
+
22
+ 학생 자가 의문: *"controller의 책임을 blackJackGame으로 넘겼는데, 코드의 개선은 전혀 없는 것 같아 생성 후 왜(?) 라는 질문을 가장 많이 남긴 부분 같습니다..."*
23
+
24
+ galcyurio: *"현재 Controller는 현재 테스트하기 힘든 상태입니다. 하지만 BlackJackGame으로 이동하게되면서 테스트하기 쉬운 코드가 되었습니다. BlackJackGame에 대한 테스트 코드를 작성해보세요."*
25
+
26
+ galcyurio 별도: *"Controller에서 UI에 의존하고 있으므로 Controller는 여전히 테스트하기 힘든 코드입니다. 이 피드백은 일단 기억만 해두고 이번 미션에서는 Controller 테스트보다 domain 객체인 BlackJackGame을 테스트하는 것에 집중해보세요."*
27
+
28
+ → **3 가지 학습**:
29
+
30
+ #### 1.1. *Controller god-object 이전 = 테스트 가능성 시그널*
31
+
32
+ - *Controller (UI 의존) = 테스트 불가능*.
33
+ - *BlackJackGame (도메인) = 테스트 가능*.
34
+ - *코드 이전 = *책임 위치 + 테스트 가능성* 양립*.
35
+
36
+ **MCP 룰 후보 `controller-to-domain-test-enablement`**. PR #99·#107·#145·#46·#72 결.
37
+
38
+ #### 1.2. *학생 자가 *왜?* 의문 = 학습 진행 시그널*
39
+
40
+ *"왜(?) 라는 질문을 가장 많이 남긴 부분"* — **학생 자가 *왜* 의문 = 학습 활성 시그널**.
41
+
42
+ #### 1.3. *PR #72 (ghojeong *Controller 판단 기준 2 가지*) 결*
43
+
44
+ PR #72 의 *view 의존 + 테스트 가능 = Controller* 판단 기준 강화.
45
+
46
+ ### 2. `BlackJackGameTest` UI 의존 분리 + 람다 vs Controller 매우 긴 토론
47
+
48
+ 학생 자가 의문: *"제가 결과물을 테스트하려고 하다보니.. 이미 출력된 것에 대해 어떻게 테스트를 해야할지 감이 오질 않습니다.. string으로 만들어서 반환하여 다른 곳에서 print를 해야할까요? 아니면 이미 출력된 구문에 대해 테스트할 수 있는 방법이 따로 있을까요?"*
49
+
50
+ galcyurio 3 단계 권유:
51
+
52
+ > *"BlackJackGame은 domain 객체입니다. 어떻게 출력되는지에 대해서는 알지 못하므로 당연히 UI에 관한 테스트도 할 수 없는게 정상입니다.*
53
+ >
54
+ > *아래와 같은 순서로 리팩터링해보세요.*
55
+ > *1. BlackJackGame에서 UI 관련 의존성을 분리한다.*
56
+ > *2. BlackJackGame에서 외부로 노출될 필요가 없는 함수들을 모두 private으로 선언한다.*
57
+ > *3. BlackJackGame의 public 함수에 대한 테스트 케이스를 작성한다."*
58
+
59
+ 학생 자가 적용: *"InputView는 game내로 전달하여 람다로 사용하고 있기 때문에 완벽한 분리가 되지 않았다고 생각합니다.. 그냥 controller 내에서 각 player에 대한 값을 받는 것이 완벽하게 분리하는 것일까요..?"*
60
+
61
+ galcyurio: *"View에 대한 직접적인 의존성은 사라졌기 때문에 테스트하기 쉬운 코드가 되었습니다. 지금 구조도 나쁘지 않아 보입니다."*
62
+
63
+ → **3 가지 학습**:
64
+
65
+ #### 2.1. *3 단계 도메인 분리 리팩토링 가이드*
66
+
67
+ 1. UI 의존 분리.
68
+ 2. private 노출 최소화.
69
+ 3. public 함수 테스트.
70
+
71
+ **MCP 룰 후보 `domain-isolation-refactoring-steps`**.
72
+
73
+ #### 2.2. *람다 전달 vs Controller 내 직접 처리 양가성*
74
+
75
+ - *람다 전달 (학생 코드)* = *완벽한 분리 X 자가 우려*.
76
+ - *Controller 내 직접* = *완벽한 분리 + 도메인 자유*.
77
+ - *reviewer*: *"View에 대한 직접적인 의존성은 사라졌기 때문에 테스트하기 쉬운 코드가 되었습니다"* — *람다 전달 = 의존성 끊김 인정*.
78
+
79
+ PR #145·#107·#82·#100·#80 의 *람다 콜백* 결.
80
+
81
+ ### 3. `CardPack` private + 카드 부족 시 외부 책임
82
+
83
+ galcyurio: *"변경 가능한 상태의 필드를 외부로 그대로 노출해서는 안됩니다. 쓰는 곳이 없다면 private으로 감추고 쓴다면 방어적 복사를 하고 노출해야 합니다."*
84
+
85
+ 학생 자가 의문 (테스트 위해 함수 vs 방어적 복사):
86
+
87
+ > *"현재 외부에서 사용하는 곳은 CardPackTest 하나임을 확인했습니다. 외부에서 사용하기 위해 방어적 복사를 쓰는 것이 나을까요? 아니면 `fun size(): Int = cards.size` 와 같이 그냥 size를 구하는 함수를 만들고 private로 감추는 것이 나을까요?*
88
+ >
89
+ > *테스트를 위해 함수를 만드는 것이 안좋다고 생각하여 일단은 방어적 복사를 하도록 했는데, get() 함수를 사용하는 것도 크게 다르지 않다는 생각이 들어서 고민이 됩니다..."*
90
+
91
+ galcyurio (메타 답변):
92
+
93
+ > *"테스트를 위해 함수를 추가하거나 public으로 노출해서는 안됩니다. 그러면 남는 건 draw() 함수이므로 이 함수를 통해 테스트해야 합니다.*
94
+ >
95
+ > *하지만 CardPack 자체에서 카드가 없으면 새롭게 리필이 되어버리고 있는데 이 동작을 외부에서 카드가 없는지 확인하고 없으면 카드를 채워주는 방식으로 변경해보세요. 그러면 draw() 함수를 56번과 57번 호출했을 때, 각각 카드와 null이 반환되는지를 체크할 수 있습니다."*
96
+
97
+ 학생: *"cards를 private으로 변경하고, 카드팩이 비었는지 확인하고 다시 채워주는 작업을 각각 dealer와 player의 draw에서 시행하도록 변경하였습니다."*
98
+
99
+ → **5 가지 학습**:
100
+
101
+ #### 3.1. *테스트 위해 함수 X / public 노출 X = 단단한 원칙*
102
+
103
+ - *public 노출 = 본 코드 책임 외 추가 책임*.
104
+ - *테스트는 *기존 public 함수만* 사용*.
105
+
106
+ **MCP 룰 후보 `test-only-public-exposure-anti-pattern`**. PR #145·#86·#99 결.
107
+
108
+ #### 3.2. *카드 리필 책임 = 외부 (Dealer/Player) 가 확인 + 외부 채움*
109
+
110
+ - *CardPack 내부 자동 리필* = *invariant 모호*.
111
+ - *외부 (Dealer/Player)* = *명시적 카드 부족 확인 + 채움 결정*.
112
+
113
+ #### 3.3. *56장 vs 57장 draw 테스트 시나리오*
114
+
115
+ - *56번 = 정상 카드*.
116
+ - *57번 = null 반환*.
117
+ - **결정적 테스트 = 카드 소진 시나리오**.
118
+
119
+ PR #46·#26·#23·#107·#22 의 *카드 부족 시* 결.
120
+
121
+ #### 3.4. *PR #22 1단계의 ALL_CARDS mutable static 권고* 자가 적용
122
+
123
+ PR #22 1단계의 *불변 캐시 + 가변 Deck 인스턴스 분리* 적용 자가 반영.
124
+
125
+ #### 3.5. *학생 자가 *방어적 복사 vs get 함수* 자가 양가성 의문*
126
+
127
+ 학생이 *두 안 모두 자가 검토* + reviewer 의 *제 3 안 (draw 함수만 사용)* 채택.
128
+
129
+ ### 4. `주석 = 왜 vs 무엇`
130
+
131
+ galcyurio: *"주석은 코드가 어떤 일을 하는지가 아니라 왜 존재하는지를 담고 있어야 합니다. 코드만 봐서는 어떤 일을 하는지 이해가 잘 안 된다면 코드를 더 간단하게 고쳐야합니다. 정규 표현식이나 복잡한 알고리즘에 대해서는 예외로 어떤 일을 하는지를 적어도 좋지만 일반적으로는 코드에 담을 수 없는 정보를 주석에 남기는 편이 좋습니다."*
132
+
133
+ → **주석 = WHY > WHAT 원칙**. PR #16 (BeokBeok *주석 → 함수명*) / PR #46 (말리빈 *라면 비유*) 결.
134
+
135
+ ### 5. `Controller InputView 직접 넘기기 vs 람다`
136
+
137
+ 학생: *"직접 inputView와 outputView를 넘겨서 테스트를 해보려는 생각중입니다!"*
138
+
139
+ → **InputView 직접 vs 람다 양가성**. 위 §2 의 *람다 전달 = 의존성 끊김* reviewer 인정.
140
+
141
+ ### 6. `BlackJackGame UI 의존 회피`
142
+
143
+ galcyurio: *"BlackJackGame은 domain 객체이므로 UI layer의 InputView, OutputView에는 의존해선 안됩니다. 지난 번 리뷰 때 봤어야했는데 놓쳤네요 🙏"*
144
+
145
+ → **reviewer 자가 *놓침* 사과**. PR #91·#77·#46·#16·#95·#137·#107·#145 결.
146
+
147
+ ### 7. `Pair → Participants` 별도 클래스 권유
148
+
149
+ galcyurio: *"다음부터는 Pair 대신에 Participants와 같은 별도의 클래스를 선언해보세요!"*
150
+
151
+ → **Pair 명명 모호 = 별도 클래스 정공**. PR #39 (rhthrhrl0 *NameAndBet*) 결.
152
+
153
+ ## 리뷰어 의견 요지 (galcyurio)
154
+
155
+ 13 코멘트 특징 (PR #22 와 동일 reviewer):
156
+
157
+ - **3 단계 리팩토링 가이드** — *UI 분리 + private 노출 최소화 + public 테스트* — **MCP 룰 후보 `domain-isolation-refactoring-steps`**.
158
+ - **메타 권고 어휘** — *"테스트를 위해 함수를 추가하거나 public으로 노출해서는 안됩니다"* — **단단한 원칙 명시**.
159
+ - **자가 *놓침* 사과** — *"지난 번 리뷰 때 봤어야했는데 놓쳤네요 🙏"*. PR #91·#77·#46·#16·#95·#137·#107·#145 결.
160
+ - **`:+1:` 칭찬** — *재입력 받기, BlackJackGame 테스트* 등.
161
+
162
+ ## 대표 인용
163
+
164
+ > *"controller의 책임을 blackJackGame으로 넘겼는데, 코드의 개선은 전혀 없는 것 같아 생성 후 왜(?) 라는 질문을 가장 많이 남긴 부분 같습니다."* — RightHennessy (학생 자가 *왜?* 의문 = 학습 시그널)
165
+
166
+ > *"BlackJackGame은 domain 객체입니다. 어떻게 출력되는지에 대해서는 알지 못하므로 당연히 UI에 관한 테스트도 할 수 없는게 정상입니다."* — galcyurio (도메인 vs UI 분리 명확화)
167
+
168
+ > *"테스트를 위해 함수를 추가하거나 public으로 노출해서는 안됩니다."* — galcyurio (테스트 위해 코드 변경 금지 원칙)
169
+
170
+ > *"베팅 금액 기능을 추가하면서 코드가 굉장히.. 더럽고 복잡해져서 마음이 불편하네요.. 🙇‍♀️"* — RightHennessy (학생 자가 코드 부채 자가 인정)
171
+
172
+ ## 얻은 교훈
173
+
174
+ 1. **`Controller god-object → BlackJackGame 이전 = 테스트 가능성 시그널`** — *책임 위치 + 테스트 가능성 양립*. **MCP 룰 후보 `controller-to-domain-test-enablement`**.
175
+
176
+ 2. **`3 단계 도메인 분리 리팩토링`** (UI 분리 → private 최소화 → public 테스트). **MCP 룰 후보 `domain-isolation-refactoring-steps`**.
177
+
178
+ 3. **`테스트 위해 함수 추가 / public 노출 = 안티패턴`** — *기존 public 함수만 테스트*. **MCP 룰 후보 `test-only-public-exposure-anti-pattern`**.
179
+
180
+ 4. **`카드 리필 책임 = 외부 + 명시적 확인`** — *내부 자동 리필 X / 외부 (Dealer/Player) 확인 + 채움*. PR #46·#107·#26·#23·#22 결.
181
+
182
+ 5. **`주석 = WHY > WHAT 원칙`** — PR #16 결.
183
+
184
+ 6. **`Pair → 별도 클래스`** = 명명 의도 명시. PR #39 결.
185
+
186
+ 7. **`학생 자가 *왜?* 의문 = 학습 시그널`** — *자가 의문 자체가 학습 활성*.
187
+
188
+ 8. **`1단계 권고 자가 반영 + 명시`** — *학생이 *저번에 리뷰해주신 대로* 명시*. PR #46·#107·#145·#76 결.