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,230 @@
1
+ # PR #62 — [블랙잭] 해음 1단계 미션
2
+
3
+ - **Reviewee:** [@haeum808](https://github.com/haeum808) (해음) — 안드로이드 6기 코호트
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/62
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@ghojeong](https://github.com/ghojeong) (파이로)
7
+ - **라인 코멘트:** 10 스레드 — *학생 자가 답변 9 thread + PR 본문 자가 질문 (calculated property vs 메서드) / 함수형 프로그래밍 어휘 정점 (index loop = LISP 절차지향 / map·filter·reduce 3종 / Lazy Evaluation / Higher Order Function) + reviewer *강한 피드백 자가 수정* 메타 + 학생 Slack DM 자가 학습 메타 + Mutable 팀 정책 단일 답 X*
8
+ - **신규 reviewee** (안드로이드 6기 코호트).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 질문 — calculated property vs 메서드
13
+
14
+ PR 본문:
15
+
16
+ ```kotlin
17
+ // 현재 사용
18
+ val total: Int
19
+ get() = cards.sumOf { it.value }
20
+
21
+ // 후보
22
+ fun calculateTotal(): Int {
23
+ return cards.sumOf { it.value }
24
+ }
25
+ ```
26
+
27
+ > *"위와 같이 GameInfo 클래스 안에서 calculated 프로퍼티인 total를 사용할 수도 있고 calculateTotal처럼 메서드로 만들 수도 있다고 생각합니다. **그런데 가독성이 더 좋고 복잡한 로직이 아니라 total을 사용했습니다. 이렇게 코드를 작성해도 괜찮을까요?**"*
28
+
29
+ → **MCP 룰 `pr-body-property-vs-method-question`** ⭐⭐ 신규 — *계산 프로퍼티 vs 메서드 학생 자가 의문 명시*. PR #30·#144 결의 *PR 본문 자가 질문* 다른 축.
30
+
31
+ ### 2. Higher Order Function 추상화 칭찬 (Thread 6)
32
+
33
+ reviewer:
34
+
35
+ > *"특히 마음에 들었떤 부분은 Dealer 와 Player 를 Participant 라는 인터페이스로 추상화 하고, generateCard 와 printCards 를 **Higher Order Function** 으로 추상화를 해주셨다는 부분입니다. 👍 💯*
36
+ >
37
+ > *옛날에 interface 나 class 상속 문법이 지원되지 않는 언어로 개발을 하다가, 사수분이 추상화를 해주세요 라고 피드백을 해주셔서 멘붕을 했던 과거가 제게 있습니다. **그런 상황에서는 HIgher Order Function 만으로도 굉장히 많은 추상화를 할 수 있었다**고, 제 개인 에피소드를 공유해봅니다."*
38
+
39
+ → **MCP 룰 `higher-order-function-as-abstraction-alternative`** ⭐⭐⭐ 신규 — *상속 X / interface X 환경에서 HOF로 추상화*.
40
+
41
+ → **`reviewer-personal-episode-vocabulary`** ⭐⭐ — *reviewer 본인 사수 멘붕 에피소드 공유 — 어휘 정당화*.
42
+
43
+ ### 3. `LOW_ACE` / `HIGH_ACE` data class 분리 — "천재적 아이디어" (Thread 7)
44
+
45
+ ```kotlin
46
+ data class Card(val number: CardNumber, val value: Int)
47
+ data class CardValue(val value: Int)
48
+ ```
49
+
50
+ reviewer:
51
+
52
+ > *"static 팩토리 외에 아무런 로직이 없는 class 를 data class 로 선언해 주신 점 마음에 듭니다. 👍 특히 Card 와 CardValue 2개로 data class 를 분리해주셔서, **LOW_ACE 인 경우와 HIGH_ACE 인 경우를 동일한 Card data class 로 표현할 수 있도록 한 점이 정말 천재적인 아이디어 같습니다.** 👍 💯"*
53
+
54
+ → **MCP 룰 `ace-as-low-high-data-class-pattern`** ⭐⭐ 신규 도메인 특수 — *Ace 1↔11 양가성을 LOW_ACE/HIGH_ACE 데이터 분리로 표현*. 블랙잭 도메인 룰 정확성.
55
+
56
+ ### 4. `playRound` 깔끔 칭찬 (Thread 5)
57
+
58
+ reviewer:
59
+
60
+ > *"제가 forEach 가 절차지향적이라고 말은 했지만, 제가 forEach 문법을 금지하려 한 것은 아닙니다. Haskell 과 같은 순수함수형 언어에서도 결국 순수해지지 못하는 순간이 있는데, 바로 **interrupt 가 필요한 순간**입니다. read 와 print 는 대표적인 시스템 IO 인터럽트이고, 인터럽트의 반복에는 이처럼 forEach 를 활용할 수 밖에 없습니다. playRound 매우 깔끔하게 잘 구현해주신 것 같아서 그에 대한 칭찬을 해봅니다. 👍"*
61
+
62
+ → **MCP 룰 `interrupt-as-functional-impurity-justification`** ⭐⭐ 신규 — *시스템 IO 인터럽트 = 함수형 한계 + forEach 정당*.
63
+
64
+ ## 못한 점 (설계 관점)
65
+
66
+ ### 1. index loop = 절차지향 + LISP / Lazy Evaluation 어휘 (Thread 1) — 정점
67
+
68
+ ```kotlin
69
+ for (i in 0 until players.size) { players[i]... }
70
+ ```
71
+
72
+ reviewer:
73
+
74
+ > *"size 크기를 통한 index 가 사용된 반복문이 있다면, **굉장히 절차지향적인 코드를 짜고 있지는 않나 의심해 볼 필요가 있습니다.***
75
+ >
76
+ > *절차지향이 나쁘다는 의미는 아닙니다. 하지만 **index 를 통한 Element 의 접근은 가상메모리와 1대1 대응이 되는 \"Array\" 를 위한 문법이지, \"List\" 를 위한 문법은 아닙니다.***
77
+ >
78
+ > ***[List 는 LISP](https://www.tutorialspoint.com/lisp/lisp_lists.htm) 라는 프로그래밍 언어에서 중요하게 도입되었던 개념인데, 전통적으로 List 는 single linked list 를 뜻합니다. 즉 index 가 5라면 List 에서 5개의 node 를 루프를 돌아서 건너뛰어야 한다는 것을 의미합니다.***
79
+ >
80
+ > *요즘은 메모리가 부족한일이 없어서 HashMap 형태로 최적화가 되어있지만, 만약 함수형 프로그래밍을 연습하고자 한다면, **index 를 사용하지 않도록 연습하시는게 좋습니다. 왜냐하면 이러한 연습이 Lazy Evaluation 이라는 함수형 프로그래밍의 특성을 익히는데 큰 도움이 되기 때문**입니다."*
81
+
82
+ 학생 자가 답변:
83
+
84
+ > *"HashMap으로 최적화되어 있는지 처음 알았습니다. 감사합니다. Lazy Evalutation을 사용하기 위해 Sequence를 활용하겠습니다."*
85
+
86
+ reviewer 정정:
87
+
88
+ > *"엄밀히 이야기 하면 JVM 은 ArrayList 로 최적화가 됩니다. 하지만 코틀린은 자바스크립트로 컴파일도 가능하므로, 넓은 의미에서 해시맵이라고 표현하였습니다."*
89
+
90
+ 학생: *"List로 초기화하면 MutableList가 불리고 MutableList에서 ArrayList에 값을 넣는 방식이라는 것을 배우게 됐습니다. 감사합니다!"*
91
+
92
+ → **MCP 룰 `index-loop-as-procedural-signal`** ⭐⭐⭐ **신규 정점** — *index loop = 절차지향 시그널 + LISP single linked list + JVM ArrayList vs HashMap 어휘 + Lazy Evaluation 함수형 특성*.
93
+
94
+ → **MCP 룰 `kotlin-sequence-as-lazy-evaluation`** ⭐⭐ — *Sequence = Lazy Evaluation 어휘*.
95
+
96
+ ### 2. forEach = 절차지향 시그널 + reviewer 강한 피드백 자가 수정 (Thread 2) — 정점
97
+
98
+ reviewer 초기:
99
+
100
+ > *"마찬가지로 forEach 문법이 사용되고 있다면, 내가 절차지향적으로 사고하고 있지는 않나 의심해볼 필요가 있습니다. **함수형으로 코딩한다면 대부분의 상황은 map, filter, reduce 3가지로 전부 해결할 수 있다고 생각하셔도 좋습니다.** 가령 저는 위의 코드만 보고서, 실제 내부 model 의 코드를 보지 않았음에도, 저는 함수형에서 제일 중요한 특성 중 하나인 \"불변\" 이 깨졌다는 것을 바로 알 수 있었습니다."*
101
+
102
+ 학생 자가 답변:
103
+
104
+ > *"이 부분도 Players로 위치를 변경하여 Contrlloer에서 비즈니스로직을 없애주었습니다. **궁금한점이 forEach를 도메인 로직에서 쓰면 절차지향적이 아니게 될 수 있는지 궁금합니다!**"*
105
+
106
+ reviewer:
107
+
108
+ > *"그건 아닙니다. 절차지향은 절차지향입니다. **만약 루프를 돌면서 상태(멤버)값을 변경한다면 그것은 매우 전통적인 튜링머신에서의 절차지향적 프로그래밍 방법입니다.** 다만 로직을 도메인 영역으로 옮겨주었으므로, 테스트나 유지보수 관점에서 매우 좋은 리팩토링을 해주셨다고 생각합니다."*
109
+
110
+ 학생: *"감사합니다! 절차지향적인 것과 절차지향적이지 않은 것을 구별할 능력을 키워보겠습니다. for문을 제거하고 함수지향적으로 작성하겠습니다."*
111
+
112
+ reviewer **자가 수정 정점**:
113
+
114
+ > *"@haeum808 *
115
+ >
116
+ > ***헉! for 문을 제거하라는 피드백이 절대 아니었습니다. 절차지향이 나쁜 게 아니라고 고정관념을 깨고 싶어서 말씀드렸습니다.** 저는 지금 모양도 충분히 예쁘다고 생각합니다. **함수형으로도 할 수 있다 이지, 함수형으로 꼭 해달라는 피드백이 아니었습니다.***
117
+ >
118
+ > *다시 강조하지만 저는 객체설계 예쁘게 무척 잘해주셨다고 생각합니다."*
119
+
120
+ reviewer 추가:
121
+
122
+ > *"오히려 저는 지금 리팩토링이 해음이 생각하기에 만족스럽다면, step2 로 넘어갈 수 있도록 머지시켜드리고 싶습니다."*
123
+
124
+ → **MCP 룰 `reviewer-self-correction-on-strong-feedback`** ⭐⭐⭐ **신규 정점** — *reviewer 강한 피드백 → 학생 자가 잘못 이해 → reviewer *자가 수정 + 강요 X 명시***. PR #115 (laco-dev *쎄게 양해*)·PR #73 (`reviewer-don't-be-swayed`)·PR #106 (말리빈 *권력 자제*) 결의 *reviewer 권력 자제* 어휘 누적 4 PR → ***reviewer 자가 강요 회피 어휘 정점*** ⭐⭐⭐.
125
+
126
+ → **MCP 룰 `foreach-as-procedural-signal-but-not-forbidden`** ⭐⭐⭐ — *forEach = 절차지향 시그널 / 금지 X*. PR #73 (`is-operator-polymorphism-avoidance`) 결 합류.
127
+
128
+ → **MCP 룰 `map-filter-reduce-as-functional-toolkit`** ⭐⭐⭐ — *함수형 3 도구 어휘 정점*.
129
+
130
+ → **MCP 룰 `state-mutation-in-loop-as-procedural-signal`** ⭐⭐⭐ — *루프 + 상태 변경 = 튜링머신 절차지향*.
131
+
132
+ ### 3. Mutable 팀 정책 단일 답 X + 변경 메서드 전체 테스트 (Thread 3·4·9)
133
+
134
+ reviewer:
135
+
136
+ > *"어디까지 불변을 강제하고, Mutable 을 허용해줄까는 **개발팀마다 다릅니다.** 정말 철저하게 함수형 프로그래밍을 추구하는 곳에서는, 데이터단방향 구조를 위해 model 혹은 domain 에서 모든 종류의 Mutable 을 허용하지 않습니다.*
137
+ >
138
+ > *하지만 저는 그보다는 좀더 느슨한 기준을 가져가려합니다. 왜냐하면 **코틀린은 철저한 함수형 프로그래밍 언어로 설계된 언어가 아니기 때문입니다.** 만약 Mutable 한 멤버가 있다면, **해당 멤버를 변경할 수 있는 모든 메서드에 대해서 테스트 코드를 작성해주시면 됩니다.**"*
139
+
140
+ reviewer (Thread 4·9):
141
+
142
+ > *"gameInfo 에서 addCard 를 할 때, 단순히 카드의 개수만 테스트하는게 아니라, **실제로 카드 추가후 cards 의 값이 어떻게 바뀌었는지 전부 테스트해주시기 바랍니다.**"*
143
+
144
+ > *"불변을 깨트리는 모든 종류의 함수에 대해서, 함수 호출 후 값이 어떻게 바뀌었는지 더 자세하게 테스트 작성 부탁드립니다. 가령 여기서도 **단순히 size 값이 아니라 실제 내부 Card 가 무엇무엇을 갖게 되었는지 테스트를 통해 알 수 있으면 좋겠습니다.**"*
145
+
146
+ → **MCP 룰 `mutable-team-policy-no-single-answer`** ⭐⭐⭐ **신규** — *불변/Mutable 허용 = 팀마다 다름 (단일 답 X)*. PR #38 (`exception-handling-location-no-right-answer`) 결 합류 → ***단일 답 거부 어휘 누적 2 PR***.
147
+
148
+ → **MCP 룰 `mutable-member-comprehensive-state-test`** ⭐⭐⭐ — *Mutable 멤버 변경 메서드 = 모든 메서드 + 내부 값 전체 테스트 (size X)*.
149
+
150
+ ### 4. CardValue 원시값 포장 (Thread 8)
151
+
152
+ ```kotlin
153
+ // 변경 전
154
+ cardValue.value == LOW_ACE_VALUE && total <= MAXIMUM_HIGH_ACE_THRESHOLD
155
+ ```
156
+
157
+ reviewer: *"다만 Card 에서 `val value: Int` 라고 int 원시값을 가지고, 상수값과 ONE 을 긴 로직으로 직접 비교하는 것은 좀더 포장될 필요가 있지 않을까 하는 생각을 했습니다."*
158
+
159
+ 학생 자가 답변:
160
+
161
+ > *"좋은 것 같습니다. 그런데 LOW_ACE와 HIGH_ACE를 추가하면 CardDeck에 두 개가 들어가서 GameInfo에서 합을 계산하는 로직으로 변경했습니다."*
162
+
163
+ → **원시값 포장 + 학생 자가 도메인 룰 발견** = 누적 다수.
164
+
165
+ ### 5. JVM jvmTarget 설정 (Thread 0)
166
+
167
+ reviewer: *"이미 KotlinComplie 에서 jvmTarget 을 17로 명시하고 있음에도, JavaCompile 을 한번 더 명시한 이유가 있나요?"*
168
+
169
+ 학생 자가 답변:
170
+
171
+ > *"자바 타겟 버전이 21로 설정되어 있어서 clean test 명령어를 실행시 오류가 발생했습니다. 자바 타겟을 17로 변경하여 위 코드를 삭제했습니다."*
172
+
173
+ → **JVM 설정 = 환경 의존 오류** ⭐ — Gradle 어휘.
174
+
175
+ ## 대표 인용
176
+
177
+ > [ghojeong Thread 1]
178
+ > *"index 를 통한 Element 의 접근은 가상메모리와 1대1 대응이 되는 \"Array\" 를 위한 문법이지, \"List\" 를 위한 문법은 아닙니다."*
179
+
180
+ → **index loop = Array 문법 / List 부적합 어휘**.
181
+
182
+ > [ghojeong Thread 1]
183
+ > *"List 는 LISP 라는 프로그래밍 언어에서 중요하게 도입되었던 개념인데, 전통적으로 List 는 single linked list 를 뜻합니다."*
184
+
185
+ → **LISP single linked list 어휘**.
186
+
187
+ > [ghojeong Thread 2]
188
+ > *"함수형으로 코딩한다면 대부분의 상황은 map, filter, reduce 3가지로 전부 해결할 수 있다고 생각하셔도 좋습니다."*
189
+
190
+ → **함수형 3 도구 어휘 정점**.
191
+
192
+ > [ghojeong Thread 2 자가 수정]
193
+ > *"헉! for 문을 제거하라는 피드백이 절대 아니었습니다. 절차지향이 나쁜 게 아니라고 고정관념을 깨고 싶어서 말씀드렸습니다. 함수형으로도 할 수 있다 이지, 함수형으로 꼭 해달라는 피드백이 아니었습니다."*
194
+
195
+ → **reviewer 강한 피드백 자가 수정 어휘 정점**.
196
+
197
+ > [ghojeong Thread 3]
198
+ > *"어디까지 불변을 강제하고, Mutable 을 허용해줄까는 개발팀마다 다릅니다."*
199
+
200
+ → **단일 답 거부 어휘**.
201
+
202
+ > [ghojeong Thread 6]
203
+ > *"옛날에 interface 나 class 상속 문법이 지원되지 않는 언어로 개발을 하다가, 사수분이 추상화를 해주세요 라고 피드백을 해주셔서 멘붕을 했던 과거가 제게 있습니다. 그런 상황에서는 HIgher Order Function 만으로도 굉장히 많은 추상화를 할 수 있었다고, 제 개인 에피소드를 공유해봅니다."*
204
+
205
+ → **reviewer 개인 에피소드 어휘**.
206
+
207
+ > [ghojeong 최종 review]
208
+ > *"불변성 관련해서 Slack DM 으로 핵심적인 포인트를 짚어주셔서 굉장히 놀랐습니다. reduce, map, filter를 잘 활용하고 불변성을 생각하면서 step2 에서 함수형프로그래밍에 다시 도전하겠습니다고 Slack DM 으로 말씀주셨는데, 기대하겠습니다!"*
209
+
210
+ → **학생 Slack DM 자가 학습 메타 어휘**.
211
+
212
+ ## 얻은 교훈 (보편)
213
+
214
+ 1. **index loop = 절차지향 시그널 + LISP/Lazy Evaluation** — **MCP 룰 `index-loop-as-procedural-signal` 후보** ⭐⭐⭐ 정점.
215
+ 2. **forEach = 절차지향 시그널 + 금지 X (reviewer 자가 수정)** — **MCP 룰 `foreach-as-procedural-signal-but-not-forbidden` + `reviewer-self-correction-on-strong-feedback` 후보** ⭐⭐⭐ 정점.
216
+ 3. **map·filter·reduce 함수형 3 도구** — **MCP 룰 `map-filter-reduce-as-functional-toolkit` 후보** ⭐⭐⭐.
217
+ 4. **Mutable 팀 정책 단일 답 X** — **MCP 룰 `mutable-team-policy-no-single-answer` 후보** ⭐⭐⭐. PR #38 결 누적 2 PR.
218
+ 5. **Mutable 멤버 변경 메서드 전체 + 내부 값 테스트** — **MCP 룰 `mutable-member-comprehensive-state-test` 후보** ⭐⭐⭐.
219
+ 6. **Higher Order Function = 추상화 대안** — **MCP 룰 `higher-order-function-as-abstraction-alternative` 후보** ⭐⭐⭐.
220
+ 7. **interrupt (read/print) = 함수형 한계 + forEach 정당** — **MCP 룰 `interrupt-as-functional-impurity-justification` 후보** ⭐⭐.
221
+ 8. **Ace LOW/HIGH data class 분리 (블랙잭 도메인)** — **MCP 룰 `ace-as-low-high-data-class-pattern` 후보** ⭐⭐.
222
+ 9. **루프 + 상태 변경 = 튜링머신 절차지향** — **MCP 룰 `state-mutation-in-loop-as-procedural-signal` 후보** ⭐⭐⭐.
223
+ 10. **PR 본문 계산 프로퍼티 vs 메서드 자가 질문** — **MCP 룰 `pr-body-property-vs-method-question` 후보** ⭐⭐.
224
+
225
+ ## 메타 노트
226
+
227
+ - **haeum808 안드로이드 6기 코호트 새 reviewee** — *PR 본문 자가 질문 + 학생 자가 답변 9 thread 풍부 + Slack DM 자가 학습 메타*.
228
+ - **ghojeong reviewer 어휘 정점** — *함수형 프로그래밍 어휘 정점 (LISP/Lazy Evaluation/HOF/IO 인터럽트) + 단일 답 거부 + 강한 피드백 자가 수정 + 개인 에피소드 공유* 다축 어휘.
229
+ - **학생 자가 Slack DM 학습 메타** — *PR 외 reviewer 1:1 DM 통한 자가 학습 깊이 → 다음 단계 도전 약속* — **MCP 룰 `student-slack-dm-learning-meta` 후보** ⭐⭐ 신규. PR #144 (m6z1 셀프 코드 리뷰) 결의 *PR 외 학습 채널* 다른 축.
230
+ - **`oh-my-oop` 핵심 가치 어휘 누적**: 단일 답 거부 어휘 누적 2 PR (#38 + #62) + reviewer 자가 강요 회피 어휘 누적 4 PR (#115 + #73 + #106 + #62).
@@ -0,0 +1,169 @@
1
+ # PR #89 — [블랙잭] 해음 2단계 미션
2
+
3
+ - **Reviewee:** [@haeum808](https://github.com/haeum808) (해음) — 안드로이드 6기 코호트
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/89
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@ghojeong](https://github.com/ghojeong) (파이로)
7
+ - **라인 코멘트:** 9 스레드 — *PR 본문 flux 상태 아키텍쳐 자가 학습 적용 + reviewer 자가 반성 *미션 본 목표 복귀 + 2단계 갈아엎기 요청* 메타 정점 + State 패턴 2 기준 (다형성 + Context 책임) + 매직 넘버 제거 + map 함수형 어휘 진화 + 콜백 String → Boolean 리턴*
8
+ - **haeum808 양 단계 완성** (1단계 #62).
9
+ - **메타 케이스 정점**: PR 본문 학생 자가 *reviewer 추천 flux 상태 아키텍쳐 자가 학습* → reviewer 자가 반성 *"순수 코틀린 객체 설계 본 목표를 벗어남"* → 2단계 *싹 갈아엎기* 요청 → 학생 자가 도전 → reviewer 감사. PR #62 reviewer 자가 수정 + PR #89 reviewer 미션 목표 복귀 = ghojeong 양 PR reviewer 자가 반성 어휘 연속.
10
+
11
+ ## 잘한 점 (설계 관점)
12
+
13
+ ### 1. PR 본문 — flux 상태 아키텍쳐 자가 학습
14
+
15
+ PR 본문:
16
+
17
+ > *"파이로가 말씀해주신대로 flux 상태 아키텍쳐을 공부하고 적용했습니다! step2를 진행하기 전 step1에 flux 상태 아키텍쳐를 적용하고 시작했습니다. 확실히 단방향으로 상태가 흐르니 새로운 상태를 추가할 때도 편하게 추가할 수 있었습니다. 새로운 상태를 추가해도 다른 곳에서 에러가 나오지 않아서 손쉽게 추가할 수 있었습니다."*
18
+
19
+ → **MCP 룰 `pr-body-student-self-study-on-reviewer-recommendation`** ⭐⭐⭐ **신규** — *reviewer 추천 어휘를 학생 자가 학습 + 적용 + PR 본문 명시*. PR #154 (tobae-time 조영호 도서 자가 학습) 결 합류 누적 2 PR → ***학생 자가 학습 도서/어휘 인용 메타*** ⭐⭐⭐ 정점.
20
+
21
+ ### 2. State 패턴 + Participant interface 칭찬 (Thread 1·2)
22
+
23
+ reviewer:
24
+
25
+ > *"State 디자인 패턴을 활용해주셨군요 👍. 저는 State 디자인 패턴은 다음 두가지를 확인합니다.*
26
+ > *1. **다형성(Polymorphism) 을 어떻게 활용했는가?***
27
+ > *2. **Context 의 책임을 어느 객체에게 부여했는가?***
28
+ >
29
+ > *draw 와 profit 이 State 가 바뀔 때마다 다른 로직이 실행될 수 있도록, State 를 interface 로 먼저 추상화 해주신 점 무척 멋집니다. 👍 💯"*
30
+
31
+ reviewer (Thread 2):
32
+
33
+ > *"현재 State 의 Context 는 Dealer 와 Player 라고 이해했습니다. Dealer 와 Player 를 다시 Participant 라는 interface 로 추상화 해주신 점 멋집니다. 👍 interface 를 정말 잘 활용해 주신 것 같습니다."*
34
+
35
+ → **MCP 룰 `state-pattern-2-criteria`** ⭐⭐⭐ **신규 정점** — *State 패턴 점검 기준 2: (1) 다형성 활용 + (2) Context 책임 부여*. PR #154 (`state-pattern-no-if-type-check` 다형성)·PR #42 (불변 + 상태 패턴) 결 합류 누적 3 PR → ***State 패턴 어휘 정점*** ⭐⭐⭐.
36
+
37
+ ### 3. TestFixtures 칭찬 (Thread 5)
38
+
39
+ reviewer: *"테스트를 위한 Fixture 를 선언해 주신 점 무척 좋습니다. 👍 💯"*
40
+
41
+ ### 4. map + 방어적 복사 함수형 어휘 진화 (Thread 8) — 정점
42
+
43
+ reviewer:
44
+
45
+ > *"크으! map 의 활용이 매우 능숙해 지셨다는 느낌을 받았습니다. 👍 게다가 방어적 복사까지 신경써 주셔서 더욱 멋집니다. 👍*
46
+ >
47
+ > *다만, **map 안의 while 문은 indentation depth 를 깊게하는 요인인 것 같은데, 이 로직을 State, Player 등등의 객체에 배분하거나, 함수 분리를 해주시면 좋을 것 같습니다.**"*
48
+
49
+ → **학생 함수형 어휘 진화** = 1단계 PR #62 *학생 자가 Slack DM 학습* → 2단계 *map 능숙 + 방어적 복사*. **메타 학습 시간성**.
50
+
51
+ → **MCP 룰 `map-with-while-as-indentation-depth-signal`** ⭐⭐ 신규 — *map 안 while = depth 깊어짐 → 책임 배분*.
52
+
53
+ ## 못한 점 (설계 관점)
54
+
55
+ ### 1. reviewer 자가 반성 + 미션 본 목표 복귀 + 2단계 갈아엎기 요청 (review #1) — 정점
56
+
57
+ reviewer:
58
+
59
+ > *"해음! 제가 반응형 프로그래밍 덕후이다 보니, 순수 코틀린 언어에서의 객체 설계라는 주제를 벗어나는 방향으로, 해음과 대화를 많이하게 된 것 같습니다.*
60
+ >
61
+ > ***저도 반성을 하면서, 블랙잭 미션의 본래 목표인 객체 설계로 되돌아가고자 합니다.***
62
+ >
63
+ > ***죄송하지만, 2단계 미션의 구조를 버리고 다시 작성해주시면 감사하겠습니다.***"*
64
+
65
+ → **MCP 룰 `reviewer-self-reflection-mission-goal-return`** ⭐⭐⭐ **신규 정점** — *reviewer 본인 취향 (반응형/flux) → 미션 본래 목표 자가 반성 + 갈아엎기 요청*. PR #62 (`reviewer-self-correction-on-strong-feedback`)·PR #115 (laco-dev *쎄게 양해*)·PR #73 (*휘둘리지 마세요*)·PR #106 (말리빈 *권력 자제*) 결 합류 누적 **5 PR** → ***reviewer 자가 강요 회피 어휘 정점*** ⭐⭐⭐ MCP `oh-my-oop` 핵심 가치 어휘 정점.
66
+
67
+ → **ghojeong reviewer 양 PR 자가 반성 어휘 연속** (#62 *강한 피드백 자가 수정* → #89 *미션 본 목표 복귀*) = **MCP `oh-my-oop` 핵심 가치 어휘 양 PR 일관 정점**.
68
+
69
+ ### 2. 학생 갈아엎기 도전 + reviewer 감사 (review #2·#3)
70
+
71
+ reviewer review #2:
72
+
73
+ > *"해음! **어찌보면 싹 갈아엎는 요청을 했음에도, 훌륭하게 새로 구현해주셔서 무척 감사합니다.** 🙇 매직 넘버만 조금 더 보완하면 좋을 듯 하여 피드백 남겨보았습니다!"*
74
+
75
+ reviewer review #3:
76
+
77
+ > *"해음! **처음부터 구조를 싹 갈아엎기 쉽지 않았을 텐데, 도전해주셔서 감사합니다!** 블랙잭 미션은 이렇게 마무리 하고, 다음 오목 미션도 화이팅입니다. 💪"*
78
+
79
+ → **MCP 룰 `student-restart-on-reviewer-request`** ⭐⭐⭐ **신규** — *reviewer *갈아엎기* 요청 → 학생 자가 도전 → reviewer 감사*. PR #154 (`pr-body-restart-from-scratch` rebase 손실 → 학습 기회 자가 재해석) 결의 *갈아엎기* 다른 축 — *학생 자발 vs reviewer 요청 갈아엎기*.
80
+
81
+ ### 3. 매직 넘버 일관 제거 (Thread 3·4·6) — 반복 시그널
82
+
83
+ reviewer Thread 3: *"다만 곳곳에 매직 넘버가 있는 것은 아쉽습니다. Blackjack, Bust, Hit 을 포함하여 모든 매직 넘버를 유의미한 상수값으로 네이밍해서 선언해주세요."*
84
+
85
+ reviewer Thread 4: *"state 뿐만 아니라 다른 model 에서 매직 넘버와 문자열은 유의미한 상수로 선언해주시기 바랍니다."*
86
+
87
+ reviewer Thread 6: *"마찬가지로 매직 넘버와 문자열을 제거할 필요성을 느낍니다."*
88
+
89
+ → **매직 넘버 제거 일관 시그널** = 누적 다수.
90
+
91
+ ### 4. `onInputDecision` String → Boolean 리턴 (Thread 6)
92
+
93
+ ```kotlin
94
+ val onInputDecision: (String) -> String
95
+ ```
96
+
97
+ reviewer:
98
+
99
+ > *"`val onInputDecision: (String) -> String` 의 경우에는 **String 을 리턴하지 않고 Boolean 을 리턴하도록 하는 것에 대해서는 어떻게 생각하시나요?**"*
100
+
101
+ → **MCP 룰 `callback-string-vs-boolean-return-type`** ⭐⭐ 신규 — *콜백 리턴 타입 = 도메인 의미 명시 (Boolean 선택)*. PR #14 (`cli-vs-gui-assumption-test` Boolean) 결 합류.
102
+
103
+ ### 5. `drawUntilSatisfaction` interface 메서드 + 디미터 법칙 (Thread 7)
104
+
105
+ ```kotlin
106
+ // 현재 - 디미터 깨짐
107
+ state == Hit(state.hand) && state.hand.calculateTotal() <= 16
108
+ ```
109
+
110
+ reviewer:
111
+
112
+ > *"`state == Hit(state.hand) && state.hand.calculateTotal() <= 16` 에 관련된 부분을 `fun drawUntilSatisfaction(): Boolean` 의 형태로 interface 에 선언하는 것은 어떨까 제안해봅니다. State interface 에 선언할지, Participant interface 에 선언할 지는 고민해주세요.*
113
+ >
114
+ > *고민해주시면서 `state.hand.calculateTotal()` 의 경우 처럼 **디미터 법칙이 깨지는 경우가 없도록** 해주시면 좋겠습니다."*
115
+
116
+ → **`dot-2-or-fewer-rule` 디미터** = PR #38 결 누적 2 PR.
117
+
118
+ → **MCP 룰 `behavior-locus-state-vs-participant-question`** ⭐⭐ — *행동 책임 위치 = State interface vs Participant interface 학생 자가 고민 유도*.
119
+
120
+ ### 6. README 체크 미완료 (Thread 0)
121
+
122
+ reviewer: *"README 에 체크를 하지 않고 남겨 두신 이유가 있으시나요?"*
123
+
124
+ → **PR 본문 체크리스트 완성도** = PR #115·#154 (tobae-time 셀프 체크리스트) 결.
125
+
126
+ ## 대표 인용
127
+
128
+ > [ghojeong review #1]
129
+ > *"제가 반응형 프로그래밍 덕후이다 보니, 순수 코틀린 언어에서의 객체 설계라는 주제를 벗어나는 방향으로, 해음과 대화를 많이하게 된 것 같습니다. 저도 반성을 하면서, 블랙잭 미션의 본래 목표인 객체 설계로 되돌아가고자 합니다."*
130
+
131
+ → **reviewer 자가 반성 + 미션 본 목표 복귀 어휘 정점**.
132
+
133
+ > [ghojeong review #1]
134
+ > *"죄송하지만, 2단계 미션의 구조를 버리고 다시 작성해주시면 감사하겠습니다."*
135
+
136
+ → **reviewer 갈아엎기 사과 + 요청 어휘**.
137
+
138
+ > [ghojeong review #2]
139
+ > *"싹 갈아엎는 요청을 했음에도, 훌륭하게 새로 구현해주셔서 무척 감사합니다."*
140
+
141
+ → **학생 갈아엎기 도전 감사 어휘**.
142
+
143
+ > [ghojeong Thread 1]
144
+ > *"저는 State 디자인 패턴은 다음 두가지를 확인합니다. 1. 다형성(Polymorphism) 을 어떻게 활용했는가? 2. Context 의 책임을 어느 객체에게 부여했는가?"*
145
+
146
+ → **State 패턴 2 기준 어휘 정점**.
147
+
148
+ > [haeum808 PR 본문]
149
+ > *"파이로가 말씀해주신대로 flux 상태 아키텍쳐을 공부하고 적용했습니다! step2를 진행하기 전 step1에 flux 상태 아키텍쳐를 적용하고 시작했습니다."*
150
+
151
+ → **학생 자가 reviewer 추천 어휘 자가 학습 어휘**.
152
+
153
+ ## 얻은 교훈 (보편)
154
+
155
+ 1. **reviewer 자가 반성 + 미션 본 목표 복귀** — **MCP 룰 `reviewer-self-reflection-mission-goal-return` 후보** ⭐⭐⭐ 정점. PR #62·#115·#73·#106 결 누적 5 PR — *reviewer 자가 강요 회피 어휘 정점*.
156
+ 2. **State 패턴 2 기준 (다형성 + Context 책임)** — **MCP 룰 `state-pattern-2-criteria` 후보** ⭐⭐⭐. PR #154·#42 결 누적 3 PR.
157
+ 3. **학생 자가 reviewer 추천 어휘 자가 학습** — **MCP 룰 `pr-body-student-self-study-on-reviewer-recommendation` 후보** ⭐⭐⭐. PR #154 결 누적 2 PR.
158
+ 4. **reviewer 요청 갈아엎기 → 학생 자가 도전** — **MCP 룰 `student-restart-on-reviewer-request` 후보** ⭐⭐⭐.
159
+ 5. **콜백 리턴 타입 도메인 의미 (String → Boolean)** — **MCP 룰 `callback-string-vs-boolean-return-type` 후보** ⭐⭐.
160
+ 6. **map 안 while = depth 시그널** — **MCP 룰 `map-with-while-as-indentation-depth-signal` 후보** ⭐⭐.
161
+ 7. **행동 책임 위치 학생 자가 고민 유도** — **MCP 룰 `behavior-locus-state-vs-participant-question` 후보** ⭐⭐.
162
+
163
+ ## 메타 노트
164
+
165
+ - **haeum808 양 단계 완성 (1단계 #62 → 2단계 #89)** — 1단계 학생 자가 Slack DM 학습 → 2단계 PR 본문 *flux 상태 아키텍쳐 자가 학습 적용* → reviewer 본 목표 복귀 + 갈아엎기 요청 → 학생 자가 도전 + 함수형 어휘 진화 (map 능숙).
166
+ - **ghojeong reviewer 어휘 정점 (양 PR 자가 반성 연속)** — #62 *강한 피드백 자가 수정* (forEach 강요 X 정정) → #89 *미션 본 목표 복귀 + 갈아엎기 사과* — **MCP `oh-my-oop` 핵심 가치 reviewer 양 PR 일관 정점**.
167
+ - **메타 케이스 9번째** — *reviewer 본인 취향 → 미션 본 목표 자가 반성 + 갈아엎기 요청 → 학생 자가 도전* 정점.
168
+ - **누적 메타 케이스 (batch 26 신규)**:
169
+ - 9. **haeum808 (PR #62 → #89)**: ghojeong reviewer 자가 반성 어휘 양 PR 연속 + 학생 자가 reviewer 추천 어휘 자가 학습 + 갈아엎기 도전.
@@ -0,0 +1,221 @@
1
+ # PR #110 — [블랙잭 1단계] 환노 미션
2
+
3
+ - **Reviewee:** [@hwannow](https://github.com/hwannow)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/110
5
+ - **단계:** 1단계 (페어, *학생 자가 답변 매우 풍부*)
6
+ - **리뷰어:** @laco-dev
7
+ - **라인 코멘트:** 30 (리뷰어 17 / 리뷰이 13)
8
+
9
+ ## 잘한 점 (설계 관점)
10
+
11
+ - **`Blackjack` 진행자 객체 분리 — *딜러 = 게임 참여자 + 진행자* 트레이드오프 자가 토론** (PR #125와 유사).
12
+ - **`Hand` 일급 컬렉션 (후속 반영)** — 카드 + 점수 계산 + Bust.
13
+ - **`Participant` 추상 클래스 + `canHit` 추상 메서드** (후속 반영).
14
+ - **`ActionType` enum (HIT/STAY)** — 도메인 어휘.
15
+ - **`GameResult` enum (Win/Lose/Draw) + Bust 분리 (후속)**.
16
+ - **학생이 *모든 권고에 자가 답변 + 커밋 링크* 정성스럽게 명시** — 학습 가시화.
17
+
18
+ ## 못한 점 (설계 관점)
19
+
20
+ ### 1. PR 본문 — *딜러 = 참여자 vs 진행자* 학생 자가 토론
21
+
22
+ 학생 PR 본문: "*딜러를 게임 참여자로 볼 것인가? 게임 진행자로 볼 것인가? 딜러가 전체 카드 뭉치를 알아도 되는가?* 현실 세계를 반영한다면 *딜러는 능동적으로 플레이어들에게 카드*..." — *PR #125 (jerry8282)와 같은 자가 의문*. 학생이 *진행자 객체*(`Blackjack`) 분리 결론.
23
+
24
+ 리뷰어: "*객체의 추상화에 대한 기본적인 접근을 잘 캐치해주셨어요* 👍🏻 *객체가 수동적이라고 생각하는 것은 자율성을 부여해주지 않아서 라고 생각*합니다. 예제로 보여주신 *`딜러가 16이 넘지 않으면 카드를 받는다`는 행위로 표*..."
25
+
26
+ → **객체 수동성의 원인 = 자율성 미부여**. 객체가 *외부 명령 받기*만 한다면 *행위로 표현*. 학생의 진행자 분리는 자율성 한 단계 더 부여.
27
+
28
+ ### 2. `Shape.value: String` UI 표현 — 학생 자가 토론
29
+
30
+ ```kotlin
31
+ enum class Shape(val value: String) { ... }
32
+ ```
33
+
34
+ 학생 자가 토론 (PR #125와 동일): "*출력 정보를 enum에서 관리할지, view에서 확장함수로 관리할지도 많이 고민*했는데요! 🤔 *enum을 사용할 시, `리팩터링 시 변경 범위가 최소화된다` 라는 장점*이 있습니다. *만약에 영문 출력이 생길 경우, enum 의 프로퍼티에만*..."
35
+
36
+ 리뷰어: "*우선 모양이라는 enum 모델의 역할은 충분히 의미가 있어보여요.* 하지만, *만약 하트를 ❤️ 이렇게 출력해주세요. 라는 요구사항이 들어오면 우리는 도메인 모델을 수정해야 할까요? 또한 하트가 문자열이 아닌 시각적인 "이*..."
37
+
38
+ 학생 후속 답변 (URL 첨부): "*출력문을 관리하는 건 뷰의 역할인 것 같습니다! 🙃 따라서 뷰에서 확장함수로 출력문을 관리하도록 변경*해 주었..."
39
+
40
+ 리뷰어 후속: "*왜 URL이 먼저 나오는지는 둘째 치고...* *뷰에서 렌더링 해주면 도메인을 수정할 필요가 없잖아요?* *동일한 문제를 되새기고자 드린 질문*입니다." — **enum UI value 17개+ PR 연속**. 학생이 *PR #125와 동일한 토론을 자가 진행 → 자가 결론*.
41
+
42
+ ### 3. `YesOrNo` 도메인 클래스 — enum vs class
43
+
44
+ ```kotlin
45
+ class YesOrNo(val value: String) { ... }
46
+ ```
47
+
48
+ 리뷰어: "*오히려 YesOrNo라는 개념이라면 이것도 enum이 되어야 하지 않았나요?* `enum class YesOrNo { Yes, No }` *도메인 입장이라면 Y, n, y 이런 문자열을 판단하기 위한 input 자체가 필요한 것인가 의문이 듭니다.* *키오스크라면 "y"라*..."
49
+
50
+ 학생 자가 답변: "우선 위 객체는 *`모든 원시값을 포장한다`라는 요구사항을 충족하기 위해 만든 객체였습니다!* 🙃 1. *`enum이 되어야*..." — **YesOrNo는 ActionType과 중복 개념**. *enum class + Yes/No*가 자연. *키오스크 = 버튼*이면 *Boolean*. PR #29·#119·#125·#128과 같은 결.
51
+
52
+ ### 4. `CardNumber.OtherAce` 어색한 이름
53
+
54
+ ```kotlin
55
+ enum class CardNumber(...) {
56
+ ACE(1, "A"),
57
+ OTHER_ACE(11, "A"); // ⚠ 이름 어색
58
+ }
59
+ ```
60
+
61
+ 리뷰어: "*OtherAce라는 이름이 어떤 역할을 하는 건지 어색하게 느껴져요. 점수를 계산하는게 다소 복잡하기는 한데 10점이라는 것을 보너스 점수라는 관점으로 해석*해보면 어때요?" — **`OtherAce` 만능 명사 + 룰 누수**. *Ace는 1점*만 enum 값. *11로 계산*은 *Cards.score()의 보너스 룰*. PR #29·#119와 같은 결.
62
+
63
+ ### 5. `ParticipantStatus` enum — *결과 + 상태 혼재* (PR #125와 동일)
64
+
65
+ ```kotlin
66
+ enum class ParticipantStatus { None, Win, Lose, Bust, Draw }
67
+ ```
68
+
69
+ 리뷰어: "*이 상태 객체가 어떤 역할을 하는 것인지 의도를 잘 모르겠어요.* *Draw라는 것은 상태가 아닌 뽑는다는 행위*로 보이는 반면 *Win, Lose는 승부의 결과, Bust는 상태*가 되겠네요. *무엇을 위한 상태 객체*인지 저를 설득해주실 수 있..."
70
+
71
+ 학생 답변: "*Win (승), Lose (패), Draw (무) 는 승부의 결과, Bust는 상태가 맞습니다!* 🙃 *참여자들의 승패 결과를 나타내기 위한 enum class*인데, *게임의 룰을 적용시켜 Bust 상태까지 추가한 형태가 되었습니다.* 현재 요구 사항에서 Bust..."
72
+
73
+ 학생 후속: 후속 커밋에서 *Bust를 GameResult로 옮김*. **결과 enum과 상태 enum 분리 = 18개+ PR 연속**.
74
+
75
+ ### 6. `ParticipantStatus.compare(playerScore, dealerScore)` — 정적 비교자
76
+
77
+ ```kotlin
78
+ companion object {
79
+ fun compare(playerScore: Int, dealerScore: Int): ParticipantStatus { ... }
80
+ }
81
+ ```
82
+
83
+ 리뷰어: "*승부를 벌이는 것은 Status가 할 일이라고 봐야 하나요? 아니면 참가자가 할 일이라고 봐야 하나요?*"
84
+
85
+ 학생 답변: "*승부를 벌이는 것은 참가자가 할 일이라고 생각합니다!* 🤔 다만 *위 메소드는 `승부를 벌인다` 라는 관점이 아닌, `두 숫자를 비교해서 상태를 반환해라` 관점에서 바라보고 작성*하였습니다. 또한 *도메인의 프로퍼티가 아닌, 원시값인 Int로 판단*하고 상태를 반환하기 때문에 *ParticipantStatus 객체가 할 일이라고 생각*하였습니다!" — **학생의 *책임 분리 해석*: 비교 메서드는 *Int 비교 = enum 책임*, 승부 벌이기는 *참가자 책임***. 합리적 분기. 그러나 *함수명 `compare`*는 *enum과 어색*. *enum에 *result of compare 두 점수* 메서드*는 *trade-off*.
86
+
87
+ ### 7. `Participants`가 *카드 관리까지* — 책임 비대
88
+
89
+ 리뷰어: "*앞선 내용들이 이 문제를 해결하면서 도움이 될거에요.* *참가자가 카드들을 관리하기에는 너무 역할이 많은 것 같아요.* 덱은 카드뭉치에서 하나씩 빼는 역할이라면, *카드들이라는 객체가 있다면 어떤 역할*을 할 수 있을까요..."
90
+
91
+ 학생 후속: "*위 커밋에서 플레이어가 가지는 카드 뭉치를 일급 컬렉션으로 래핑해 주었습니다!* 🃏 `Hand.kt` 해당 객체는 카드를..." — **Hand 일급 컬렉션 = 카드 관리 + 점수 계산 + Bust 판정**. PR #79·#65·#10·#33과 같은 결.
92
+
93
+ ### 8. `Player.compareScores`가 *자기 상태 변경*
94
+
95
+ ```kotlin
96
+ class Player {
97
+ var status: ParticipantStatus
98
+ fun compareScores(other: Player) {
99
+ status = ParticipantStatus.compare(this.score, other.score) // ⚠ 자기 상태 변경
100
+ }
101
+ }
102
+ ```
103
+
104
+ 리뷰어: "*점수를 비교하는 것은, 결국 상대적인 입장인데 그때마다 자신의 상태가 바뀐다는 것이 재사용성을 매우 떨어트리는 것으로 보입니다!*" — **`compareScores`가 *side effect*로 *자기 상태 변경***. *Tell-Don't-Ask 변형 위반*. *`match(other): Result` 반환*이 자연. PR #25·#33과 같은 결.
105
+
106
+ ### 9. `Deck` 생성자에 *셔플 전략* 매개변수
107
+
108
+ ```kotlin
109
+ class Deck(shuffleStrategy: (List<Card>) -> List<Card>) { ... }
110
+ ```
111
+
112
+ 리뷰어: "*섞여져있는 카드를 주는 것과, 임의의 카드를 주는 것으로 이미 충분한 듯 한데 셔플하는 규칙까지 생성자로 보기에는 오버엔지니어링으로 보이지 않나요?* 지금 *구조만의 특별한 이점이 있을까요?* 오히려 *이런 기능들이 고*..."
113
+
114
+ 학생 답변: "이 부분은 *페어의 리뷰도 참고하여 수정*하였습니다! *처음에 전략 패턴을 도입했었던 건 테스트 코드에서 섞이*..." — **테스트 위한 Strategy 도입 → 오버 엔지니어링**. *명시적 카드 주입*이 *동등한 이점 + 단순*. PR #125 (jerry8282) Strategy 폐기와 같은 결.
115
+
116
+ ### 10. `domain.model` vs `model.domain` 패키지 — 학생 자가 토론
117
+
118
+ ```
119
+ src/main/kotlin/blackjack/domain/model/...
120
+ src/main/kotlin/blackjack/model/domain/...
121
+ ```
122
+
123
+ 리뷰어: "*아 맞다 아래 두개는 뭔차이인가요?* > domain.model > model.domain"
124
+
125
+ 학생 자가 답변: "*두 개에서 model의 의미가 다른 것 같습니다* 🤔 *domain.model 의 모델은 도메인 중심 설계에서 도메인 모델을 의미*할 것 같네요. > 도메인 로직을 포현하는 객체와 개념의 집합. *model.domain 에서 모델은 MVC 패턴에서의 모델*..."
126
+
127
+ 리뷰어 후속: "*레이어 기반이라는 점이 잘 이해가 안되는데요. 아래 1번처럼 작성해도 문제 없다는 것으로 봐야할까요?* `#1 model.domain model.ui model.data` vs `#2 data.model ui.model domain.model`" — **패키지 명명 컨벤션 토론**. *어떤 분류 축*이 *우선*인지에 따라. *Kotlin 컨벤션 + 회사 컨벤션*은 *각각*. PR #128과 같은 결.
128
+
129
+ ### 11. `Hand`에 *방어적 복사 미적용*
130
+
131
+ ```kotlin
132
+ class Hand(val cards: MutableList<Card>) { ... }
133
+ ```
134
+
135
+ 리뷰어: "*수업 때 배운 방어적 복사 개념을 적용 해보세요* :)" — PR #79·#65·#24·#33과 같은 결.
136
+
137
+ ### 12. `Hand`가 *Bust 판정도*
138
+
139
+ 리뷰어: "*카드의 점수를 계산하는 역할을 한다면, 버스트 상태를 판단하는 것도 Hand가 적절하지 않을까요?*" — **`Hand.isBust()` = 점수 계산 + Bust 판정**. PR #135·#119·#81과 같은 결.
140
+
141
+ ### 13. `GameResult`가 *Bust 판단* 유지
142
+
143
+ ```kotlin
144
+ enum class GameResult { Win, Lose, Draw, Bust } // 후속에 Bust 남음
145
+ ```
146
+
147
+ 리뷰어: "*게임 결과로 바뀌었는데 왜 버스트를 이 객체가 판단하도록 유지되어있을까요?*" — **변경 반쪽**. 학생 자가 답변 후 후속 *완전한 분리 미반영*.
148
+
149
+ ### 14. `Player`의 *플레이어 vs 딜러 1:1 구도* — 1대다 미고려
150
+
151
+ ```kotlin
152
+ class Player {
153
+ var status: ParticipantStatus
154
+ fun compareScores(dealerScore: Int) { ... }
155
+ }
156
+ ```
157
+
158
+ 학생 답변: "*블랙잭이라는 게임 자체가 `플레이어 vs 딜러 1:1` 구도이고, 미션의 요구 사항도 게임을 여러번 하는 것이 아닌, `한번만 진행`하므로 플레이어들이 각각의 승패 결과를 들고 있는 게 합당하다고 생각*합니다! 만약 *플레이어*..." — **현재 요구사항 충실 = 1:1**. 확장성은 *미래 요구사항 발생 시 리팩토링* 입장. **YAGNI**. PR #24의 *1대다 권고*와 *반대 방향*.
159
+
160
+ ### 15. `ActionType` enum vs `YesOrNo` 분리 — 학생 자가 토론
161
+
162
+ 학생 답변: "*처음에 ActionType으로 만들지 않은 이유는 입력값에 대한 논리적인 오류 유효성 검증을 할 도메인이 필요한데, enum 클래스에서 사용자 입력값에 대한 유효성 검증을 하는 것이 맞는가? 에 대한 확신이 들지 않아 분리해 주었습*..." — **enum + 입력 검증의 위치**. *enum value 매핑 + 검증*은 *companion object*에. *별도 클래스 만드는 것은 과잉*. PR #128과 같은 결.
163
+
164
+ ### 16. `Blackjack` 진행자가 *플레이어/딜러 모두 진행* (이미 잘함)
165
+
166
+ 리뷰어 칭찬: "*객체의 추상화에 대한 기본적인 접근을 잘 캐치해주셨어요* 👍🏻 *객체가 수동적이라고 생각하는 것은 자율성을 부여해주지 않아서 라고 생각*합니다." — 학생의 *Blackjack 진행자 분리 시도가 잘됨*. 학생 *자가 답변*: "*따라서 추상 클래스의 canHit 메소드를 각각의 구현체에서 구현*하도록 바꿔 보았는데, *페로로의 피드백 의도가 이게 맞았을까요?* 🥲" → 리뷰어: "*네 맞습니다* :)"
167
+
168
+ → **학생의 *자가 의문 + 자가 답변*이 *반복적으로 정답에 도달***. 학습 가시화의 모범 사례.
169
+
170
+ ## 리뷰어 의견 요지
171
+
172
+ - ***딜러 = 참여자 vs 진행자 = 학생 자가 토론 + 진행자 분리 진행***.
173
+ - ***Shape.value UI = 17개+ PR 연속 (학생 자가 결론으로 View 이전)***.
174
+ - ***`YesOrNo` 도메인 클래스 < enum + `ActionType`***.
175
+ - ***`CardNumber.OtherAce` 만능 명사 + 보너스 점수 관점***.
176
+ - ***`ParticipantStatus`에 결과 + 상태 혼재 = Bust 분리***.
177
+ - ***Status가 비교자 책임 = 참가자 책임이 자연*** — 학생 *Int 비교는 enum* 분기 입장.
178
+ - ***Participants 카드 관리 = Hand 일급 컬렉션 분리***.
179
+ - ***`Player.compareScores`가 자기 상태 변경 = 재사용성 ↓*** — `match(other): Result` 반환.
180
+ - ***Deck 셔플 전략 매개변수 = 오버 엔지니어링*** — 명시 카드 주입.
181
+ - ***패키지 명명 (`domain.model` vs `model.domain`) = 분류 축 선택***.
182
+ - ***Hand 방어적 복사***.
183
+ - ***Hand가 Bust 판정 = 점수 계산 + Bust 응집***.
184
+ - ***GameResult에 Bust 잔존 = 변경 반쪽***.
185
+ - ***1:1 구도 = YAGNI vs 1대다 확장*** — 트레이드오프.
186
+ - ***ActionType enum + companion에 매핑/검증***.
187
+
188
+ ## 대표 인용
189
+
190
+ > 객체의 추상화에 대한 기본적인 접근을 잘 캐치해주셨어요 👍🏻 *객체가 수동적이라고 생각하는 것은 자율성을 부여해주지 않아서 라고 생각*합니다.
191
+ > — @laco-dev on `Blackjack.kt`
192
+
193
+ > 점수를 비교하는 것은, 결국 *상대적인 입장인데 그때마다 자신의 상태가 바뀐다는 것이 재사용성을 매우 떨어트*리는 것으로 보입니다!
194
+ > — @laco-dev on `Player.kt`
195
+
196
+ > 만약 하트를 ❤️ 이렇게 출력해주세요. 라는 요구사항이 들어오면 *우리는 도메인 모델을 수정해야 할까요?* 또한 *하트가 문자열이 아닌 시각적인 "이*...
197
+ > — @laco-dev on `Shape.kt`
198
+
199
+ > 위 메소드는 `승부를 벌인다` 라는 관점이 아닌, *`두 숫자를 비교해서 상태를 반환해라` 관점에서 바라보고 작성*하였습니다. 또한 *도메인의 프로퍼티가 아닌, 원시값인 Int로 판단하고 상태를 반환*하기 때문에 *ParticipantStatus 객체가 할 일이라고 생각*하였습니다!
200
+ > — @hwannow (학생 책임 분리 해석) on `ParticipantStatus.kt`
201
+
202
+ > 블랙잭이라는 게임 자체가 `플레이어 vs 딜러 1:1` 구도이고, 미션의 요구 사항도 *게임을 여러번 하는 것이 아닌, `한번만 진행`*하므로 *플레이어들이 각각의 승패 결과를 들고 있는 게 합당*하다고 생각합니다!
203
+ > — @hwannow (학생 YAGNI) on `Player.kt`
204
+
205
+ ## 얻은 교훈
206
+
207
+ - ***딜러 = 참여자 + 진행자 자가 토론 = PR #125와 동일한 학생 의문 패턴*** — 진행자 객체 분리.
208
+ - ***객체 수동성 = 자율성 미부여 신호*** — *행위로 표현*하면 *외부 명령*이 메시지로 변환.
209
+ - ***enum UI value 17개+ PR 연속 (MCP 룰 후보 최강)*** — 학생이 *PR #125 토론을 자가 진행*.
210
+ - ***`YesOrNo` 도메인 클래스 = enum + ActionType 중복 개념*** — 원시값 포장의 *과잉 적용*.
211
+ - ***`CardNumber.OtherAce` 만능 명사 = 룰 누수*** — *보너스 점수* 관점으로 분리.
212
+ - ***ParticipantStatus에 결과 + 상태 혼재 = 18개+ PR 연속*** — Bust 별도 enum.
213
+ - ***Status.compare가 enum 책임 vs 참가자 책임 = 학생 책임 분리 해석*** — *Int 비교 = enum*, *승부 = 참가자*. **트레이드오프 + 학생 근거 명시**.
214
+ - ***Participants 카드 관리 = Hand 일급 컬렉션 분리*** — *Hand = 카드 + 점수 + Bust 응집*.
215
+ - ***`Player.compareScores`가 자기 status 변경 = 재사용성 ↓*** — `match(other): Result` 반환.
216
+ - ***Deck 셔플 전략 매개변수 = 오버 엔지니어링*** — *명시 카드 주입*이 동등한 이점 + 단순. PR #125·#65와 같은 결.
217
+ - ***패키지 명명 = 분류 축 선택*** — *어떤 축이 우선*인지에 따라 컨벤션 결정.
218
+ - ***GameResult에 Bust 잔존 = 변경 반쪽*** — *완전한 분리*까지 도달.
219
+ - ***1:1 구도 (현재 요구사항) vs 1대다 확장 = YAGNI 트레이드오프*** — *현재 요구사항 충실* vs *미래 확장성*. **학생 근거 명시**.
220
+ - ***ActionType enum + companion object에 매핑/검증*** — *별도 클래스* 만들지 않고 *enum 자체에 보유*.
221
+ - ***학생 자가 의문 + 자가 답변 + 자가 결론 = 학습 가시화의 모범*** — PR #128·#135·#111·#120과 같은 결.