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,296 @@
1
+ # PR #107 — [블랙잭 1단계] 공백 미션
2
+
3
+ - **Reviewee:** [@junseo511](https://github.com/junseo511)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/107
5
+ - **단계:** 1단계
6
+ - **리뷰어:** @lee-ji-hoon (지훈/코니)
7
+ - **라인 코멘트:** 25 스레드 — *학생 자가 PR 본문 의문 2개 + 모든 thread 응답 + 양방향 매우 긴 핑퐁 토론 + 학생 자가 GameManager / UserCommand enum / 람다식 리팩토링 자가 도입*
8
+ - **신규 reviewee** (2024 코호트). PR #137 (HamBeomJoon) 와 동일 reviewer. 학습 가시화 최강 사례.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **PR 본문 자가 의문 2개 + 셀프 체크리스트 + 스크린샷** — *"Hand의 외부에서 카드에 접근하지 않고, Hand라는 플레이어가 가진 객체 내에서 본인이 가진 점수와 버스트 여부를 반환하고 있습니다. 저는 오히려 외부에서 의존을 다시 하는 것보다 카드를 받아 저장하고 이러한 상태를 계산하는 역할이 손의 역할이다 라는 생각으로 제작하였는데, 코니의 의견이 궁금합니다!"* + *"결과를 출력하는 함수를 재사용하기 위해서는 플레이어는 이름이 있고, 딜러는 이름이 없는데 컨트롤러나 모델에서 '딜러'라는 텍스트를 가지기 싫어서 View에서 이름이 비어 있으면 '딜러'라는 기본값을 두었습니다. 혹시 코니는 어떤 쪽이 취향이신지 궁금합니다."* + **PR 본문에 게임 진행 스크린샷 첨부**. **PR 본문 학습 가시화 모범**. PR #128·#135·#108·#136·#137·#148·#151·#98·#95·#99·#46·#77·#91 결.
13
+ - **모든 thread 에 학생 자가 답변** — 25 thread 중 22 thread 학생 응답. **학생 자가 학습 가시화 최강 사례**. PR #46 (krrong *반영커밋 URL 첨부*) / PR #43 (chws0508 *4 후보 명시*) / PR #91 (murjune *3 단계 자가 토론*) 결의 *모든 thread 응답 변형*.
14
+ - **양방향 매우 긴 핑퐁 토론 (Hand 책임 + 딜러 이름)** — 핵심 2 thread 각 3-5 회 핑퐁 + 학생 자가 결정 변경 + reviewer 사과 (이름 잘못 부름 *"동전"* 사과). **양방향 토론 모범**.
15
+ - **`UserCommand` enum 자가 도입** — 학생: *"사실 둘 중 하나로 구현해도 괜찮아서 그랬는데요, HIT이나 STAY라는 상태를 명시해주는게 코드를 읽는 입장에서 더 편할 것 같네요!! `enum class UserCommand` 로 반영하겠습니다 🫡"*. **도메인 어휘 (Hit/Stay) enum 도입**. PR #88·#90·#147·#31·#43 의 *Action enum* 결.
16
+ - **`GameManager` 자가 도입** — 학생: *"참가자가 `isDrawable` 하다면 계속해서 드로우 의사를 묻는 `GameManager` 를 두었구요 :)"*. **책임 분배 자가 학습 + 새 협력자 도입**.
17
+ - **`ResultManager` 자가 제안 + reviewer 인정** — 학생: *"딜러가 모든 것을 담당하게 되면 딜러의 역할이 늘어나고, 딜러가 무조건 모든 플레이어를 알아야 하지 않아도 된다는 생각이 들었습니다! ... ResultManager를 객체로 두고 결과를 반환하는 역할을 분리하는 것은 어떻게 생각하시나요?"* + reviewer: *"네 좋습니다. (...) 게임 총 매니저가 있는 것은 또 어떤 구조로 구현이 될까 궁금한데 공백이 한 번 보여주시겠어요 👀"*. **학생 자가 책임 분배 제안 + reviewer 인정** — PR #74 (송핑크 *Referee 자가 토론*) / PR #98 (chaehyuns *Judge 분리*) 결.
18
+ - **`Hit/Stay 능동 어휘` 자가 학습** — 지훈: *"꽤나 능동적으로 행동을 하는 부분인데 이 부분을 이번에 녹여낸다면 어떻게 녹여낼 수 있을까요?"* + 학생 자가 적용. **도메인 능동 어휘 인식**.
19
+ - **`apply` Kotlin scope function 자가 학습** — 학생: *"`수신 객체 람다 내부에서 수신 객체의 함수를 사용하지 않고 수신 객체 자신을 다시 반환 하려는 경우` 에 주로 apply 를 사용한다고 하네요! 평소에 apply랑 also에 크게 신경을 쓰지 않고 사용을 했던 것 같은데 다시 생각해보게 되네요 👍"*. **Kotlin scope function 자가 정의 학습**. PR #93 (junjange *let-run-elvis-pitfall*) / PR #137·#148·#90·#146·#91 의 *Kotlin 어휘 학습* 결.
20
+ - **카지노 4-8 덱 도메인 학생 자가 인용** — 학생: *"단, 블랙잭이라는 도메인에서 이러한 상황을 방지하기 위해 4-8개의 덱을 사용한다고 해요 🤔 따라서 8개의 덱을 캐싱해서 우선 사용하고, 만약 해당 에러가 발생했을 때 던지는 방식이 도메인 측면에서 바라봤을 때 더 좋은 것 같습니다"*. **도메인 학습 + 자가 룰 인용**. PR #58 (otter66 *카지노 6덱*) / PR #26 (chws0508 *여러 덱*) 결.
21
+ - **`확장 함수 `.toText()` 자가 정당화`** — 학생: *"제가 원하는 동작은 날아온 클래스의 정보를 출력해주는 것입니다. `그 클래스가 어떤 것인지 꼭 알아야 하는가?` 보다 `클래스를 출력할 텍스트로 변환한다` 가 더 중요한 부분이라고 생각해서 `.toText()` 만 붙여도 직관적으로 사용할 수 있다고 생각했습니다 👍"*. **확장 함수 의도 자가 명시**. PR #9 (Choisehyeon *확장 함수 4 분면*) 결.
22
+
23
+ ## 못한 점 (설계 관점)
24
+
25
+ ### 1. PR 본문 자가 의문 1: `Hand 책임 = score 계산 + bust 판단` 과한가?
26
+
27
+ PR 본문 학생 자가 의문 + 본인 자가 결정 + reviewer 양방향 토론:
28
+
29
+ 지훈 1차: *"`assertThat(hand.isBust()).isTrue()` 이 지금 Bust를 반환하고 있을까요? 21점이 넘었을 때를 기준으로 생각을 해봤을 때 `isBust` 자체가 `Hand` 의 역할일까요?"*
30
+
31
+ 학생: *"현재 이 로직을 계산기로 옮겨보았습니다!"*
32
+
33
+ 지훈 2차: *"`손`이라는 역할을 생각했을 때 해당 객체가 직접 score를 계산하고 bust인지 까지 판단하는 것은 너무 과하지 않을까요? 지금 Player라는 객체가 하는 일이 아예 없는데 왜 그렇게 됐는지도 고민해 보면 좋을 것 같네요."*
34
+
35
+ 학생 자가 후회: *"저도 작업하면서 조금 과해보여서 이와 같은 질문을 남겼는데, Participant 자체에서 카드 모음을 가지고 있고 Participant가 생성될 때 미리 점수를 계산할 수 있는 계산기를 쥐어줘도 괜찮다는 생각이 들어요"*
36
+
37
+ → **3 가지 학습**:
38
+
39
+ #### 1.1. *Hand vs Participant + Calculator 책임 위치*
40
+
41
+ - *Hand* = *카드 모음 + 점수 + Bust 판단* (학생 1차 코드) = *과한 책임*.
42
+ - *Participant + Hand + Calculator* (학생 자가 최종 도달) = *카드 모음은 Participant, Hand 제거, 점수 계산은 Calculator*.
43
+
44
+ PR #77 (murjune *Hand vs Participant 양방향 토론 — 학생 주장 유지*) 와 *반대 결* — *junseo511 학생은 *권고 후 자가 후회 + 책임 재분배***.
45
+
46
+ #### 1.2. *Player 빈약 = 책임 누수 시그널*
47
+
48
+ 지훈: *"Player 클래스 자체가 너무 빈약해진 느낌이 안 드실까요?"* — *Player 가 *이름만 있는 빈 껍데기* = Hand 가 책임 다 가져감*.
49
+
50
+ #### 1.3. *책임 재분배 = Participant 가 *카드 모음 + Calculator 협력**
51
+
52
+ 학생 자가 최종 = *Participant 가 카드 + Calculator 협력 / Hand 제거 / Player 가 Participant 상속 + 이름 추가*.
53
+
54
+ PR #43·#74·#98·#46·#77 의 *Hand vs Participant 책임 토론* 결.
55
+
56
+ ### 2. PR 본문 자가 의문 2: `딜러 이름 = 컨트롤러 vs View 기본값` — 매우 긴 양방향 토론
57
+
58
+ PR 본문 학생 자가 의문 + 4 단계 핑퐁:
59
+
60
+ #### 2.1. 학생 의도: *컨트롤러/모델에서 "딜러" 텍스트 가지기 싫어서 View 기본값*
61
+
62
+ #### 2.2. 지훈 1차: *함수 다중 책임 + 딜러 이름 가능성 + View 수동성 의문*
63
+
64
+ > *"지금 이 하나의 함수가 여러 가지 일을 하고 있기 때문이 아닐까? 고민을 해보시면 좋습니다. 혹은 딜러는 꼭 이름이 없어야 할까요? 딜러만의 이름이 있을 수도 있고, 아니면 밖에서 현재 상태에 따른 name을 정해줄 수도 있을 것 같네요."*
65
+
66
+ > *"그런데 이렇게 생각이 흐르게 된 이유는 View가 너무 수동적이라서 그렇게 된 것 같은데요. 아마 Domain Model의 의존을 아예 끊고 싶어서? 아니면 View는 멍청해야 해서? 일 것 같은데요. 근데 이미 `blackjack.model.CardRank` 등 많이 의존을 하고 있는 상태인데, 'View에게 어떠한 상태를 던져주고 그 상태에 따라 UI를 표시해!' 라고 해보는 것도 방법일 것 같은데 시간이 좀 있으니 고민해봅시다"*
67
+
68
+ #### 2.3. 학생 자가 정당화 (몇 가지 경우의 수 검토 후 자가 결정)
69
+
70
+ > *"그래서 돌고 돌아 현재는 기본값으로 '딜러'를 가지고 있어도 괜찮지 않을까...!?라는 생각을 했습니다. 플레이어는 기본 생성자로 이름을 가지고 있고, 플레이어와 딜러밖에 없는 상황이라 이름이 없다면 무조건 딜러라는 생각으로 돌아왔어요...! 🤔"*
71
+
72
+ #### 2.4. 지훈 2차 (유지보수 관점 권유):
73
+
74
+ > *"현실 세계에서는 딜러도 명찰표로 이름이 존재하는 경우가 충분히 있을 것 같아요. 동전의 의견도 틀린 부분은 없다고는 생각을 하는데 `기본값이 딜러`라는 부분이 살짝 어색하네요.*
75
+ >
76
+ > *동전이 사용할 때는 크게 상관이 없지만 이 프로젝트를 누군가 유지보수 한다고 생각을 해볼까요? '플레이어는 기본 생성자로 이름을 가지고 있고, 플레이어와 딜러밖에 없는 상황이라 이름이 없다면 무조건 딜러라는 생각' 을 자연스럽게 나올까 고민을 해보면 전 아닐 것 같아요. 위 로직을 알기 위해서는 UI Model을 처음부터 뜯어봐야 할 거예요"*
77
+
78
+ #### 2.5. 학생 자가 결정 변경:
79
+
80
+ > *"이런 관점에서 바라보면 유지보수를 위해 참가자는 일단 이름을 갖게 하는게 괜찮을 수도 있겠어요!! 일단 컨트롤러에서 딜러를 생성할 때 '딜러'를 명시해주고 추후에 딜러 이름을 별도로 구현하거나 다국어를 지원하는 방향도 괜찮아 보이네요"*
81
+
82
+ #### 2.6. 지훈 마무리 + 학생 이름 실수 사과:
83
+
84
+ > *"네 딜러의 이름을 어떻게 보면 UI에 표시하기 위해서 추가를 하는 것인가?라고 생각을 할 수가 있는데요! `참가자`라는 관점에서 봤을 때 각자 이름을 갖고 있는 것은 그리 어색하지는 않은 상황이라서 계속 핑퐁으로 리뷰를 해보았는데요! 잘 판단하신 것 같습니다."*
85
+ >
86
+ > *"죄송합니다,,, 다음 리뷰어 재밌는 리뷰 있길래 구경하다가 제가 정신이 나갔었나 보네요. 다음번에 제가 테크살롱 가게 되면 밥이나 커피라도 사드릴게요!"* (학생 이름 *"동전"* 으로 잘못 부른 것 사과)
87
+
88
+ → **6 가지 메타 학습**:
89
+
90
+ #### 2.1. *유지보수 관점 메타 어휘 (지훈)*
91
+
92
+ *"누군가 유지보수 한다고 생각을 해볼까요?"* — **MCP 룰 후보 `maintenance-perspective-evaluation`** = *현재 코드 가독성 + 미래 유지보수자 시점*.
93
+
94
+ #### 2.2. *학생 자가 정당화 → 자가 결정 변경 (5 단계 진화)*
95
+
96
+ *View 기본값 (1차) → 자가 정당화 (2차) → reviewer 유지보수 관점 (3차) → 자가 후퇴 + Controller 명시 (4차)*. **양방향 토론 모범 + 학생 자가 결정 변경**. PR #46·#43·#91·#77 결.
97
+
98
+ #### 2.3. *기본값 = 매직 동작 안티패턴*
99
+
100
+ - *View 가 *"이름 비어있으면 '딜러'"* 매직 변환* = *유지보수자 모르는 동작*.
101
+ - *Controller 가 명시* = *코드 가독성 + 의도 명시*.
102
+
103
+ **MCP 룰 후보 `magic-default-conversion`** = *기본값으로 도메인 어휘 주입 = 매직 동작*.
104
+
105
+ #### 2.4. *함수 다중 책임 시그널*
106
+
107
+ 지훈: *"지금 이 하나의 함수가 여러 가지 일을 하고 있기 때문이 아닐까?"* — *과한 책임 → 분리 신호*.
108
+
109
+ #### 2.5. *View 수동 vs 능동 메타 어휘*
110
+
111
+ 지훈: *"View가 너무 수동적이라서 그렇게 된 것 같은데요. (...) 'View에게 어떠한 상태를 던져주고 그 상태에 따라 UI를 표시해!'"* — **MVP/MVVM 어휘** = *View 가 상태 받고 표시 결정 능동*.
112
+
113
+ #### 2.6. *reviewer 가 학생 이름 잘못 부름 + 자가 사과*
114
+
115
+ *"동전"* 으로 잘못 부른 후 자가 사과. **reviewer 자가 사과 + 친밀한 어조**. PR #91·#77·#46·#16·#95·#137 의 *reviewer 자가 사과* 결.
116
+
117
+ ### 3. `abstract class + 기본 구현` = override 불가 학생 자가 정당화
118
+
119
+ 지훈: *"오늘 강의 시간 때 이야기 했던 내용이 기억이 나실까요? `abstract class에 구현을 하면 해당 함수 혹은 변수를 override 할 수 없다.`라는 것을 들으셨을 텐데요. 지금 구현 상태에서 만약 딜러는 `카드를 3장 받고 시작한다.` 라는 룰이 생기게 된다면 어떻게 될 것 같으신가요?"*
120
+
121
+ 학생 자가 정당화: *"카드의 장 수를 선택할 수 있는게 오히려 불필요한 구현이라고 생각했습니다! 블랙잭이라는 도메인에서는 2장을 기본값으로 계산하니까요 :) 추후 바뀌게 된다면 abstract fun으로 두고 draw를 사용할 것 같네요!! 하지만 잘 생기지 않을 것 같은 희박한 상황이라고 생각해서 유지해도 괜찮다고 생각합니다 🧐"*
122
+
123
+ → **YAGNI + 도메인 룰 자가 인용**:
124
+ - *학생*: *"잘 생기지 않을 것 같은 희박한 상황"* = **YAGNI** 자가 적용. PR #146 (yrsel YAGNI 자가 인정) / PR #77 (murjune *PointCalculator 분리*) / PR #31 (no1msh *Builder 패턴*) 결.
125
+ - *지훈 권유는 *확장 가능성** — 학생은 *현재 도메인 단순성 우선*.
126
+
127
+ **`abstract class + 기본 구현 + override 불가`** — **MCP 룰 후보 `concrete-abstract-method-override-impossible`**.
128
+
129
+ ### 4. `private constructor` 망각 + 학생 자가 인정
130
+
131
+ 지훈: *"지금은 아래처럼 호출이 가능할 텐데요. `from`이라는 함수로 `Players` 가 만들어지길 원한 것 같은데요 지금은 아래처럼도 만들 수 있는 상황 같네요🤔"*
132
+
133
+ ```kotlin
134
+ val players1 = Players(listOf(Player("tester"))) // private 우회
135
+ val players2 = Players.from(listOf("tester"))
136
+ ```
137
+
138
+ 학생: *"앗 이런! `private constructor` 가 중간에 컴파일 에러를 내버려서 from을 만든건데, 다시 private으로 두는 것을 까먹었네요 😅"*
139
+
140
+ → **Factory 패턴 + private constructor + Kotlin 어휘**. PR #46 (krrong *data class private constructor copy 우회*) / PR #58 (otter66) 결.
141
+
142
+ ### 5. `WinningResult` 블랙잭 도메인 룰 미반영
143
+
144
+ 지훈: *"이번엔 블랙잭이라는 도메인을 생각했을 때 이 결과 Class가 가장 의문을 가질 것 같은데요. 블랙잭이라는 도메인이 단순히 `점수의 높고 낮음` 으로 승패가 결정이 되는 게임이 아니라는 것은 이미 아실텐데요! 해당 클래스만 봤을 때 '플레이어1 : 23점 / 딜러 : 19점' 이 상태일때 플레이어1이 승리자인가? 라는 의문이 들 것 같아요."*
145
+
146
+ → **블랙잭 룰 = Bust 양측 + BlackJack 2장 1.5배**. PR #26·#46·#16·#23·#66 결. **MCP 룰 후보 `blackjack-rule-fidelity` 강화**.
147
+
148
+ ### 6. `Bust 양측 테스트 위치`
149
+
150
+ 지훈: *"1. 유저1이 버스트가 됐다. 2. 딜러도 버스타가 됐다. 이 상황의 테스트는 어디에 있어야 하고 테스트가 필요하지 않을까요?"*
151
+
152
+ → **블랙잭 룰 정확성 테스트 = 도메인 객체 (Player) 책임**. PR #26·#66·#23 결.
153
+
154
+ ### 7. `Controller 메시지 vs 직접 행동`
155
+
156
+ 지훈: *"전반적으로 Controller가 객체에게 메세지를 던지는지 본인이 직접 행동하고 있는지 생각해봅시다."*
157
+
158
+ 학생: *"확실히 지금 controller를 보았을 때 너무 많은 일을 하고 있는 것 같아요! 단순히 딜러에게 첫번째 카드를 내놔! 정도는 도메인에서 필요한 내용이므로 모델 안에 있어도 괜찮을 것 같네요 :) 반영하겠습니다 👍"*
159
+
160
+ 지훈 후속: *"네 좋습니다. `delear는 처음에 2장 중 첫 번째 카드만 보여준다.` 이것은 명백한 비즈니스 로직이고, 그렇다는 것은 테스트에도 유의미한 로직이라는 것을 의미하기도 하겠죠 😀"*
161
+
162
+ → **비즈니스 로직 = 테스트 필요 + 도메인 위치**. PR #99·#95·#46·#43·#77·#66 의 *Controller god-object* 결.
163
+
164
+ ### 8. `CardDeck 전체 vs 한 장 받기` 람다식 자가 리팩토링
165
+
166
+ 지훈: *"아마 현실의 블랙잭을 생각하면 1번이 더 자연스러울 거예요 그런데 지금은 CardDeck을 전부 넘겨주고 있는데요. 공백이 생각했을 때 이 부분은 객체지향 관점에서 충분히 넘어갈 수 있는 부분이라고 생각하시나요? 아니면 부자연스럽다고 생각할까요?"*
167
+
168
+ 학생: *"저는 살짝 부자연스럽다고 생각해서 리팩토링 계획에 포함되어 있었는데, 이번에 람다식으로 리팩토링을 진행해서 반영하고자 합니다!! 모든 카드 덱을 플레이어 마음대로 주무를 수 있다? 가 조금 어색하게 느껴져서요!"*
169
+
170
+ → **`(Int) -> List<Card>` 람다 의존 vs `CardDeck` 객체 의존** — *Dependency Inversion*. PR #77 (KwonDae *`() -> Card` 람다*) / PR #137·#132·#99·#23 의 *onXX 콜백* 결.
171
+
172
+ ### 9. `isBust` vs `isDrawable` (현실 메타포)
173
+
174
+ 지훈: *"`isBust` 는 너 Bust야? 라고 질문을 하는 것 같은데요. 현실 세계를 기준으로 보면 `'나 더 뽑을 수 있는 상태야'`라고 표현이 되게끔 아직 더 뽑을 수 있다는 것을 표현하는 함수명도 좋아 보이네요!"*
175
+
176
+ 학생: *"hand를 제거하고 계산기를 주입하면서 해당 로직이 조금 바뀌었네요! 현재는 isBust()를 참가자가 직접 반환하고 있습니다! (...) 대신에 드로우를 지속할 수 있는지 확인하는 함수로 `isDrawable` 를 abstract로 두어서 다르게 구현했습니다 ‼️"*
177
+
178
+ → **부울 명명 = 긍정 방향 vs 부정 방향**:
179
+ - *`isBust()`* = 부정 (실패 상태).
180
+ - *`isDrawable()`* = 긍정 (가능 상태).
181
+ - *PR #151 (jerry8282 *canHit/isBust 의미 통일 — True 방향*) 결*.
182
+
183
+ ### 10. `firstVisibleCard` List<Card> 유지 vs Card
184
+
185
+ 지훈 suggestion:
186
+
187
+ ```kotlin
188
+ fun firstVisibleCard(): Card = cards.first()
189
+ ```
190
+
191
+ 지훈: *"이렇게 하는 게 조금 더 가독성에 좋지 않을까 하고 보니까 `List<Card>` 로 한 이유가 `View에서 표시하기 좋게 하기 위함` 으로 보이는데요 Model 관점에서 봤을 때 View에서 어떻게 표시가 되기 편한지를 고려를 해야 할지 아니면 현재 함수에 맞게끔 하는 게 좋을까요?"*
192
+
193
+ 학생: *"showInitialCards를 abstract로 두면서 List<Card>는 유지되어야 할 것 같아요! 이를 위해 플레이어와 딜러 모두 다른 함수를 가지는 것이 더 부자연스럽다고 생각되어서요. ... 처음 카드를 받고 딜러는 1장을 공개하고 플레이어는 2장을 공개한다."*
194
+
195
+ → **Model 의 View 형식 의존 vs 자기 형식**:
196
+ - 학생: *공통 시그니처 = `List<Card>` 유지 (딜러 1장, 플레이어 2장 모두 List)*.
197
+ - 지훈: *Model 이 View 형식 인식 = 결합도*.
198
+
199
+ **양가성 + 학생 자가 결정**.
200
+
201
+ ### 11. `TEMP` → `DEFAULT_DEALER_NAME` 자가 제안
202
+
203
+ 지훈: *"`TEMP` 보다는 유의미한 의미를 주면 좋을 것 같네요"*
204
+
205
+ 학생: *"가볍게 `DEFAULT_DEALER_NAME` 는 어떠신가요?!"*
206
+
207
+ → **상수 명명 의미 명시**. PR #99·#26·#39·#46 vagueName 결.
208
+
209
+ ### 12. `Int / String 원시값 포장`
210
+
211
+ 지훈: *"여기서 Int / String 둘 다 어떠한 값인지 바로 알 수 있을까요? 저희는 원시값을 어떻게 하기로 했었을까요 🤔"*
212
+
213
+ 학생: *"불필요하다고 생각했는데 이렇게 몇줄만 덩그러니 보니까 눈에 안띄네요 🤣 포장해서 반영하겠습니다 👍"*
214
+
215
+ → **원시값 포장 요구사항**. PR #16 (SeongHoonC *원시값 포장 자가 의문*) / PR #74·#137·#148·#131·#46 결.
216
+
217
+ ### 13. `테스트 비즈니스 관점 (오류 반환 vs 중복 불가)`
218
+
219
+ 지훈: *"테스트를 하고자 했던 비즈니스적인 관점은 `플레이어 이름은 중복이 될 수 없다.` 였을 것 같은데요. 그런 관점에서 봤을 때 오류를 반환하는 게 주 관심사일까요?"*
220
+
221
+ 학생: *"보다 비즈니스 로직을 명시하는 네이밍이 좋을까요? TDD의 배경이 개발의 문서화인 점을 생각하면 그러한 방향성이 옳을 수 있겠어요 👏"*
222
+
223
+ → **테스트 = 명세서 어휘**. PR #26·#46·#99 결.
224
+
225
+ ### 14. `Builder name 필수` 처리
226
+
227
+ 지훈: *"name은 지금 Builder에서 필수로 받아야 하는 값인데요! 만약 이 값이 안 들어온 상태로 build가 행해지면 어떻게 될까요? 이 부분에 대해서 고민해 보면 좋을 것 같네요!"*
228
+
229
+ → **Builder 패턴 invariant**. PR #9·#31 결.
230
+
231
+ ### 15. `recieve` 명명 오타
232
+
233
+ 지훈: *"별거 아니지만 `receive` 으로 수정이 되어야 할 것 같네요 😀"*
234
+
235
+ 학생: *"함수명을 고민하다가 통일이 안되었나보네요 😅 반영하겠습니다 ‼️"*
236
+
237
+ → **명명 일관성**.
238
+
239
+ ## 리뷰어 의견 요지 (지훈/코니 / lee-ji-hoon)
240
+
241
+ 25 코멘트 특징 (PR #137 와 동일 reviewer):
242
+
243
+ - **메타 질문 어휘** — *"Hand 의 역할일까요?"*, *"abstract class에 구현을 하면 override 할 수 없다는 것 기억나실까요?"*, *"누가 하고 결과는 어떻게 관리될까요?"* — 학생 자가 답변 유도.
244
+ - **강의 인용** — *"오늘 강의 시간 때 이야기 했던 내용이 기억이 나실까요?"* — **실시간 학습 + 코드 연결**.
245
+ - **현실 메타포 + 객체지향 대비** — *"현실에서는 다 알아야겠지만요 :) 프로그래밍의 세계는 조금 다를 수 있지 않을까요?!"* — *현실 vs 코드 트레이드오프*.
246
+ - **유지보수 관점** — *"누군가 유지보수 한다고 생각을 해볼까요?"* — *시간 두고 관점*. **MCP 룰 후보 `maintenance-perspective-evaluation`**.
247
+ - **장단점 토론** — *"각자 다른 비즈니스 로직을 draw에 묻혀도 되지 않을까?"* — *N 안 + 검토 권유*.
248
+ - **칭찬 분포 균형** — *abstract fun, deck 재사용, 잘 반영* 등 칭찬 5회 + 권고 20회.
249
+ - **reviewer 자가 사과 + 친밀한 어조** — *"동전"* 이름 실수 사과 + 밥 약속.
250
+ - **suggestion 블록 활용** — `firstVisibleCard` 코드 + 명명 제안.
251
+
252
+ ## 대표 인용
253
+
254
+ > *"`현재 카드를 더 받을지 말지 판단` 하는 것은 `참가자` 가 직접 스스로 판단할 수도 있을 것 같은데요. (...) `isBust` 는 너 Bust야? 라고 질문을 하는 것 같은데요. 현실 세계를 기준으로 보면 `'나 더 뽑을 수 있는 상태야'`라고 표현이 되게끔 아직 더 뽑을 수 있다는 것을 표현하는 함수명도 좋아 보이네요!"* — lee-ji-hoon (Tell-Don't-Ask + 부울 명명 긍정 방향)
255
+
256
+ > *"동전이 사용할 때는 크게 상관이 없지만 이 프로젝트를 누군가 유지보수 한다고 생각을 해볼까요?"* — lee-ji-hoon (유지보수 관점 메타 어휘)
257
+
258
+ > *"단순히 딜러에게 첫번째 카드를 내놔! 정도는 도메인에서 필요한 내용이므로 모델 안에 있어도 괜찮을 것 같네요 :) 반영하겠습니다 👍"* — junseo511 (Controller god-object 자가 인정 + 자가 결정)
259
+
260
+ > *"카드의 장 수를 선택할 수 있는게 오히려 불필요한 구현이라고 생각했습니다! ... 잘 생기지 않을 것 같은 희박한 상황이라고 생각해서 유지해도 괜찮다고 생각합니다 🧐"* — junseo511 (YAGNI 자가 적용 + 자가 결정)
261
+
262
+ > *"단, 블랙잭이라는 도메인에서 이러한 상황을 방지하기 위해 4-8개의 덱을 사용한다고 해요 🤔 따라서 8개의 덱을 캐싱해서 우선 사용하고, 만약 해당 에러가 발생했을 때 던지는 방식이 도메인 측면에서 바라봤을 때 더 좋은 것 같습니다"* — junseo511 (카지노 도메인 자가 인용 + 자가 결정)
263
+
264
+ > *"죄송합니다,,, 다음 리뷰어 재밌는 리뷰 있길래 구경하다가 제가 정신이 나갔었나 보네요. 다음번에 제가 테크살롱 가게 되면 밥이나 커피라도 사드릴게요!"* — lee-ji-hoon (학생 이름 실수 사과 + 친밀한 어조)
265
+
266
+ ## 얻은 교훈
267
+
268
+ 1. **`PR 본문 자가 의문 2개 + 셀프 체크리스트 + 스크린샷` = 학습 가시화 최강 사례** — *학생이 *PR 본문에서 모든 학습 의도 + 자가 의문 + 검증 결과* 명시*. PR #128·#135·#108·#136·#137·#148·#151·#98·#95·#99·#46·#77·#91 결의 *PR 본문 자가 의문 풍부 시리즈*.
269
+
270
+ 2. **`모든 thread 응답 패턴`** — 25 thread 중 22 thread 학생 응답 = *학생 자가 학습 가시화 최강 사례*. PR #46 (krrong *반영커밋 URL*) 결의 *thread 단위 응답 변형*.
271
+
272
+ 3. **`5 단계 양방향 핑퐁 토론 + 학생 자가 결정 변경`** — *학생 의도 (1차) → reviewer 질문 → 학생 정당화 → reviewer 유지보수 관점 → 학생 자가 후퇴 + 결정 변경*. PR #46·#43·#91·#77 결의 *양방향 토론 진화*.
273
+
274
+ 4. **`유지보수 관점 메타 어휘 (lee-ji-hoon)`** — *"누군가 유지보수 한다고 생각을 해볼까요?"* — *시간 두고 관점 + 미래 유지보수자*. **MCP 룰 후보 `maintenance-perspective-evaluation`**. PR #95·#98 의 *재구현 권유* 결의 *유지보수 시점*.
275
+
276
+ 5. **`기본값 = 매직 동작 안티패턴`** — *View 가 *"이름 비어있으면 '딜러'"* 매직 변환 = 유지보수자 모르는 동작*. **MCP 룰 후보 `magic-default-conversion`**.
277
+
278
+ 6. **`abstract class + 기본 구현 + override 불가`** — *YAGNI vs 확장 가능성 트레이드오프*. **MCP 룰 후보 `concrete-abstract-method-override-impossible`**. PR #146·#77·#31 의 *YAGNI 자가 인정* 결.
279
+
280
+ 7. **`UserCommand enum + GameManager + ResultManager` 자가 도입 3종 세트** — *Hit/Stay 능동 어휘 enum + 게임 진행 매니저 + 결과 관리 매니저*. **책임 분배 자가 학습 + 새 협력자 도입**. PR #88·#90·#147·#43 의 *Action enum* + PR #74·#98 의 *Judge/Referee 분리* 결.
281
+
282
+ 8. **`apply / also / let / run Kotlin scope function` 자가 정의 학습** — *수신 객체 람다 + 반환값 + 차이*. PR #93·#137·#148·#90·#146·#91 의 *Kotlin 어휘* 결.
283
+
284
+ 9. **`카지노 4-8 덱 도메인 자가 인용 + throw 정당화`** — *학생이 *현실 카지노 룰* 인용 + *자가 throw 정당화*. PR #58·#26·#46 의 *카지노 6덱 메타포* 결의 *학생측 인용*.
285
+
286
+ 10. **`reviewer 자가 사과 + 친밀한 어조`** — *학생 이름 실수 → 사과 + 밥 약속*. PR #91·#77·#46·#16·#95·#137 결의 *친밀한 양방향 어조*.
287
+
288
+ 11. **`함수 다중 책임 시그널 (reviewer 진단 어휘)`** — *"하나의 함수가 여러 가지 일을 하고 있기 때문이 아닐까?"* — *함수 분리 시그널 메타 어휘*.
289
+
290
+ 12. **`View 수동 vs 능동` MVP/MVVM 어휘** — *View 가 상태 받고 표시 결정 능동 = 'View에게 상태 던져주고 UI 표시해!'*. **MCP 룰 후보 `view-passive-vs-active`**.
291
+
292
+ 13. **`isBust vs isDrawable 부울 긍정/부정 방향`** — *PR #151 (jerry8282 *canHit/isBust True 방향 통일*) 결*. *현실 메타포 = `더 뽑을 수 있는 상태`*.
293
+
294
+ 14. **`테스트 = 비즈니스 관점 명세서`** — *"오류 반환이 주 관심사일까요?"* — *테스트 명 = 비즈니스 의도*. **MCP 룰 후보 `test-name-business-perspective`**. PR #26·#46·#99 결.
295
+
296
+ 15. **`강의 인용 reviewer 패턴`** — *"오늘 강의 시간 때 이야기 했던 내용"* — *실시간 학습 + 코드 연결*. **시간 두고 학습 + 코드 연결** 어휘.
@@ -0,0 +1,316 @@
1
+ # PR #145 — [블랙잭 2단계] 공백 미션
2
+
3
+ - **Reviewee:** [@junseo511](https://github.com/junseo511)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/145
5
+ - **단계:** 2단계
6
+ - **리뷰어:** @lee-ji-hoon (코니)
7
+ - **라인 코멘트:** 17 스레드 — *학생 자가 모든 응답 풍부 + 1단계 PR URL 자가 참조 + Manager 객체 도입 자가 반성 + 코드 포맷 자가 토론*
8
+ - **양 단계 분석 reviewee** (1단계 #107 별도). 1단계의 *학습 가시화 최강 사례* 진화.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - **PR 본문 자가 1단계 URL 참조 + 변경 요약 + 게임 진행 스크린샷** — *"[이전 PR](https://github.com/woowacourse/kotlin-blackjack/pull/107)에서의 코멘트에 답변 및 반영을 완료했습니다."* + *"기존의 `게임 총괄 관리자` 가 하던 업무를 각 태스크별 관리자로 분리했습니다."* + *"기존에 제거한 Hand 객체를 다시 만들어"* + 베팅 게임 스크린샷. **1단계 자가 참조 + 2단계 변경 요약 명시 모범** — PR #99·#46·#95·#39 결의 *1단계 URL 자가 참조 시리즈* + PR #107 의 *스크린샷 첨부* 진화.
13
+ - **`Map<Name,Money>` → `BettingResult` 변경 자가 정당화** — 코니 메타 질문: *"`Map<Name, Money>` -> `BettingResult` 로 변경이 되었는데요! 이 부분에 대해서는 어떤 의도로 변경이 된 걸까요? 틀렸다는 의미가 아닙니다. 커밋을 둘러보다가 변경이 되었길래 어떤 점을 보고 객체로 변경을 하셨을까 궁금해서 남기는 리뷰입니다."* + 학생: *"- Map이 아닌 다른 변수형으로 바뀌었을 경우에 수정하는 양을 줄이기 위해 / - 좀 더 명시적으로 이것은 무엇이다! 라는 것을 명시하기 위해"*. **2 가지 이유 자가 명시 모범** — *변경 비용 + 명시성*. PR #39 (rhthrhrl0 *PlayersNameAndBet 일급 컬렉션*) 결의 *역방향* (학생측 적극 도입).
14
+ - **`unaryMinus` Kotlin operator 자가 발견** — 코니 *"unaryMinus 이런 게 있는 줄도 몰랐네요 👀"* + 학생: *"저도 몰랐는데 operator fun을 쓸 기회는 이때다 하고 써보려고 찾다보니까 나왔습니다 ㅋ.ㅋㅋㅋ.ㅋㅋ"*. **학생 자가 Kotlin 어휘 탐색 + reviewer 도 인정**. PR #46 (krrong *operator times*) / PR #137·#148·#90·#146·#91 의 *Kotlin 어휘* 결.
15
+ - **`DrawManager` 자가 제거 결정** — 코니 진단: *"`DrawManager` 가 있으면서 어떤 이점이 생겼다고 생겼을까요? 지금 전반적으로 꼭 필요한 Manager인가? 싶은 것들이 있습니다."* + 학생: *"DrawManager를 없애고 Participants 내에서 참가자들이 create되자마자 카드를 받도록 구현하면 어떨까요?? 드로우가 필요하다면 각 참가자에게 드로우를 하도록 위임하구요!"*. **YAGNI 자가 인정 + 책임 위임 자가 도입**. PR #146 (yrsel *YAGNI 자가 인정*) / PR #31 (no1msh *Builder 패턴 불필요*) / PR #146 결.
16
+ - **`이전에 배웠던 내용`** — 코니 *"이전에 배웠던 내용을 잊지 않고 잘 사용해주셨네요 👍"* (ResultCount) — **PR #107 1단계 권고 자가 반영 + 칭찬**.
17
+ - **모든 thread 학생 응답** — 17 thread 모두 학생 답변 = *학습 가시화 최강 사례 (PR #107 와 동일)*. PR #46·#43·#91·#77·#107 결.
18
+
19
+ ## 못한 점 (설계 관점)
20
+
21
+ ### 1. `Hand initialCards` 책임 위치 — 7 단계 핑퐁 토론
22
+
23
+ 코니 1차: *"hand에 `initialCards` 가 있음으로써 어떤 이점이 있다고 생각하실까요? 지금 당장에는 사용되는 곳이 다 테스트 부분 같아 보이는데, 그렇다면 지금 당장에 필요가 없는 구현인데 어떤 의도로 만들었는지를 알고 싶네요. 만약 초기카드를 정해주고 싶은 것이였다면 Hand를 주입해주는 곳에서 넣어줘야 했지 않을까 싶네요."*
24
+
25
+ 학생: *"패(Hand)라는 개념 자체가 카드를 보유한 상태를 의미하므로, 초기 카드를 가질 수 있도록 설계하는 것이 자연스럽다고 생각했습니다! 또한, 매번 넣어주는 것보다 테스트의 용이를 위해 패 안에 미리 카드를 쥐어줄 수 있는 것을 코니는 어떻게 생각하시나요?"*
26
+
27
+ 코니: *"네 초기 카드를 가질 수 있도록 설계를 했으면 첫턴에 바로 Hand에 Card를 넣어 주는 행위가 있으면 납득이 될 것 같았는데요. 지금은 없기에 어떤 의도로 이 객체를 만들었었는지가 궁금했어요 🤔"*
28
+
29
+ 학생: *"아! 이런 방법으로 처음 설계했어도 괜찮았을 것 같아요 :) 저는 카드를 뽑는 행위는 플레이어가 생성되고 나서 한다는 생각을 했어서요...! 현재는 테스트를 목적으로 둔 생성자라고 생각했습니다 🤔 플레이어에서 초기 카드를 생성할 때 받고 넘겨주는게 더 나은 방향일까요??"*
30
+
31
+ 코니 (트레이드오프 명시):
32
+
33
+ > *"`테스트를 목적으로 둔 생성자가 과연 올바른 걸까?` 라는 것을 고민해 보면 어색하다고 생각이 드네요.*
34
+ >
35
+ > *플레이어가 생성이 될 때 1. Hand는 필수 값이다. 2. 게임에 참여할 때 필수적으로 카드를 2장을 갖는다. 이런 관점으로 봤을 때 그리 어색하지는 않다고 생각합니다. 단 그렇게 됐을 때 카드를 안 받고 시작하는 게임이 추가가 된다고 하면 수정이 생각보다 커질 수도 있게 될 것 같네요. 그래도 미리 받고 한다면 꽤나 코드가 단축이 되는 부분도 있을 것 같으며, 필수적인 요소를 받는 것이 어색하지는 않다고 생각하기에 어느 정도 트레이드오프로 감수할 수 있는 부분..."*
36
+
37
+ 학생: (자가 답변 — 잘림)
38
+
39
+ 코니 (자가 부연 + 자가 의도 명확화):
40
+
41
+ > *"명확히는 Hand를 생성할 때 카드를 2장을 쥐어주는 것이었습니다 👀*
42
+ >
43
+ > *현실세계로 따지면 참여자들이 `Hand` 를 이미 갖고 있는 상태로 시작을 했겠지만 객체지향의 세계에서는 다르게 구현이 되어있기에 `Hand` 자체가 생성이 될 때 그냥 2장을 갖고 `Particiapnt` 들 에게 가는 건 어떨까요?라는 의미로 남겼던 리뷰입니다.*
44
+ >
45
+ > *객체 설계 자체가 잘못됐다는 느낌은 아니었으며, 제가 의견을 너무 어필해 버리면 그대로 따라갈까 봐 추상적으로 말해서 헷갈렸던 것 같습니다 🤔"*
46
+
47
+ → **5 가지 메타 학습**:
48
+
49
+ #### 1.1. *테스트 목적 생성자 = 안티패턴 시그널*
50
+
51
+ 코니: *"테스트를 목적으로 둔 생성자가 과연 올바른 걸까?"* — **테스트 위해 도입된 생성자/메서드 = 코드 구조 잘못 시그널**. PR #99 (s6m1n *Controller + View 없이?*) / PR #91 (murjune *Test Fixture 진화*) 결.
52
+
53
+ #### 2.1. *Hand 생성 시 2장 강제 vs 외부 주입*
54
+
55
+ - (A) **`Hand(initialCards: List<Card>)`** — 학생 코드. *초기 카드 외부 주입 + 빈 Hand 가능*.
56
+ - (B) **`Hand(twoCards: List<Card>)` + 필수 2장 invariant** — 코니 권유. *블랙잭 룰 강제*.
57
+ - (C) **`Hand` 빈 생성 + Participant 생성 시 draw 2장** — 외부 주입.
58
+
59
+ #### 1.3. *코니의 *"제가 의견을 너무 어필해 버리면 그대로 따라갈까 봐 추상적으로 말해서"** 메타 어휘
60
+
61
+ **reviewer 가 *학생이 권고를 *맹목적으로 따르지 않도록* 추상화* 의도 명시**. PR #95 (말리빈 *옳고 그름 없고 장단점만*) / PR #43·#46·#91·#23·#26 의 *학생 결정 존중* 결의 *reviewer 의도 메타*.
62
+
63
+ #### 1.4. *reviewer 자가 의도 명확화*
64
+
65
+ 코니가 *7 단계 토론 후* *"명확히는 Hand를 생성할 때 카드를 2장을 쥐어주는 것"* 자가 명시. **메타 토론의 마지막 명확화**. PR #91·#77·#46·#16·#95·#137 결.
66
+
67
+ #### 1.5. *학생 자가 *"이런 방법으로 처음 설계했어도 괜찮았을 것 같아요"* — 자가 결정 변경 가능성*
68
+
69
+ **학생이 권고를 *수용하지 않더라도 *다른 대안 인정* 메타 학습*. PR #107·#46·#43·#91 결.
70
+
71
+ PR #46·#77·#98·#99·#43·#74 의 *Hand 책임 위치 토론* 결.
72
+
73
+ ### 2. `recieve → drawCards` 명명 + Int 원시값 (1단계 후속)
74
+
75
+ 코니: *"아앗.. 제가 말한 건 `recieve`라는 오타였는데!... `receive` 이 맞지 않나요?!.. 그리고 함수명과 lambda를 통일할 필요는 없습니다. 주로 lambda에는 어떠한 행위가 들어가는지를 자주 표현을 하는 편인데요. 그렇다면 지금 파라미터명을 다시 고민해 보면 좋을 것 같네요 🤔 그리고 `recieveCards: (Int) -> List<Card>` 에서 Int도 원시값이니 바꿔볼까요?"*
76
+
77
+ 학생: *"아니 헐 `receive` 가 맞다네요 😅"* + *"행위 자체는 카드를 뽑는 것이니 `drawCards` 가 적당해 보이는데 어떠신가요?!"* + *"사실 이친구도 눈에 밟히긴 했는데...! Winning을 세는 Count와 겹쳐서 리팩토링 게으름,,, 코니에게 딱 걸려버렸네요 🥲"*
78
+
79
+ → **3 가지 학습**:
80
+
81
+ #### 2.1. *함수명 vs 람다명 분리*
82
+
83
+ - *함수 (`receive`)* = *수신 측 동작 (받는다)*.
84
+ - *람다 (`drawCards`)* = *공급 측 동작 (뽑는다)*.
85
+ - *동일 람다지만 *호출자 시점* 과 *제공자 시점* 명명 다름*.
86
+
87
+ #### 2.2. *오타 (recieve) 두 PR 연속 발견*
88
+
89
+ PR #107 1단계의 *`recieve` 오타 → 명명 일관성 권고* 가 PR #145 에서도 잔존 = *학생 자가 학습 누락*. **MCP 룰 후보 `spelling-consistency`**.
90
+
91
+ #### 2.3. *Int 원시값 학생 자가 *리팩토링 게으름* 인정*
92
+
93
+ *"리팩토링 게으름,,, 코니에게 딱 걸려버렸네요"* — **학생 자가 게으름 인정 + 학습 가시화**. PR #46·#107·#91 결.
94
+
95
+ ### 3. `View 가 Domain 객체 직접 생성` 일관성 — MVC 메타 토론
96
+
97
+ 코니: *"`getIsRecieveMore` 은 `UserCommand` 를 직접 만들어서 넣어주고 있는데 `getPlayers` 는 반대로 String으로 회귀를 했네요!.. 공백은 MVC에서 View가 Model을 직접 만드는 것에 대해서 어떻게 생각할까요? 이미 View가 Model을 알고 있기에 만들어줘도 상관 없지 않을까요? 🤔"*
98
+
99
+ 학생: *"Controller에서 해도 괜찮고 View에서 해도 괜찮다는 것이 저의 의견입니다 ‼️ 하지만 일관성은 지켜야겠죠 😅 저는 객체 내의 메서드를 직접 부르는게 아니라면 뷰에서 생성정도는 하는게 개인적으로 더 명시적이고 깔끔해 보이네요 🤔"*
100
+
101
+ 코니: *"네 좋습니다. 둘 다 틀린 말은 아니라고 생각을 해요. 그런데 입력에 의해서 단순 생성만을 위한 것이라면 View에서 해도 되지 않을까?라는 게 제 의견입니다. 추가로 Android를 기준으로 하면 MVC가 정말 애매한 패턴이기에 지금 Android는 잊고 MVC에 대해서만 고민을 해보면 좋을 것 같네요 🤔"*
102
+
103
+ 학생: *"저도 MVC를 한번 더 하게되면 `생성` 이라는 행위를 뷰에 두는 방향으로 해봐야겠어요! 하지만 팩토리 메서드를 할 때에는 컨트롤러나 다른 모델에서 생성하도록 두고요 🤔"*
104
+
105
+ → **3 가지 학습**:
106
+
107
+ #### 3.1. *View 가 Domain 객체 생성 양가성*
108
+
109
+ - *View 가 입력 → Domain 객체 생성 → Controller 전달* = *입력 변환 응집*.
110
+ - *View 가 String 반환 → Controller 가 Domain 객체 생성* = *View 가 도메인 무관*.
111
+ - **`MCP 룰 후보 `view-domain-object-creation-locus`**.
112
+
113
+ #### 3.2. *Android vs MVC 분리 어휘*
114
+
115
+ 코니: *"Android를 기준으로 하면 MVC가 정말 애매한 패턴이기에 지금 Android는 잊고 MVC에 대해서만 고민"* — **MVC vs MVP vs MVVM Android 패턴 분리**. PR #91 (murjune *Activity onCreate 경험*) / PR #137·#148 의 *Android 어휘* 결.
116
+
117
+ #### 3.3. *일관성 자가 명시 + reviewer 인정*
118
+
119
+ 학생의 *"일관성은 지켜야겠죠 😅"* + 학생 자가 결정 변경 (팩토리 메서드는 Controller). **일관성 자가 학습**.
120
+
121
+ ### 4. `Manager` 객체 다중 = 빈약 Model 시그널
122
+
123
+ 코니: *"`WinningManager` 도 동일한 맥락의 리뷰입니다. `Participants`라는 Model이 이미 있으니 참가자들끼리 마지막에 서로의 점수를 알아서 결과를 controller한테 통보하는 형태는 별로였을까요? Controller의 모든 로직을 Manager라는 것으로 빼버리니 너무 빈약한 Model들이 많이 있습니다 🫠"*
124
+
125
+ 학생 자가 책임 재분배 제안: *"1. 그럼 참가자 각각에게 점수에 따라 승패의 상태를 반환하는 메서드를 구현해두고 2. 참가자들 객체에서는 각 참가자들의 정보를 수합해서 3. 컨트롤러에 수합된 정보를 반환하는건 어떨까요?"*
126
+
127
+ → **5 가지 학습**:
128
+
129
+ #### 4.1. *Manager 객체 다중 = 빈약 Model 시그널*
130
+
131
+ - *DrawManager, WinningManager, ParticipantManager, BettingManager...* — *N 개의 Manager 객체*.
132
+ - *각 Manager 의 책임 = *기존 Model 의 책임* 누수*.
133
+ - *Model 이 *빈약* = 도메인 객체가 *데이터 컨테이너* 로 격하*.
134
+
135
+ **MCP 룰 후보 `manager-class-proliferation`** = *N 개 Manager 객체 = 책임 분산 부족 시그널*.
136
+
137
+ #### 4.2. *PR #107 (`UserCommand/GameManager/ResultManager 자가 도입`) 의 *역효과**
138
+
139
+ PR #107 (1단계) 에서 *학생 자가 도입* 한 *3 Manager + 게임 흐름 응집* 이 *PR #145 (2단계) 에서 *Manager 폭증 안티패턴 으로 전환*. **MCP 룰 후보 `responsibility-extraction-overcorrection`** = *과한 책임 분배 = Model 빈약*.
140
+
141
+ #### 4.3. *학생 자가 책임 재분배 제안*
142
+
143
+ 3 단계 명시: *참가자 각각 → 참가자들 → 컨트롤러*. **자가 책임 분배 학습 모범**.
144
+
145
+ #### 4.4. *코니의 *"빈약한 Model들이 많이 있습니다 🫠"* — 비유 어휘*
146
+
147
+ 이모지 *🫠* (얼굴 녹는 이모지) = *학생 자가 후회 + reviewer 친밀한 반응*. PR #46 (말리빈 *🥲*) / PR #107 (코니 *😅*) 결.
148
+
149
+ #### 4.5. *Controller god-object 의 반대 방향 안티패턴*
150
+
151
+ PR #99·#95·#28·#78·#112·#125·#147·#43·#77·#46 의 *Controller god-object* = *Controller 가 모든 책임* 안티패턴 + *Manager 폭증* = *책임을 *Manager 객체로 분산* 안티패턴* — **양 극단**.
152
+
153
+ ### 5. `WinningState ↔ Dealer 의존도 단방향` 자가 학습
154
+
155
+ 코니: *"WinningState 객체가 간접적으로 Dealer에 의존을 하고 있는 상태인데요. Dealer를 의식해서 만들어진 함수인데, 이 함수가 여기 있는 것이 맞을지 아니면 어딘가 로직이 꼬여서 만들어진 것으로 보이는데, 다시 생각해봐 주셨으면 좋겠어요."*
156
+
157
+ 학생: *"이건 확실히 안되겠네요...! 의존도를 최대한 단방향으로 하고자 했는데 안된 부분이 있었군요 🥲"*
158
+
159
+ → **간접 의존 = 도메인 객체 의식한 함수 시그널**. *WinningState (결과 객체) 가 Dealer (참가자) 의식 = 책임 분리 X*. PR #93 (junjange *bidirectional-dependency*) / PR #74 (송핑크 *양방향 의존*) 결.
160
+
161
+ ### 6. `payMoney` 명명 + 반환값 모호
162
+
163
+ 코니: *"`payMoney` 라는 이름을 생각해보면 단순히 `pay` 만 할 것이라고 보여서 반환을 안 할 것처럼 보이는데 함수 내부에서는 반환도 하고 있네요. 그리고 사용하는 곳에서 기존 money를 다시 반환하고 있네요."*
164
+
165
+ → **함수명 = 동작 + 반환값 일관성**. PR #99·#9·#39 결의 *명명 정확성* 결.
166
+
167
+ ### 7. `정상적으로` 추상 단어 — 테스트명 명세서 어휘
168
+
169
+ 코니 1차: *"`정상적으로 생성이 되면`이라는 뜻은 무엇이고 어떠한 것을 테스트하려고 했던 것인지 함수명만 보면 expect가 예상이 갈까요? 🤔"*
170
+
171
+ 코니 2차: *"저는 그냥 `정상적` 단어 자체가 빠지고 명확히 어떠한 상태가 될 것이다. 를 명시하기를 바랐습니다. 누군가한테는 name이 빈 상태도 정상적인 상태 라고 볼 수도 있지 않을까요?"*
172
+
173
+ 코니 3차 (BettingManagerTest): *"`정상적인 배팅금액 정상적으로 진행` 여기서 `정상적인`이 무엇을 의미할까요 🤔 테스트 코드에는 최대한 추상적인 의미를 지양해봅시다"*
174
+
175
+ → **테스트명 추상 단어 회피** = *"정상적", "옳은", "일반적인"*. PR #26·#46·#99·#107·#9 결의 *테스트 = 명세서* 어휘 강화.
176
+
177
+ ### 8. `unaryMinus` 테스트 무의미 자가 인정
178
+
179
+ 코니: *"이건 `unaryMinus` 가 구현이 되어있는지 안되어있는지를 보는 테스트의 느낌이네요. 유의미한 테스트인가? 그리그 비즈니스적인 로직인가? 하면 저는 잘 모르겠네요. `Money 객체에 - 기호를 붙이면 음수가 된다.` 이것은 `unaryMinus` 에서 이미 검증이 되어있는 API를 단순히 사용을 했기 때문인데요. `unaryMinus` 가 없었다면 이미 run 자체가 터졌을 것이기도 하고요."*
180
+
181
+ 학생: *"비즈니스 로직이 아닌 코틀린의 operator fun을 테스트하는 것은 확실히 무의미하다고 생각되네요! study test라면 모를까요 :) 이 테스트는 지우겠습니다!!"*
182
+
183
+ → **테스트 = 비즈니스 로직 + 도메인 룰 검증**. *Kotlin 표준 API 테스트 = 무의미 (이미 컴파일러 검증)*. **MCP 룰 후보 `meaningless-stdlib-test`**.
184
+
185
+ ### 9. `WinningResult.dealerResult` 미사용 + value class
186
+
187
+ 코니: *"변경이 된 부분은 확인을 했습니다. 단 value class를 써야 했던 이유와 `dealerResult` 는 아예 사용이 안 되고 있는데 `WinningResult`가 필요했던 이유가 있었을까? 싶긴 하네요. 그리고 지금의 출력은 `이름 : 수익` 이기에 PlayerResult랑 DelaerResult랑 달라야 할 이유도 없을 것 같아요."*
188
+
189
+ 학생: *"2단계 구현사항을 생각해보면 전반적으로 불필요한 객체들 같네요!! 계산에 필요한 PlayersWinningResult만 제외하고 삭제하도록 하겠습니다 :)"*
190
+
191
+ → **불필요 객체 자가 인정 + 제거 결정**. **YAGNI 강화**. PR #146·#31·#146 결.
192
+
193
+ ### 10. `BLACKJACK` 우선 vs `BUST` 우선 — 학생 자가 트레이드오프 인정
194
+
195
+ 코니: *"`플레이어 vs 딜러` 의 결과를 만들고 있는데요! 이때 `BLACKJACK` 인지 먼저 체크하는 것보다는 본인이 `BUST` 인지 판단하는게 논리적으로나 코드적으로 좀 더 좋지 않았을까 싶어요! 예를 들어서 플레이어가 BUST인 상황에서도 계속 DEALER의 handState가 어떤지 확인하고 있으니까요!"*
196
+
197
+ 학생: *"앗 저도 초기에 로직을 구성할 때 이 부분에서 똑같은 고민이 들었는데요...! 블랙잭이 2장 기준 21점이라 좀 더 명확하게 걸러질 것 같다는 생각이 들고, 그렇게 두었을 때 코드 모양이 계단식으로 내려가서 조금 더 예쁘다는(?) 생각이 들었어요!! 근데 코니의 방향도 논리적으로 합당하고 좋은 것 같아서 빠른 반영 진행하겠습니다 👍"*
198
+
199
+ → **3 가지 학습**:
200
+
201
+ #### 10.1. *분기 순서 = 단락 평가 효율 + 도메인 의미*
202
+
203
+ - *BLACKJACK 우선* = *2장 21점 빠른 필터 (학생 의도)*.
204
+ - *BUST 우선* = *플레이어 자기 패배 우선 (코니 의도)*.
205
+
206
+ #### 10.2. *코드 모양 (계단식) vs 논리 우선순위*
207
+
208
+ 학생의 *"계단식으로 내려가서 조금 더 예쁘다"* — *미적 vs 논리*. **양가성**.
209
+
210
+ #### 10.3. *학생 자가 양가성 인정 + 빠른 반영*
211
+
212
+ *"코니의 방향도 논리적으로 합당하고 좋은 것 같아서 빠른 반영 진행하겠습니다"* — **양가성 인정 + 자가 결정 변경**.
213
+
214
+ ### 11. `코드 포맷 (abstract val / val / abstract fun / fun)` 자가 토론
215
+
216
+ 코니: *"코드 포맷도 조금 더 신경을 쓰면 좋을 것 같네요. 1. abstract val 2. val 3. abstract fun 4. fun 이 형태로 정리가 된다면 더 깔끔할 것 같네요 👀"*
217
+
218
+ 학생: *"앗 추상 변수가 아래쪽으로 와버렸네요! override, operator, abstract, 일반 순으로 두면 괜찮을까요?!"*
219
+
220
+ 코니: *"네 좋습니다. 사실 저 구조가 공식문서에 있는 포맷팅이 아니긴 한데요. 단지 공백이 코드를 정리한 구조를 봤을 때 저렇게 되는 게 조금 더 가독성이 좋아 보인다고 느껴져서 제안을 드렸습니다 👀"*
221
+
222
+ 학생 자가 의문 + top-down 정리: (백킹 프로퍼티 위치 + cards/hand 의존 순서 자가 토론)
223
+
224
+ 코니 top-down 정리:
225
+
226
+ ```kotlin
227
+ fun main() { foo1() }
228
+ fun foo1() { foo2(); foo3() }
229
+ fun foo2() { ... }
230
+ fun foo3() { ... }
231
+ ```
232
+
233
+ > *"`top-down` 형식으로 봤을 때 `foo1` 이 먼저 다음 `foo2` `foo3` 이런 순서로 위에서부터 읽히기에 순서대로 읽히게끔 하는 것을 좋아하기에 공백이 말한 `cards가 hand를 사용하니까 hand 위에 들어와...`"*
234
+
235
+ → **3 가지 메타 학습**:
236
+
237
+ #### 11.1. *공식 문서 vs 개인 선호*
238
+
239
+ 코니: *"공식문서에 있는 포맷팅이 아니긴 한데요"* — *공식 컨벤션 + 개인 가독성 선호 양립*.
240
+
241
+ #### 11.2. *top-down vs bottom-up 코드 읽기 순서*
242
+
243
+ - *top-down*: 진입점 → 호출되는 함수 순서.
244
+ - *bottom-up*: 의존 객체 → 사용 객체 순서.
245
+ - *학생 자가 의문*: *백킹 프로퍼티 위치 (money 아래 _money?) / cards (hand 사용) 위치*.
246
+
247
+ #### 11.3. *코드 포맷 = 가독성 자가 토론*
248
+
249
+ **MCP 룰 후보 `code-format-readability-convention`** = *개인 선호 + 컨벤션 + top-down*. PR #46·#107 결.
250
+
251
+ ### 12. `winningState 테스트 부재 + 논리 우선순위 (놓친 부분)`
252
+
253
+ 코니: *"winningState에 대한 테스트도 추가를 해보면 좋을 것 같습니다. 지금 놓친 케이스가 존재하고 있습니다."*
254
+
255
+ 학생: *"테스트를 추가했는데 찾지 못했습니다 🥲 혹시 어떤건지 알 수 있을까요...?"*
256
+
257
+ 코니 자가 부연: *"명확히는 놓친 부분이라기 보단 논리적으로 아쉬운 부분이 좀 더 맞았겠네요!"*
258
+
259
+ → **reviewer 자가 부연 + 의도 명확화**. PR #16 (BeokBeok *"제가 설명이 조금 부족한 것 같네요"*) / PR #91·#77·#46·#95·#137 결.
260
+
261
+ ## 리뷰어 의견 요지 (코니 / lee-ji-hoon)
262
+
263
+ 17 코멘트 특징 (PR #107 와 동일 reviewer):
264
+
265
+ - **메타 질문 어휘** — *"어떤 이점이 있다고 생각하실까요?"*, *"어떤 의도로 변경이 된 걸까요?"*, *"누가 한 번 천천히 고민을 해봐줬으면 좋겠어요"* — 학생 자가 답변 유도.
266
+ - **`reviewer 의도 메타 (추상화 의도)`** — *"제가 의견을 너무 어필해 버리면 그대로 따라갈까 봐 추상적으로 말해서 헷갈렸던 것 같습니다"* — **MCP 핵심 가치 (학생 자가 결정 + reviewer 영향 차단) 와 일치**. PR #95 (말리빈 *"옳고 그름 없고 장단점만"*) / PR #43·#46·#23·#26 결.
267
+ - **공식 문서 + 개인 선호 분리** — *"공식문서에 있는 포맷팅이 아니긴 한데요"* — *컨벤션 vs 개인 의견 메타 어휘*.
268
+ - **자가 부연 + 의도 명확화** — *"명확히는 ~ 보단 ~ 가 좀 더 맞았겠네요!"* 다수. PR #91·#77·#46·#95·#137·#16 결.
269
+ - **친밀한 이모지** — *🫠* (얼굴 녹는), *🤔*, *👀*, *😅* — **친밀한 어조**.
270
+ - **`이전에 배웠던 내용`** 등 *1단계 PR 자가 참조*. PR #137·#46·#99 결.
271
+
272
+ ## 대표 인용
273
+
274
+ > *"객체 설계 자체가 잘못됐다는 느낌은 아니었으며, 제가 의견을 너무 어필해 버리면 그대로 따라갈까 봐 추상적으로 말해서 헷갈렸던 것 같습니다 🤔"* — lee-ji-hoon (reviewer 의도 메타 어휘)
275
+
276
+ > *"Controller의 모든 로직을 Manager라는 것으로 빼버리니 너무 빈약한 Model들이 많이 있습니다 🫠"* — lee-ji-hoon (Manager 폭증 = 빈약 Model)
277
+
278
+ > *"테스트를 목적으로 둔 생성자가 과연 올바른 걸까?"* — lee-ji-hoon (테스트 위해 도입된 코드 = 안티패턴 시그널)
279
+
280
+ > *"비즈니스 로직이 아닌 코틀린의 operator fun을 테스트하는 것은 확실히 무의미하다고 생각되네요! study test라면 모를까요 :)"* — junseo511 (테스트 = 비즈니스 로직 자가 인정)
281
+
282
+ > *"리팩토링 게으름,,, 코니에게 딱 걸려버렸네요 🥲"* — junseo511 (학생 자가 게으름 인정 + 친밀한 어조)
283
+
284
+ > *"의존도를 최대한 단방향으로 하고자 했는데 안된 부분이 있었군요 🥲"* — junseo511 (간접 의존 자가 인정)
285
+
286
+ > *"DrawManager를 없애고 Participants 내에서 참가자들이 create되자마자 카드를 받도록 구현하면 어떨까요?? 드로우가 필요하다면 각 참가자에게 드로우를 하도록 위임하구요!"* — junseo511 (YAGNI 자가 인정 + 책임 위임 자가 도입)
287
+
288
+ ## 얻은 교훈
289
+
290
+ 1. **`Manager 객체 다중 = 빈약 Model 시그널`** — *DrawManager, WinningManager, ParticipantManager, BettingManager 4 개 폭증 = 책임 분산 과한 + Model 빈약*. **MCP 룰 후보 `manager-class-proliferation`**. PR #107 (1단계 자가 도입) → PR #145 (2단계 안티패턴 전환) **`responsibility-extraction-overcorrection`**.
291
+
292
+ 2. **`테스트 목적 생성자 = 안티패턴 시그널`** — *"테스트를 위해 도입된 생성자/메서드 = 코드 구조 잘못 시그널"*. PR #99·#91 결.
293
+
294
+ 3. **`reviewer 의도 메타 (추상화 의도)`** — *"의견을 너무 어필해 버리면 그대로 따라갈까 봐 추상적으로 말해서"* — **MCP `oh-my-oop` 핵심 가치 (학생 자가 결정 + reviewer 영향 차단) 와 일치**. PR #95·#43·#46·#23·#26 결.
295
+
296
+ 4. **`함수명 vs 람다명 분리`** — *함수 = 수신 측 동작 / 람다 = 공급 측 동작*. **MCP 룰 후보 `function-vs-lambda-naming-perspective`**.
297
+
298
+ 5. **`unaryMinus` Kotlin operator 자가 발견** — *학생 자가 Kotlin 어휘 탐색 + reviewer 도 인정*. PR #46·#137·#148·#90·#146·#91 결.
299
+
300
+ 6. **`Map → Domain 객체 변환` 2 이유** — *(1) 변경 비용 (Map 형변경 시 N곳 수정) + (2) 명시성 (이것은 무엇이다)*. **MCP 룰 후보 `map-to-domain-object-migration`**. PR #39 (rhthrhrl0 *일급 컬렉션 과적용*) 결의 *역방향*.
301
+
302
+ 7. **`View 가 Domain 객체 생성 양가성`** — *View 가 입력 → Domain 변환 응집* vs *View 가 String → Controller Domain 변환*. **MCP 룰 후보 `view-domain-object-creation-locus`**.
303
+
304
+ 8. **`Kotlin operator fun 테스트 = 무의미`** — *컴파일러 검증 + 비즈니스 로직 X*. **MCP 룰 후보 `meaningless-stdlib-test`**.
305
+
306
+ 9. **`테스트명 추상 단어 회피` (정상적/옳은/일반적인)** — *"누군가한테는 name이 빈 상태도 정상적인 상태 라고 볼 수도"*. PR #26·#46·#99·#107·#9 결.
307
+
308
+ 10. **`분기 순서 = 단락 평가 + 도메인 의미` 양가성** — *BLACKJACK 우선 (학생 미적/필터 효율) vs BUST 우선 (코니 논리)* — **MCP 룰 후보 `branch-order-readability-vs-logic`**.
309
+
310
+ 11. **`코드 포맷 (abstract val / val / abstract fun / fun)` 가독성 토론** — *공식 문서 vs 개인 선호 + top-down 읽기 순서*. **MCP 룰 후보 `code-format-readability-convention`**.
311
+
312
+ 12. **`PR 본문 1단계 URL 자가 참조 + 변경 요약 + 스크린샷` = 학습 가시화 최강 모범** — *PR #107 의 학습 가시화 진화*. PR #99·#46·#95·#39 결.
313
+
314
+ 13. **`친밀한 이모지 어조`** — *🫠, 🥲, 🤔, 👀, 😅* — *학생/reviewer 양측 친밀한 어조 + 자가 인정 양립*. PR #46·#107·#91 결.
315
+
316
+ 14. **`학생 자가 게으름 인정`** — *"리팩토링 게으름,,, 딱 걸려버렸네요"* — **학생 자가 학습 가시화 + 친밀한 어조**.