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,226 @@
1
+ # PR #19 — [블랙잭 1단계] 빅스 미션
2
+
3
+ - **Reviewee:** [@briandr97](https://github.com/briandr97)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/19
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@vagabond95](https://github.com/vagabond95) — *racingcar 인용 reviewer* (PR #75 등) + 2023 코호트
7
+ - **라인 코멘트:** 14 스레드 — *PR 본문 자가 의문 (interface vs abstract class 기준) + 학생 자가 답변 풍부 + Kotlin 어휘 자가 학습 정점 (sealed interface vs sealed class + enum vs sealed) + Person god-object → HandOfCards 일급 컬렉션 자가 적용 + MVC 의 origin 어휘 양방향 토론 + reviewer *제 이야기 또한 정답이 아닌 하나의 의견* 메타 어휘 + 전략 패턴 → 확장함수/object 학생 자가 의문 + label/text/toString 도메인 vs View 4 자리 + 빌더 패턴 X 블랙잭 무관 (study 패키지 이동)*
8
+ - **2023 코호트 마지막 ≥10 thread 1단계 미분석 PR** (batch 22 마무리). 2023 코호트 총 11+ PR 분석 완료.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 의문 — `interface` vs `abstract class` 기준
13
+
14
+ PR 본문:
15
+
16
+ > *"한 가지 궁금한 점이 있습니다. 리뷰어님께서는 interface와 abstract class를 어떤 기준으로 구분하여 사용하시는지 궁금합니다!"*
17
+
18
+ → **Kotlin 어휘 자가 의문 + reviewer 의견 직접 요청** = PR #129·#126·#138·#142·#143·#113 (sealed vs abstract vs open) 결의 *학생 자가 의문 합류* 누적 7+ PR.
19
+
20
+ ### 2. Kotlin 어휘 자가 학습 정점 (sealed interface + enum vs sealed)
21
+
22
+ 학생 자가 학습 (Thread 12):
23
+
24
+ > *"sealed interface가 존재하는지 몰랐습니다! 뭔가 코틀린 인 액션에서 sealed interface는 안된다는 식으로 봤었던 것 같아 존재하는지 몰랐었는데 이번 기회를 통해 알 수 있게 되었습니다! 감사합니다!*
25
+ >
26
+ > *찾아본 결과 sealed class와 sealed interface의 차이점은 추상 클래스냐 인터페이스냐로 다중 상속을 가능하게 하는가?로 이해하였습니다."*
27
+
28
+ 학생 자가 학습 (Thread 14):
29
+
30
+ > *"enum과 sealed의 큰 차이점은*
31
+ > *- enum에서는 하나의 인스턴스만을 갖고 sealed에선 여러 인스턴스를 생성할 수 있다.*
32
+ > *- enum에선 모두 같은 생성자를 가져야하지만 sealed에서는 다른 형태의 생성자를 가질 수 있다.*
33
+ >
34
+ > *그런데 현재 제 코드에선 sealed class의 서브 클래스들이 object로 선언되어있습니다. 이 경우 여러 인스턴스를 생성할 수 있고 여러 형태의 생성자를 가질 수 있다는 sealed의 이점이 사라져 enum과 거의 동등한 상태가 되는 것 같습니다."*
35
+
36
+ reviewer 자가 답변 (Thread 14):
37
+
38
+ > *"공식 docs 에서, enum 의 정의를 보면 다음과 같이 나오고 있습니다. `Each enum constant is an object`. 즉, enum 은 의미 그대로 상수의 집합이라고 보시면 될 것 같아요.*
39
+ >
40
+ > *반면, sealed class 는 말그대로 자식의 확장을 정확하게 제한하는 역할을 할 수 있습니다. enum 처럼 쓸 수도 있지만, 그보다 좀 더 확장시켜 클래스의 집합이라고 보셔도 좋을 것 같아요.*
41
+ >
42
+ > *당장은 이정도만 생각을 해두고, 구현해나가면서 장/단점과 사용처를 경험으로 익혀보시는 것도 좋겠습니다."*
43
+
44
+ → **학생 자가 깊은 학습 + reviewer 공식 문서 인용 + 학생 부담 최소화** = *MCP `oh-my-oop` 핵심 가치 합류*. PR #129·#143 (Kotlin 어휘 자가 분류) 결 강화.
45
+
46
+ **MCP 룰 `enum-vs-sealed-class-criteria` 후보** — *enum (상수 집합) vs sealed class (클래스 집합) 구분 기준*.
47
+
48
+ ### 3. reviewer *제 이야기 또한 정답이 아닌 하나의 의견* 메타 어휘 (Thread 9)
49
+
50
+ reviewer:
51
+
52
+ > *"우선 아키텍처 및 이에 대한 세부 구현에 대한 관점은 실제 현업에서도 개발자들의 가치관/관점에 따라 갈리는 부분이 많기 때문에, 제 이야기 또한 정답이 아닌 하나의 의견으로 받아들여주셨으면 합니다. :)"*
53
+
54
+ → **reviewer 자가 *의견 ≠ 정답* 메타 어휘** = **MCP `oh-my-oop` 핵심 가치 (단일 답 X + N 안 + 트레이드오프) 정점**. PR #95·#23·#26·#36·#129·#142·#109 결 합류 누적 8+ PR.
55
+
56
+ ### 4. Person god-object → HandOfCards 일급 컬렉션 자가 적용
57
+
58
+ reviewer (Thread 3): *"person 이 생각보다 많은 역할을 가지고 있는 것 같아요. cards 를 일급 컬렉션으로 분리해보는 것은 어떨까요?"*
59
+
60
+ 학생 자가 적용: *"cards를 손에 쥐고 있는 카드 패라고 인지해 HandOfCards라는 일급 컬렉션으로 분리하여 Person이 훨씬 작아졌습니다!"*
61
+
62
+ → **god-object 회피 + 도메인 어휘 (HandOfCards)** = PR #21·#117·#129·#138·#143·#118·#141 결 합류.
63
+
64
+ ### 5. 학생 자가 *확장 함수 vs object* 의문 (Thread 11)
65
+
66
+ reviewer:
67
+
68
+ > *"전략 패턴으로 주입받는 구조 👍 한편 클래스 - 함수로 제공하기보다, 확장함수를 사용해보는 것도 같이 고민해보면 좋을 것 같아요! 별다른 상태를 가지고 있는데, 함수를 호출하기 위해 클래스를 재 생성하는 방식은 다소 비효율적이지 않을까요?"*
69
+
70
+ 학생 자가 답변:
71
+
72
+ > *"하지만 수정하면서 한 가지 의문이 생겼습니다. 이런 식으로 확장 함수를 람다로 넘기게 되면 제가 원한(예측한) 두 가지 경우를 나타내는 함수(min, appropriate)가 아니더라도 Int 값을 반환하는 함수라면 뭐든 들어갈 수 있는 상황이 발생한다고 생각합니다.*
73
+ >
74
+ > *그래서 함수를 호출할 때마다 클래스를 재생성하는 방식이 비효율적이므로 주입하는 클래스를 object로 만든다면 문제가 해결되며 주입될 인자 형태 또한 인터페이스로 지정할 수 있어 더 좋지 않을까? 하고 생각해보았습니다!"*
75
+
76
+ → **확장 함수 vs object 트레이드오프 학생 자가 의문 + 타입 안전성 의식** = **MCP 룰 `extension-function-vs-object-strategy` 후보**.
77
+
78
+ reviewer 자가 답변: *"object 로 제공할 경우 일종의 유틸 클래스의 역할을 하므로 괜찮다고 생각해요!"*
79
+
80
+ ### 6. 빌더 패턴 X 블랙잭 무관 — 학생 자가 *study 패키지* 이동
81
+
82
+ reviewer (Thread 7): *"빌더 패턴을 생각하고 구현해주신 클래스라면, 접근방식이 잘못된 것 같아요. 추가로, 빌더 클래스를 따로 두었을때의 이점이 있을까요? 빌더 패턴의 구현 방식 및 의의에 대해 학습해보시는 것은 어떨까요?"*
83
+
84
+ 학생 자가 적용 (Thread 8): *"수업에서 다른 실습코드라 test/study로 패키지를 변경하였습니다!"*
85
+
86
+ → **블랙잭 무관 코드 = study 패키지 이동** = PR #58 (DSL Builder 의도 위반) + PR #130 (DSL Study 코드 = test) + PR #118 (`pattern-applied-without-need`) 결 합류 누적 8+ PR.
87
+
88
+ ### 7. label/text/toString 도메인 vs View 4 자리 (Thread 4·5·6)
89
+
90
+ reviewer 3 자리에 걸쳐 *도메인 어휘 vs View 어휘* 분리 권유.
91
+
92
+ → **Domain ↔ View 분리** = PR #21·#117·#129·#143·#126 (model-view-dependency-direction) 결 합류 누적 13+ PR ⭐⭐⭐.
93
+
94
+ ### 8. 추가 칭찬
95
+
96
+ - Thread 1: *"view 를 역할에 잘게 쪼개주신 것으로 보여요!"*.
97
+ - Thread 11: *"전략 패턴으로 주입받는 구조 👍"*.
98
+
99
+ ## 못한 점 (설계 관점)
100
+
101
+ ### 1. `MainView` 명명 → `DrawView` 자가 변경 (Thread 1)
102
+
103
+ reviewer: *"MainView 라는 네이밍을 봤을 때는 모든 View 를 포함할 수 있을것 같은 어감을 줍니다. 좀 더 구체적인 이름을 지어볼 수 있을까요?"*
104
+
105
+ 학생 자가 적용 → `DrawView` (카드 뽑는 View).
106
+
107
+ → **이름 의미 정확성** = PR #36·#117·#129·#130·#139·#109·#113·#118·#96 결 합류 누적 10+ PR.
108
+
109
+ ### 2. enum `has` 함수 vs `of` nullable (Thread 2)
110
+
111
+ reviewer: *"enum 에서 has 함수가 꼭 필요한지 고민해보면 좋을 것 같아요. of 로 값을 가져올 수 있고, 없다면 예외를 던지는게 더 자연스럽지 않을까요?"*
112
+
113
+ 학생 자가 적용: *"has는 뷰에서 쓰이던 로직이라 뷰에서 새로운 Decision을 만들어 of의 널 값을 이용해 다시 입력받도록 하였습니다!"*
114
+
115
+ → **enum has + of 활용 + nullable 재입력** = PR #138·#35 (Kotlin 예외 처리 nullable) 결 합류.
116
+
117
+ ### 3. BlackJackGame ↔ BlackJackGameBluePrint interface — controller 로직 위치 (Thread 9)
118
+
119
+ reviewer:
120
+
121
+ > *"해당 클래스의 로직들은 controller 에서 수행해야할 로직들이 많은 것 같아요. BlackJackGameBluePrint 인터페이스가 컨트롤러 레벨에 위치해주신 것도 그 이유 중 하나일 것 같구요 ㅎㅎ"*
122
+
123
+ 학생 자가 답변:
124
+
125
+ > *"우선 저는 controller가 뷰와 도메인을 단순히 연결시키는 역할이라고 생각했습니다. (...) BluePrint 인터페이스를 컨트롤러 레벨에 위치한 이유는 BlackJackGame이라는 도메인을 사용하는 방법을 컨트롤러에게 알려주는 설명서라고 생각했기 때문입니다!"*
126
+
127
+ reviewer 자가 답변 (긴 메타 어휘):
128
+
129
+ > *"제 이야기 또한 정답이 아닌 하나의 의견으로 받아들여주셨으면 합니다. :)*
130
+ >
131
+ > *저의 경우, 말씀하신 것처럼 controller 는 중계자의 역할을 하는 것이 맞다고 생각해요. 다만, model 과 view 는 controller 의 존재를 알아서는 안된다고도 생각합니다. (이 부분은 해석의 차이가 있지만 MVC, MVP, MVVM 등의 아키텍처의 기원을 공부해보시면 조금 감이 잡히실 수 있을 것 같아요.)*
132
+ >
133
+ > *어쨌든 이 논리를 확장시켜보면, controller 를 모르므로 결국 model 도 view 를 알지 못하고, view 도 model 을 알지 못하는 구조가 되는 것이죠.*
134
+ >
135
+ > *그런데, BlackJackGame 의 경우*
136
+ > *1) 컨트롤러의 명세(BlackJackGameBluePrint) 를 구현하고 있고, (= 컨트롤러의 존재를 알고 있고)"*
137
+
138
+ → **MVC 의 origin (MVP/MVVM 비교)** + **BluePrint interface = 도메인이 controller 인지** 안티패턴.
139
+
140
+ **MCP 룰 `domain-knows-controller-via-interface` 후보** — *도메인이 controller 명세 interface 구현 = MVC 위반*.
141
+
142
+ ### 4. Deck 카드 부족 예외처리 (Thread 10)
143
+
144
+ reviewer: *"카드를 더이상 뽑을 수 없을 떄의 예외처리가 필요하지 않을까요?"*
145
+
146
+ 학생 자가 적용: *"예외처리하여 카드가 없을 경우 카드 드로우를 종료하고 결과 산출로 넘어가도록 하였습니다!"*
147
+
148
+ → **카드 부족 처리 (graceful)** = PR #113·#118·#138·#141·#130 결 합류 누적 6+ PR.
149
+
150
+ ### 5. 전략 패턴 클래스 재생성 비효율 (Thread 11)
151
+
152
+ §5 참조. **MCP 룰 `extension-function-vs-object-strategy` 후보**.
153
+
154
+ ### 6. sealed interface 학생 자가 학습 (Thread 12)
155
+
156
+ §2 참조. **MCP 룰 `sealed-interface-vs-sealed-class` 후보**.
157
+
158
+ ### 7. 확장 함수 활용 (Thread 13)
159
+
160
+ reviewer: *"이 부분도 확장함수로 제공하면 좀 더 가독성 및 사용성이 좋아질 것 같아요! `cardNumber.toText()`"*
161
+
162
+ → **Kotlin 확장 함수 + 가독성** = PR #117·#143 (Kotlin 어휘) 결 합류.
163
+
164
+ ### 8. enum vs sealed class 차이 학생 자가 학습 (Thread 14)
165
+
166
+ §2 참조.
167
+
168
+ ### 9. `Person` god-object — §4 참조
169
+
170
+ ## 대표 인용
171
+
172
+ > [vagabond95 Thread 9]
173
+ > *"우선 아키텍처 및 이에 대한 세부 구현에 대한 관점은 실제 현업에서도 개발자들의 가치관/관점에 따라 갈리는 부분이 많기 때문에, 제 이야기 또한 정답이 아닌 하나의 의견으로 받아들여주셨으면 합니다. :)"*
174
+
175
+ → **reviewer 의 *의견 ≠ 정답* 메타 어휘** — **MCP `oh-my-oop` 핵심 가치 정점**.
176
+
177
+ > [vagabond95 Thread 14]
178
+ > *"공식 docs 에서, enum 의 정의를 보면 다음과 같이 나오고 있습니다. `Each enum constant is an object`. 즉, enum 은 의미 그대로 상수의 집합이라고 보시면 될 것 같아요. 반면, sealed class 는 말그대로 자식의 확장을 정확하게 제한하는 역할을 할 수 있습니다."*
179
+
180
+ → **공식 문서 인용 + 정확한 정의 어휘**.
181
+
182
+ > [briandr97 Thread 14]
183
+ > *"enum에서는 하나의 인스턴스만을 갖고 sealed에선 여러 인스턴스를 생성할 수 있다. (...) 그런데 현재 제 코드에선 sealed class의 서브 클래스들이 object로 선언되어있습니다. 이 경우 여러 인스턴스를 생성할 수 있고 여러 형태의 생성자를 가질 수 있다는 sealed의 이점이 사라져 enum과 거의 동등한 상태가 되는 것 같습니다."*
184
+
185
+ → **학생 자가 깊은 학습 + 자가 코드 자가 분석**.
186
+
187
+ > [briandr97 Thread 11]
188
+ > *"이런 식으로 확장 함수를 람다로 넘기게 되면 제가 원한(예측한) 두 가지 경우를 나타내는 함수가 아니더라도 Int 값을 반환하는 함수라면 뭐든 들어갈 수 있는 상황이 발생한다고 생각합니다."*
189
+
190
+ → **학생 자가 타입 안전성 의식**.
191
+
192
+ ## 얻은 교훈 (보편)
193
+
194
+ 1. **enum (상수 집합) vs sealed class (클래스 집합) 구분 기준** — **MCP 룰 `enum-vs-sealed-class-criteria` 후보**.
195
+
196
+ 2. **sealed interface vs sealed class** — **MCP 룰 `sealed-interface-vs-sealed-class` 후보**.
197
+
198
+ 3. **reviewer *의견 ≠ 정답* 메타 어휘** — **MCP `oh-my-oop` 핵심 가치 정점** 누적 8+ PR.
199
+
200
+ 4. **확장 함수 vs object 전략 패턴 트레이드오프** — **MCP 룰 `extension-function-vs-object-strategy` 후보**.
201
+
202
+ 5. **도메인이 controller 인지 (BluePrint interface) = MVC 위반** — **MCP 룰 `domain-knows-controller-via-interface` 후보**.
203
+
204
+ 6. **빌더 패턴 X 블랙잭 무관 = study 패키지 이동** — *pattern-applied-without-need* 누적 8+ PR.
205
+
206
+ 7. **Person god-object → HandOfCards 일급 컬렉션** — 누적 다수 PR.
207
+
208
+ 8. **MainView → DrawView 명명 정확성** — 누적 10+ PR.
209
+
210
+ 9. **공식 docs 인용 + reviewer 정의 어휘** = *MCP 핵심 가치*.
211
+
212
+ 10. **학생 자가 타입 안전성 의식 (확장함수 람다)** — *깊은 Kotlin 어휘 학습*.
213
+
214
+ ## MCP 룰 후보 신규 + 강화 (PR #19)
215
+
216
+ | 룰 | 신규 / 강화 | 누적 PR |
217
+ |---|---|---|
218
+ | `enum-vs-sealed-class-criteria` | 신규 | 1 (#19) |
219
+ | `sealed-interface-vs-sealed-class` | 신규 | 1 (#19) |
220
+ | `extension-function-vs-object-strategy` | 신규 | 1 (#19) |
221
+ | `domain-knows-controller-via-interface` | 신규 | 1 (#19) |
222
+ | `sealed-vs-abstract-vs-open-locator` | 강화 | 7+ |
223
+ | `pattern-applied-without-need` | 강화 | 8+ |
224
+ | `model-view-dependency-direction` | 강화 | 13+ ⭐⭐⭐ |
225
+ | `function-name-vs-return-semantic-mismatch` | 강화 | 10+ |
226
+ | `card-shortage-handling-strategy` | 강화 | 6+ |
@@ -0,0 +1,193 @@
1
+ # PR #59 — [빅스] 2단계 블랙잭
2
+
3
+ - **Reviewee:** [@briandr97](https://github.com/briandr97) (빅스)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/59
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@vagabond95](https://github.com/vagabond95)
7
+ - **라인 코멘트:** 6 스레드 — *PR 본문 MVC 1인 vs 다인 협업 시나리오 학생 자가 의문 + 수업 시간 템플릿 메서드 패턴 자가 학습 적용 / 다른 팀원 설명 가능 기준 + View vs Output 분리 학생 자가 합당 인정 + return lift vs else 객체지향 생활체조 trade-off + State 인터페이스 = 일반적 / 특정 상태 의존 X*
8
+ - **briandr97 양 단계 완성** (1단계 #19).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 — MVC 1인 vs 다인 협업 시나리오 학생 자가 의문 정점
13
+
14
+ PR 본문:
15
+
16
+ > *"블랙잭 2단계 제출합니다! 1단계에서 리뷰어님이 말씀해주신 컨트롤러 부분에 대해 잘 생각해보았습니다.*
17
+ >
18
+ > ***현재와 같이 m, v, c 모두를 한 명이 개발하고 있는 전지적 상태에서는 1단계에서 활용한 것처럼 명세를 작성하고 그에 맞춰 블랙잭 게임을 작성하는 것이 컨트롤러를 더욱 읽기 쉽게 해준다고 생각했습니다.***
19
+ >
20
+ > *하지만 **m, v, c를 각자 다른 사람이 개발한다고 생각했을 때 도메인 개발자는 프린트 되는 시점을 알 필요가 없고 단순히 필요한 값들만 전달 받으면 된다고 생각했습니다.***
21
+ >
22
+ > *물론 이 경우에도 도메인은 결국 누군가로부터 (print함수가 아니더라도) 값을 전달받아야하기 때문에 자신에게 값을 전달해줄 Controller의 존재를 알고 있다고 생각되어 **domain과 view는 Controller의 존재를 알지 못한다는 부분은 아직 잘 이해가 가지 않습니다.** (domain과 view가 서로 모른다는 부분은 이해했습니다)*
23
+ >
24
+ > *이 부분에 대한 리뷰어님의 생각이 궁금합니다!*
25
+ >
26
+ > ***수업시간에 배운 템플릿 메서드 패턴을 상태에 적용하여 새로운 방식으로 코드를 작성**해보았습니다!"*
27
+
28
+ → **MCP 룰 `mvc-collaboration-scenario-vocabulary`** ⭐⭐⭐ **신규 정점** — *학생 자가 MVC 1인 vs 다인 협업 시나리오 사고 + 도메인 개발자 입장 시뮬레이션*. PR #97 (`maintainability-over-performance-priority`)·PR #154 (`controller-imagination-test`) 결의 *컨트롤러 책임 사고* 다른 축 — *학생 자가 시나리오 사고 정점*.
29
+
30
+ → **MCP 룰 `template-method-pattern-on-state`** ⭐⭐ 신규 — *수업 시간 학습 → 상태 패턴 적용 자가 학습*. PR #89 (`pr-body-student-self-study-on-reviewer-recommendation`)·PR #62 결 합류 누적 3 PR.
31
+
32
+ → **`student-self-acknowledgment-of-confusion`** ⭐⭐ — *"아직 잘 이해가 가지 않습니다"* 학생 자가 명시.
33
+
34
+ ## 못한 점 (설계 관점)
35
+
36
+ ### 1. 다른 팀원 설명 가능 기준 (Thread 0) — 정점
37
+
38
+ reviewer 2개 질문:
39
+
40
+ > *"View 영역에서 View 와 Output 을 별도로 두었을때의 이점이 있을까요?"*
41
+ >
42
+ > *"다른 팀원이 개발을 진행할 때, XxxView 와 XxxOutput 에 어떤 코드를 넣어야할지 명확한 기준을 설명할 수 있을까요?"*
43
+
44
+ 학생 자가 답변:
45
+
46
+ > *"뷰를 출력하는 구체적이고 상세한 코드들은 Output에 두어 View는 Output의 함수를 호출하게 합니다. View에서 호출된 Output의 함수명으로 무슨 일을 하는지 충분히 알 수 있다고 판단하여 이로써 View의 코드를 깔끔하게하고 해당 뷰가 어떤 일을 하는지 한 눈에 알아볼 수 있도록 하고자 하였습니다.*
47
+ >
48
+ > *분리했던 이유는 앞서 위에서 말했던 이유들 때문이었습니다.*
49
+ >
50
+ > ***사실 다른 뷰들에서는 Input과 Output을 분리하고 Input과 Output의 함수들을 모아 View에서 호출하도록 하였는데 Result의 경우 Input이 없다보니 Output과 View의 역할이 혼동될 수 있다고 생각합니다.***
51
+ >
52
+ > *그러나 다른 뷰들이 분리된 기준과 통일성을 가져가고 싶어 이처럼 작성하게 되었습니다.*
53
+ >
54
+ > *설명하고자 한다면 Output에선 직접적으로 print함수를 호출하여 출력하는 작업을 하고 View에서는 Output에서 정의한 함수들을 호출하는 작업을 수행한다라고 설명할 것 같습니다.*
55
+ >
56
+ > *하지만 결과적으로 Input이 없기 때문에 Output과 View 모두 출력을 하고있어 **혼동 될 수 있다고 생각하고 합쳐야한다는 의견 또한 합당하다고 생각됩니다!***
57
+ >
58
+ > *그래서 합친 코드로 다시 푸시했습니다!"*
59
+
60
+ → **MCP 룰 `team-explanation-criteria-test`** ⭐⭐⭐ **신규 정점** — *다른 팀원에게 *어떤 코드를 넣어야할지 명확한 기준 설명 가능?* 시그널*. PR #97 (`code-judgment-criteria-test-fn-clarity`)·PR #134 (`abstract-vs-interface-criteria`) 결 합류 누적 3 PR — *판단 기준 어휘 정점*.
61
+
62
+ → **MCP 룰 `student-self-acknowledgment-opposing-view-validity`** ⭐⭐ — *학생 자가 *반대 의견도 합당하다* 자가 인정 어휘*. PR #150 (`accidental-vs-essential-duplication-distinction` reviewer 학생 의견 인정) 결의 *상호 의견 인정* 학생 측 다른 축.
63
+
64
+ ### 2. View loop 부적절 — 컬렉션 변경 시 View 변경 (Thread 1)
65
+
66
+ reviewer 2개 질문:
67
+
68
+ > *"names 에 대한 루프를 view 에서 진행하는 것이 적절할까요?"*
69
+ >
70
+ > *"names 의 컬렉션 타입이 바뀌면, View 에도 변경이 발생할 것 같아요."*
71
+
72
+ 학생 자가 답변: *"루프를 Controller로 뺐습니다! 그러므로 names 컬렉션도 사라졌습니다!"*
73
+
74
+ → **MCP 룰 `view-no-loop-collection-decoupling`** ⭐⭐⭐ 신규 — *View에서 컬렉션 루프 = 컬렉션 타입 변경 시 View 변경 시그널*. PR #30·#42 (View 책임 어휘) 결 합류 → ***View 책임 어휘 정점***.
75
+
76
+ ### 3. State 인터페이스 = 일반적 / 특정 상태 의존성 부적절 (Thread 5)
77
+
78
+ reviewer:
79
+
80
+ > *"State 는 상태에 대한 '일반적인' 기능을 명세해놓은 인터페이스인데, 특정 상태에 대한 의존성이 존재하는 것이 어색한 것 같아요."*
81
+
82
+ 학생 자가 답변: *"넵 toStay를 State에서 삭제하고 Player에서 구현해주었습니다."*
83
+
84
+ → **MCP 룰 `interface-no-concrete-dependency`** ⭐⭐⭐ 신규 — *인터페이스 = 일반 기능 / 특정 상태 의존성 X*. PR #150 (`abstract-class-knowing-concretes-anti-pattern`)·PR #154 (`state-pattern-no-if-type-check`) 결 합류 누적 3 PR — *추상↔구현체 분리 어휘 정점*.
85
+
86
+ ### 4. return lift up vs else 객체지향 생활체조 trade-off (Thread 3)
87
+
88
+ ```kotlin
89
+ // 변경 전 - else 회피
90
+ if (handOfCards.isBust()) return Bust(handOfCards)
91
+ return Stay(handOfCards)
92
+ ```
93
+
94
+ reviewer 제안:
95
+
96
+ ```kotlin
97
+ return if (handOfCards.isBust()) {
98
+ Bust(handOfCards)
99
+ } else {
100
+ Stay(handOfCards)
101
+ }
102
+ ```
103
+
104
+ reviewer:
105
+
106
+ > *"저는 개인적으로는 이런 형태의 구현을 더 선호하는데요, return 이 if 문 범위에 묶일 경우 논리 흐름을 다시 거슬러 올라가 생각할 필요가 적어지는 이점이 있습니다.*
107
+ >
108
+ > *현재 구현하신 구조는, return 이 연속으로 선언되어 있어서 Stay 를 리턴하는 경우는 뭐지? 라고 다시 생각하게 되더라구요 ㅎㅎ"*
109
+
110
+ 학생 자가 답변:
111
+
112
+ > *"return 조건문 형식으로 수정하였습니다! 저도 return을 lift하는 것이 더 가독성이 좋다고 생각됩니다.*
113
+ >
114
+ > *다만 **else를 지양하라는 객체지향 생활체조 원칙 때문에 이렇게 진행하였는데 해당 원칙은 자바를 기반으로 기술되어 코틀린에서는 예외가 있을 수 있다고 생각**됩니다!"*
115
+
116
+ → **MCP 룰 `return-lift-vs-else-tradeoff`** ⭐⭐⭐ 신규 — *객체지향 생활체조 else 회피 vs Kotlin lift return 가독성 trade-off*. PR #37 (`principle-as-guide-not-absolute`)·PR #134 (3 인스턴스 변수 원칙) 결 합류 → ***원칙 vs 본질 어휘 누적 5 PR*** 정점.
117
+
118
+ → **`java-based-principle-kotlin-exception`** ⭐⭐ — *자바 기반 원칙 = 코틀린 예외 가능 학생 자가 자가 정당화*.
119
+
120
+ ### 5. 확장함수 위치 — 부모 클래스 (Thread 2)
121
+
122
+ reviewer: *"양수/음수로 전환하는 확장함수를 제공해도 괜찮겠네요!"*
123
+
124
+ 학생 자가 답변:
125
+
126
+ > *"넵 감사합니다! 추가하였습니다! 다만 해당 확장함수를 선언할 위치가 고민되었는데 **결과값을 계산해야할 State들의 부모 클래스인 Finished 클래스에 추가**하였습니다!"*
127
+
128
+ → **`extension-fn-location-near-parent-class`** ⭐⭐ — *확장함수 위치 = 부모 클래스 (계층 정합)*. PR #42 (`mapper-top-level-declaration`) 결 합류.
129
+
130
+ ### 6. Casino + Persons 묶기 (Thread 4)
131
+
132
+ reviewer: *"리턴하는 모델을 다시 묶어주신 이유가 있을까요?"*
133
+
134
+ 학생 자가 답변: *"Casino에 Persons가 존재하여 굳이 두 번에 나눠서 보내줘야 할 필요가 없다고 느꼈습니다!"*
135
+
136
+ → **`return-bundling-via-existing-aggregate`** ⭐⭐ — *기존 집합 객체를 통한 리턴 묶기*. PR #38 (Pair vs data class) 결 합류.
137
+
138
+ ### 7. reviewer 마무리 — 의도 설명 칭찬
139
+
140
+ reviewer:
141
+
142
+ > *"각각 구현에 대한 의도를 상세하게 남겨주셔서, 같이 생각해볼 수 있는 기회가 되어 좋았습니다 :)"*
143
+
144
+ → **`reviewer-student-detailed-intent-acknowledgment`** ⭐⭐ — *학생 자가 의도 상세 설명 + reviewer 함께 생각하는 기회 인정*. PR #150 (`reviewer-student-passion-acknowledgment`) 결 합류 — *학생 답변 인정 어휘*.
145
+
146
+ ## 대표 인용
147
+
148
+ > [briandr97 PR 본문]
149
+ > *"m, v, c를 각자 다른 사람이 개발한다고 생각했을 때 도메인 개발자는 프린트 되는 시점을 알 필요가 없고 단순히 필요한 값들만 전달 받으면 된다고 생각했습니다."*
150
+
151
+ → **학생 자가 MVC 협업 시나리오 어휘 정점**.
152
+
153
+ > [briandr97 PR 본문]
154
+ > *"domain과 view는 Controller의 존재를 알지 못한다는 부분은 아직 잘 이해가 가지 않습니다."*
155
+
156
+ → **학생 자가 혼동 명시 어휘**.
157
+
158
+ > [vagabond95 Thread 0]
159
+ > *"다른 팀원이 개발을 진행할 때, XxxView 와 XxxOutput 에 어떤 코드를 넣어야할지 명확한 기준을 설명할 수 있을까요?"*
160
+
161
+ → **다른 팀원 설명 가능 기준 어휘 정점**.
162
+
163
+ > [briandr97 Thread 0]
164
+ > *"혼동 될 수 있다고 생각하고 합쳐야한다는 의견 또한 합당하다고 생각됩니다!"*
165
+
166
+ → **학생 자가 반대 의견 합당성 인정 어휘**.
167
+
168
+ > [briandr97 Thread 3]
169
+ > *"else를 지양하라는 객체지향 생활체조 원칙 때문에 이렇게 진행하였는데 해당 원칙은 자바를 기반으로 기술되어 코틀린에서는 예외가 있을 수 있다고 생각됩니다!"*
170
+
171
+ → **자바 기반 원칙 / 코틀린 예외 학생 자가 정당화 어휘**.
172
+
173
+ > [vagabond95 Thread 5]
174
+ > *"State 는 상태에 대한 '일반적인' 기능을 명세해놓은 인터페이스인데, 특정 상태에 대한 의존성이 존재하는 것이 어색한 것 같아요."*
175
+
176
+ → **인터페이스 일반 / 특정 의존성 부적절 어휘**.
177
+
178
+ ## 얻은 교훈 (보편)
179
+
180
+ 1. **MVC 1인 vs 다인 협업 시나리오 학생 자가 사고** — **MCP 룰 `mvc-collaboration-scenario-vocabulary` 후보** ⭐⭐⭐ 정점.
181
+ 2. **다른 팀원 설명 가능 기준** — **MCP 룰 `team-explanation-criteria-test` 후보** ⭐⭐⭐ 정점.
182
+ 3. **View 컬렉션 루프 = 변경 결합 시그널** — **MCP 룰 `view-no-loop-collection-decoupling` 후보** ⭐⭐⭐.
183
+ 4. **인터페이스 = 일반 / 특정 의존성 X** — **MCP 룰 `interface-no-concrete-dependency` 후보** ⭐⭐⭐.
184
+ 5. **객체지향 생활체조 else 회피 vs Kotlin lift return** — **MCP 룰 `return-lift-vs-else-tradeoff` 후보** ⭐⭐⭐. 원칙 vs 본질 누적 5 PR 정점.
185
+ 6. **수업 시간 학습 → 상태 패턴 적용** — **MCP 룰 `template-method-pattern-on-state` 후보** ⭐⭐.
186
+ 7. **확장함수 위치 = 부모 클래스 (계층 정합)** — **MCP 룰 `extension-fn-location-near-parent-class` 후보** ⭐⭐.
187
+
188
+ ## 메타 노트
189
+
190
+ - **briandr97 양 단계 완성 (1단계 #19 → 2단계 #59)**.
191
+ - **vagabond95 reviewer 어휘** — *다른 팀원 설명 가능 기준* 시그니처 (PR #101 결).
192
+ - **학생 자가 시나리오 사고 어휘 정점** — MVC 1인 vs 다인 협업 시뮬레이션 + 수업 시간 학습 자가 적용.
193
+ - **원칙 vs 본질 누적 5 PR** (PR #38 + #62 + #43 + #37 + #59) — *단일 답 거부 어휘 정점*.
@@ -0,0 +1,175 @@
1
+ # PR #70 — [블랙잭 1단계] 채채 미션
2
+
3
+ - **Reviewee:** [@chaehyuns](https://github.com/chaehyuns)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/70
5
+ - **단계:** 1단계
6
+ - **리뷰어:** @Gyuil-Hwnag (두루)
7
+ - **라인 코멘트:** 26 스레드 — *짧지만 핵심 진단 + 학생 자가 학습 풍부* (양 단계 분석된 reviewee — 2단계 #98 별도)
8
+
9
+ ## 잘한 점 (설계 관점)
10
+
11
+ - **`ShuffleCardMachine` 전략 + `CardMachineManager` 자가 토론** — 학생 자가 답변: *"처음엔 ShuffleCardMachine을 부 생성자 혹은 주 생성자를 받아서 CardMachine을 관리하려 했습니다. 하지만 ShuffleCardMachine은 각 객체에서 다른 state를 가지지 않기 때문에 object로 관리를 하는게 맞다는 생각이 들어 CardMachineManager을 만들었습니다."* — *상태 없음 → object 자가 학습*. PR #146·#108·#133 와 같은 결.
12
+ - **방어적 복사 자가 적용** — 두루 칭찬: *"방어적 복사의 활용 좋습니다~👍"*. PR #108·#132·#133·#85·#58·#137·#148 와 같은 결.
13
+ - **Dealer 입장에서 추가 카드 비교 → Card 책임 이전 자가 반영** — 두루 진단 *"해당 내용을 Card 에서 던지도록 하는 것은 어떤가 하는 생각이 듭니다!"* + 학생 자가 답변: *"Card 에서 던지는 게 더 올바른 사용인거 같습니다! 감사합니다!"*. *Tell-Don't-Ask 자가 학습*. PR #124·#108·#128·#135·#114·#125 와 같은 결.
14
+ - **추상 클래스 `GameParticipant` 활용** — 두루 칭찬: *"중복을 줄여주기 위한 추상 클래스의 사용 좋습니다~👍"*.
15
+ - **Validation Check 일급 컬렉션** — 두루 칭찬 (중복 제거 권고 + 자가 반영).
16
+ - **Card.toString 오버라이딩** — 두루 칭찬: *"Card 객체의 toString() 오버라이딩하여 적용한 내용 좋네요~👍"*. PR #88·#137·#90·#146 와 같은 결.
17
+ - **테스트 코드 깔끔성** — 두루 칭찬.
18
+ - **`maxOrNull` vs `max()` 명시적 타입 자가 학습** — 두루 진단 *"네이밍만 본다고 Int 로 리턴값이 예상되어 사용하였는데, 실제로 topScore() 메서들 사용시 빨간줄로 되어 있어 살펴보니 Kotlin 에서는 max(): Int? 되어 있었습니다. 현재 코틀린 버전에서는 혼돈을 줄이고자 maxOrNull()로 이름이 변경되어서, 위에서 처럼 혼란을 피하고 위하여 멤버 변수와 리턴 타입을 명시해보는 것도 추후 다른 사람들이 봤을 때 직관적으로 코드를 이해하는데 큰 도움이 될 것 같긴 합니다~"*. **Kotlin 어휘 (max → maxOrNull 변경 + 명시 타입) 자가 학습 모범**.
19
+ - **HandCards 가독성 자가 반영** — 두루 권고 *"baseScore + ANOTHER_CARD_SCORE 를 하나의 변수로 만들어 두고 사용하는 것도 가독성 측면에서 조금이라도 좋아질 수 있을 것 같다는 생각도 듭니다!!"* + 학생: *"ACE 카드 넘버에 10을 더해야한다는 것에 초점을 맞추다 보니 가독성을 잃은 거 같습니다."*.
20
+ - **`isCanAddCard` Controller 책임으로 이전** — 두루 진단 *"controller 에서도 충분히 처리가 가능한 내용을 Player까지 끌고 온것은 아닌가? 라는 생각이 들기도 합니다🥲"* + 학생: *"controller에서 처리하는 것이 더 깔끔하고 직관적으로 이해가 될 수 있고 추상클레스에 addCard를 하도록 바꿀 수 있다는 판단이 드네요!"*. *Tell-Don't-Ask 의 반대 트레이드오프* (도메인 → controller 이전).
21
+
22
+ ## 못한 점 (설계 관점)
23
+
24
+ ### 1. `mutable machine` 외부 변경 가능성 자가 반영
25
+
26
+ 두루 진단: *"해당 machine을 mutable 하게 지정하고 외부에서 변경이 가능하도록 작성하신 이유가 있을까요?? 부 생성자로 CardMachine를 받아서 객체 인스턴스를 생성하는 방법도 있을 것 같은데, 이렇게 지정하신 이유가 궁금합니다!🤔"*
27
+
28
+ 학생 자가 답변: *"지금 다시 보니 mutable하게 지정할 이유는 하나도 없었네요! 감사합니다!"*
29
+
30
+ → **외부 변경 가능성 = 캡슐화 부재**. *val + 생성자 주입* 정공. PR #58·#85·#108·#132·#133 와 같은 결.
31
+
32
+ ### 2. `cards` 지연 초기화 권고
33
+
34
+ 두루: *"수정이 반드시 필요한 내용은 아니며, 해당 내용은 cards 를 지연초기화 하여 인스턴스를 생성해두도록 수정해볼 수도 있을 것 같다는 생각이 듭니다!"*
35
+
36
+ 학생 자가 답변: *"리소스 사용을 최적화하고, 객체의 초기화 시점을 실제 사용 시점으로 늦춰 성능을 향상시키는 등 지연 초기화에 대한 이점을 찾아보게 되었습니다😊"*
37
+
38
+ → **`by lazy` Kotlin 어휘 학습**. PR #85·#137 와 같은 결.
39
+
40
+ ### 3. 추상클래스 생성자 제약 자가 학습
41
+
42
+ 두루: *"중복을 줄여주기 위한 추상 클래스의 사용 좋습니다~👍 추상클래스에서 생성자를 지정함으로 인하여 여러가지 제약이 생길텐데, 이부분은 고민해봐도 좋을 것 같다는 생각이 듭니다!!"*
43
+
44
+ 학생 자가 답변: *"추상클래스의 이점만을 생각하지 않고 제약에 대한 사항은 잊고 있었는데 다시 한번 리마인드 시켜주셔서 감사합니다!"*
45
+
46
+ → **추상 클래스 + 생성자 = 자식 모두 동일 생성자 강제 + 다중 상속 X**. *interface = 다중 구현 + 생성자 X*. PR #74·#108·#133·#137 와 같은 결.
47
+
48
+ ### 4. `HandCards.score 계산 책임` 의문 진단
49
+
50
+ 두루: *"Card의 점수를 계산하는 것이 HandCards에서 맡아서 해야 하는 책임일지 고민해봐도 좋을 것 같습니다~"*
51
+
52
+ 학생: *"객체의 책임을 어디서 맡아야 하는지가 정말 어렵군요! 다시 한번 고민해보겠습니다!"*
53
+
54
+ → **점수 계산 책임 위치 트레이드오프**. *HandCards (카드 묶음) vs Score (별도 객체) vs Card (자기 점수)*. PR #131·#136·#146·#147 와 같은 결.
55
+
56
+ ### 5. `Dealer 가 결과 판단 책임 = 너무 큰 책임?` 학생 자가 토론
57
+
58
+ 학생 자가 답변: *"Dealer에 대한 책임이 너무 큰가 하는 의문이 저도 들었습니다! 하지만 딜러가 아니라면 어떤 객체가 이 일을 수행해야하는지에 대한 고민을 하다보니 심판 객체를 만드는 것 또는 어떤 결과 계산기를 만드는 것이 살짝 어색하다는? (너무 현실 세계에 투영해서 보고 있는 걸까요?) 하는 의문이 들었습니다! 혹시 두루의 생각은 어떠신가요? 😥"*
59
+
60
+ 두루 답변: *"딜러에서도 해당 판별을 가져도 되기는 하지만, 억지스럽기는 하지만 만약 요구사항이 `딜러도 플레이어가 될 수 있으며, 플레이어도 딜러가 될 수 있다. 이는 곧 딜러 vs 딜러의 대결도 가능해지며, 플레이어 vs 플레이어의 대결도 가능해진다`라는 조건이 생기게 된다면, 플레이어 vs 플레이어의 경우 점수 계산을 어떻게 할 수 있을것인가??라는 내용에 부딪힐 것 같다는 생각이 듭니다🤔 추후 요구사항의 변경등에 대해서도 유연하게 대처할 수 있도록 만들면 리팩토링을 하고 기능을 추가할 때도 좀 더 유연해지지 않을까 라는 생각이 듭니다~"*
61
+
62
+ → **현실 메타포 (Dealer 판단) vs 확장성 (Participant vs Participant) 트레이드오프**. *PR #74 (알송, 말리빈) 의 Referee 자가 토론* / *PR #148·#151·#49·#132 의 참가자 vs 참가자 일반화* 와 같은 결.
63
+
64
+ ### 6. `Dealer 룰 = 변경 시 GameParticipant + 본 객체 모두 수정` 위험
65
+
66
+ 두루: *"해당 내용은 추후 조건이 바뀌게 되었을 때, GameParticipant 뿐만 아니라 해당 내용도 수정이 되어야 할 수도 있다는 생각이 드네요🤔"*
67
+
68
+ → **룰 분산 = 변경 파급**. *단일 진입점 (Dealer 자기 메서드)*이 정공.
69
+
70
+ ### 7. `Players` 중복 검증 + 팩토리 검증 중복
71
+
72
+ 두루: *"Validation Check 좋습니다~👍 다만 밑에 팩토리 함수에서 Check를 한 내용이 중복되어 들어가있는 것 같습니다🥲"*
73
+
74
+ 학생: *"허걱 그렇군요! 중복된 로직은 삭제하겠습니다!"*
75
+
76
+ → **검증 중복 = init + factory 양쪽 = 코드 중복 + 변경 파급**. PR #58 와 같은 결.
77
+
78
+ ### 8. `OutputView` 메시지 상수화 권고
79
+
80
+ 두루: *"문구가 바뀌었을 때 한곳에서 수정이 가능하다는 이점도 있어서 메시지들을 상수값으로 관리해보는 것도 고민해보면 좋을 것 같습니다!!"*
81
+
82
+ → **메시지 상수화 = 변경 시 한 곳 수정**.
83
+
84
+ ### 9. `IsAddCardInputView` Format 권고
85
+
86
+ 두루: *"수정이 필요한 것은 아니며, 해당 내용은 Format을 사용해서 해당 값들을 관리해볼 수도 있겠네요!"*
87
+
88
+ → **`String.format` Kotlin 어휘 활용**.
89
+
90
+ ### 10. `HandCards.cards` toString 사용 권고
91
+
92
+ 두루: *"해당 내용은 Cards의 toString을 이용하도록 수정을 해보는 것도 좋을 것 같다는 생각이 듭니다~"*
93
+
94
+ → **`toString` 활용 = Card 자기 표현**. PR #88·#137·#90·#146 와 같은 결.
95
+
96
+ ### 11. 테스트 함수명 자가 학습 권고
97
+
98
+ 두루 권고 + 예시:
99
+ ```kotlin
100
+ @Test
101
+ fun `자동차가 1칸 이동하면 거리는 1이다`() {
102
+ // given / when / result
103
+ }
104
+ ```
105
+
106
+ 학생: *"네이밍에 대한 고민을 더해보겠습니다!"*
107
+
108
+ → **테스트 함수명 = 기능 명세 + given/when/result 주석 분리**. PR #41·#90·#133·#136·#137 와 같은 결.
109
+
110
+ ### 12. `Players` 하드코딩 상수화
111
+
112
+ 두루: *"해당 하드 코딩된 내용도 상수화를 해보는 것도 좋을 수도 있겠다는 생각이 듭니다!💪"*
113
+
114
+ → **하드코딩 매직넘버 → 상수화**. PR #53·#75·#114·#146 와 같은 결.
115
+
116
+ ## 리뷰어 의견 요지
117
+
118
+ - **mutable 외부 변경 = 캡슐화 부재** — *val + 생성자 주입*.
119
+ - **지연 초기화 (`by lazy`) = 리소스 최적화**.
120
+ - **추상클래스 생성자 = 자식 모두 동일 생성자 강제 + 다중 상속 X**.
121
+ - **카드 책임 = Card 자기 메시지** — *Tell-Don't-Ask*.
122
+ - **현실 메타포 (Dealer 판단) vs 확장성 (Participant vs Participant)** — *현실 메타포 정공 + 확장성 미래 가능성*.
123
+ - **메시지 상수화 + format 활용**.
124
+ - **toString = Card 자기 표현**.
125
+ - **테스트 함수명 = 기능 명세 + given/when/result**.
126
+ - **하드코딩 → 상수화**.
127
+
128
+ ## 대표 인용
129
+
130
+ **두루 (확장성 = 참가자 vs 참가자 추상화, Dealer.kt):**
131
+ > 딜러에서도 해당 판별을 가져도 되기는 하지만, 억지스럽기는 하지만 만약 요구사항이 `딜러도 플레이어가 될 수 있으며, 플레이어도 딜러가 될 수 있다. 이는 곧 딜러 vs 딜러의 대결도 가능해지며, 플레이어 vs 플레이어의 대결도 가능해진다`라는 조건이 생기게 된다면, 플레이어 vs 플레이어의 경우 점수 계산을 어떻게 할 수 있을것인가??라는 내용에 부딪힐 것 같다는 생각이 듭니다🤔
132
+
133
+ **두루 (max → maxOrNull Kotlin 어휘 변경, Deck.kt):**
134
+ > 개인적으로 멤버 변수와 메서드의 리턴 타입을 모두 명시해주는데, 이는 타입을 직관적으로 알기 위하여 사용하는 것도 좋다고 생각이 들긴 합니다!
135
+ >
136
+ > 예를 들어 아래와 같은 코드가 있다고 하였을 때, 네이밍만 본다고 Int 로 리턴값이 예상되어 사용하였는데, 실제로 topScore() 메서들 사용시 빨간줄로 되어 있어 살펴보니 Kotlin 에서는 max(): Int? 되어 있었습니다
137
+ > ```
138
+ > fun topScore() = counts.max()
139
+ > ```
140
+ > 현재 코틀린 버전에서는 혼돈을 줄이고자 maxOrNull()로 이름이 변경되어서, 위에서 처럼 혼란을 피하고 위하여 멤버 변수와 리턴 타입을 명시해보는 것도 추후 다른 사람들이 봤을 때 직관적으로 코드를 이해하는데 큰 도움이 될 것 같긴 합니다~
141
+
142
+ **두루 (책임 분산 변경 파급 위험, Dealer.kt:28):**
143
+ > 해당 내용은 추후 조건이 바뀌게 되었을 때, GameParticipant 뿐만 아니라 해당 내용도 수정이 되어야 할 수도 있다는 생각이 드네요🤔
144
+
145
+ **학생 자가 학습 (현실 메타포 vs 확장성 의문, Dealer.kt):**
146
+ > Dealer에 대한 책임이 너무 큰가 하는 의문이 저도 들었습니다! 하지만 딜러가 아니라면 어떤 객체가 이 일을 수행해야하는지에 대한 고민을 하다보니 심판 객체를 만드는 것 또는 어떤 결과 계산기를 만드는 것이 살짝 어색하다는? (너무 현실 세계에 투영해서 보고 있는 걸까요?) 하는 의문이 들었습니다!
147
+
148
+ **학생 자가 학습 (지연 초기화 학습, Deck.kt:8):**
149
+ > 리소스 사용을 최적화하고, 객체의 초기화 시점을 실제 사용 시점으로 늦춰 성능을 향상시키는 등 지연 초기화에 대한 이점을 찾아보게 되었습니다 😊
150
+
151
+ ## 얻은 교훈
152
+
153
+ 1. ***mutable 외부 변경 가능성 = 캡슐화 부재***. *val + 생성자 주입 정공*. *학생 자가 인식*. PR #58·#85·#108·#132·#133 와 같은 결.
154
+
155
+ 2. ***Kotlin `max() → maxOrNull()` 변경 = 명시 타입 권고***. *반환 타입 모호 시 코드 이해 ↓*. *명시적 타입 = 다른 개발자 친화*. PR #108 (Effective Kotlin Item 4/14) 와 같은 결.
156
+
157
+ 3. ***책임 분산 = 변경 파급 위험*** — *Dealer 룰이 GameParticipant + 본 객체 두 곳* = *조건 변경 시 양쪽 수정*. *단일 진입점*이 정공.
158
+
159
+ 4. ***현실 메타포 (Dealer 판단) vs 확장성 (참가자 vs 참가자)*** = *두루 명시*. *PR #74 (알송) 의 Referee 자가 토론* / *PR #148·#151·#49·#132 의 참가자 vs 참가자 일반화* 와 같은 결.
160
+
161
+ 5. ***`by lazy` Kotlin 지연 초기화 어휘*** — *리소스 최적화 + 사용 시점 초기화*. PR #85·#137 와 같은 결.
162
+
163
+ 6. ***추상클래스 + 생성자 = 자식 모두 동일 생성자 강제 + 다중 상속 X***. *interface = 다중 구현 + 생성자 X*. *말리빈/두루/페로로 공통 진단*. PR #74·#108·#133·#137 와 같은 결.
164
+
165
+ 7. ***검증 중복 (init + factory) = 코드 중복 + 변경 파급***. *한 곳 검증*. PR #58 와 같은 결.
166
+
167
+ 8. ***메시지 상수화 + `String.format` Kotlin 어휘 활용***.
168
+
169
+ 9. ***`toString` = 도메인 객체 자기 표현 (View 호환)***. PR #88·#137·#90·#146 와 같은 결.
170
+
171
+ 10. ***테스트 함수명 = 기능 명세 + given/when/result 주석 분리***. PR #41·#90·#133·#136·#137 와 같은 결.
172
+
173
+ 11. ***현실 메타포 자가 인식 ("너무 현실 세계에 투영해서 보고 있는 걸까요?") = 양방향 학습 모범***. *학생 자가 의문 + reviewer 미래 시나리오 제시*. PR #74·#137·#148·#151 와 같은 결.
174
+
175
+ 12. ***`isCanAddCard` Controller 책임 이전 = Tell-Don't-Ask 반대 트레이드오프***. *Player 책임 vs Controller 책임* 의 *경계 자가 학습*.