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,122 @@
1
+ # PR #37 — [코건] 2단계 블랙잭
2
+
3
+ - **Reviewee:** [@DYGames](https://github.com/DYGames) (코건)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/37
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@galcyurio](https://github.com/galcyurio)
7
+ - **라인 코멘트:** 9 스레드 — *학생 자가 답변 4 thread + PR 본문 자가 질문 2개 / `process()` Controller vs main 테스트 가능성 + 3개 인스턴스 변수 원칙 = 가이드 / 절대 X + Money 연산자 오버로딩 + Controller 테스트 도전 + Fake 구현체 + `onPrint()` 고차함수 출력 호출 체크*
8
+ - **DYGames 양 단계 완성** (1단계 #14).
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ ### 1. PR 본문 자가 질문 2개
13
+
14
+ PR 본문:
15
+
16
+ > *"현재 컨트롤러 로직을 최대한 간소화해보았는데, 여기서 더 불필요한 로직이 있는지 궁금합니다. 또한 **컨트롤러에 `process()`라는 함수가 있는데, 이를 `main()` 함수로 이동해야 할지, 컨트롤러에 두는게 맞는지 궁금합니다.**"*
17
+
18
+ ### 2. Controller 테스트 + Fake 구현체 칭찬 (Thread 5·7)
19
+
20
+ reviewer Thread 5: *"Controller 테스트 :+1:"*
21
+
22
+ reviewer Thread 7: *"Fake 구현체 :+1:"*
23
+
24
+ ## 못한 점 (설계 관점)
25
+
26
+ ### 1. `process()` Controller vs main = 테스트 가능성 (Thread 0) — 정점
27
+
28
+ reviewer (학생 PR 본문 자가 질문 답):
29
+
30
+ > *"지금처럼 Controller에 위치시키는게 더 올바른 위치로 보입니다. **Controller에 있으면 `process()` 함수도 테스트가 가능하지만 `main()` 함수에 위치시키는 순간 해당 코드들은 테스트가 힘들어지기 때문입니다.**"*
31
+
32
+ → **MCP 룰 `process-in-controller-vs-main-testability`** ⭐⭐⭐ **신규** — *진행 흐름 위치 = 테스트 가능성으로 판단*. PR #42 (`controller-presentation-logic-must-test`)·PR #48 (`controller-to-domain-test-enablement`) 결 합류 → ***Controller 테스트 가치 어휘 누적 7 PR*** ⭐⭐⭐ 정점 강화.
33
+
34
+ ### 2. 3개 인스턴스 변수 원칙 = 가이드 / 절대 X (Thread 6) — 정점
35
+
36
+ 학생 자가 의문 정점:
37
+
38
+ > *"또 미션 요구 사항 중 `3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.`라는 사항이 있는데, `Player`클래스에서 `name`,`bet`,`cards` 이렇게 3개의 인스턴스 변수를 가지고 있는데 `bet`과 `cards`를 `BetInfo`새로운 클래스로 분리한다고 하면 `Player` 클래스는 단순히 `name`과 `BetInfo`라는 **두개의 상태를 가지고 있고 역할은 없는 클래스로 변한다고 생각**됩니다.*
39
+ >
40
+ > *혹시 해당 요구 사항을 지키기 위해 제가 다른 관점에서 생각해볼 점이 있는지 궁금합니다!"*
41
+
42
+ reviewer:
43
+
44
+ > *"지금 상황에서는 오히려 나누지 않는게 더 나아보입니다.*
45
+ >
46
+ > *해당 요구사항은 클래스를 잘게 나누도록 가이드하는 하나의 원칙일 뿐입니다. **원칙을 따르는 것은 좋지만 절대적으로 항상 올바른 원칙은 없기에 모든 경우에 적용시켜서는 안됩니다.**"*
47
+
48
+ → **MCP 룰 `principle-as-guide-not-absolute`** ⭐⭐⭐ **신규 정점** — *3 인스턴스 변수 원칙 = 가이드 / 절대 적용 X*. PR #38 (`primitive-fn-conversion-as-temporary-fix` 임시 방편 vs 본질)·PR #62 (`mutable-team-policy-no-single-answer`)·PR #43 (`responsibility-of-judging-no-single-answer`) 결 합류 누적 **4 PR 원칙 vs 본질 단일 답 거부 정점**.
49
+
50
+ → **MCP 룰 `forced-class-division-without-role`** ⭐⭐⭐ 신규 — *역할 없는 클래스 분리 = 분리 X 권유*. PR #42 (`info-suffix-as-misplaced-data` PlayerInfo) 결 합류 누적 2 PR.
51
+
52
+ → **MCP `oh-my-oop` 핵심 가치 학생 측 메타 어휘** — *원칙 준수 vs 역할 명시 학생 자가 의문* = 도구 핵심 가치 (책임-역할-협력) 학생 측 자각.
53
+
54
+ ### 3. Controller 테스트 도전 (Thread 1)
55
+
56
+ reviewer:
57
+
58
+ > *"BlackjackController에 대한 테스트 코드를 작성해보는 것에 도전해보시면 좋겠습니다. 현재는 View를 직접적으로 의존하고 있어서 테스트하기 힘든 코드입니다. **어떻게하면 Controller에 대한 테스트 코드도 작성할 수 있을지 고민해보세요.**"*
59
+
60
+ → **Controller 테스트 = 7 PR 누적** = PR #37·#42·#48·#47·#72·#43·#54 — Controller 어휘 최정점.
61
+
62
+ ### 4. Money 연산자 오버로딩 (Thread 2)
63
+
64
+ reviewer: *"값을 꺼내서 쓰는 대신 `bet * 2`와 같이 코드를 작성할 수 있도록 만들어보세요."*
65
+
66
+ 학생 자가 답변: *"`Money` 클래스에서 `times()` 연산자를 오버로딩 해 구현하였습니다."*
67
+
68
+ → **MCP 룰 `operator-overload-times-domain`** ⭐⭐ 신규 — *연산자 오버로딩 = 도메인 어휘*. PR #47 (`operator fun` 칭찬) 결 합류 누적 2 PR.
69
+
70
+ ### 5. 한 줄 너무 많은 처리 → 변수/함수 분리 (Thread 3·4)
71
+
72
+ reviewer Thread 3:
73
+
74
+ > *"한 줄에서 너무 많은 것을 처리하고 있습니다. `playerCardNumberSum in (dealerCardNumberSum + 1)..GameRule.WINNING_NUMBER`이 무엇인지 (...) **변수로 선언하고 해당 변수의 이름을 통해 역할을 드러내주세요.**"*
75
+
76
+ reviewer Thread 4:
77
+
78
+ > *"한 줄에서 너무 많은 일을 하고 있습니다. 함수로 분리하거나 지역 변수로 분리해보세요. **불필요한 `let()` 사용입니다. 오히려 변수를 선언하는 것이 가독성에 더 도움이 됩니다.**"*
79
+
80
+ 학생 자가 답변: *"적절한 변수명으로 조건들을 분리해주었습니다." / "함수로 분리하였습니다."*
81
+
82
+ → **MCP 룰 `unnecessary-let-as-readability-loss`** ⭐⭐ 신규 — *`let()` = 가독성 손실 / 변수 분리 권장*. PR #42 (`expression-body-too-long-as-local-var`) 결 합류 누적 2 PR.
83
+
84
+ ### 6. 출력 함수 호출 체크 — `onPrint()` 고차함수 (Thread 8)
85
+
86
+ reviewer:
87
+
88
+ > *"출력의 경우에는 반환값이 없기 때문에 함수가 호출되었는지를 체크해야 합니다. 이 경우에는 **생성자로 `onPrint()`, `onPrintln()`과 같은 고차함수를 받도록 처리**해주시면 좋습니다."*
89
+
90
+ → **MCP 룰 `output-fake-with-print-callback`** ⭐⭐⭐ 신규 — *Fake 출력 = 함수 호출 체크 + 고차함수 콜백 어휘*. PR #14 (`test-fake-self-test-anti-pattern`) 결 합류.
91
+
92
+ ## 대표 인용
93
+
94
+ > [galcyurio Thread 0]
95
+ > *"Controller에 있으면 `process()` 함수도 테스트가 가능하지만 `main()` 함수에 위치시키는 순간 해당 코드들은 테스트가 힘들어지기 때문입니다."*
96
+
97
+ → **`process()` 위치 = 테스트 가능성 어휘**.
98
+
99
+ > [galcyurio Thread 6]
100
+ > *"원칙을 따르는 것은 좋지만 절대적으로 항상 올바른 원칙은 없기에 모든 경우에 적용시켜서는 안됩니다."*
101
+
102
+ → **원칙 = 가이드 / 절대 X 어휘 정점**.
103
+
104
+ > [DYGames Thread 6]
105
+ > *"`Player` 클래스는 단순히 `name`과 `BetInfo`라는 두개의 상태를 가지고 있고 역할은 없는 클래스로 변한다고 생각됩니다."*
106
+
107
+ → **학생 자가 역할 없는 클래스 분리 시그널 자각 어휘**.
108
+
109
+ ## 얻은 교훈 (보편)
110
+
111
+ 1. **`process()` Controller vs main = 테스트 가능성** — **MCP 룰 `process-in-controller-vs-main-testability` 후보** ⭐⭐⭐. Controller 어휘 누적 7 PR 정점.
112
+ 2. **원칙 = 가이드 / 절대 X (3개 인스턴스 변수 원칙)** — **MCP 룰 `principle-as-guide-not-absolute` 후보** ⭐⭐⭐ 정점. 단일 답 거부 누적 4 PR.
113
+ 3. **역할 없는 클래스 분리 X (BetInfo 분리 거부)** — **MCP 룰 `forced-class-division-without-role` 후보** ⭐⭐⭐. PR #42 결 누적 2 PR.
114
+ 4. **Money 연산자 오버로딩 도메인** — **MCP 룰 `operator-overload-times-domain` 후보** ⭐⭐.
115
+ 5. **출력 Fake = `onPrint()` 고차함수** — **MCP 룰 `output-fake-with-print-callback` 후보** ⭐⭐⭐.
116
+ 6. **불필요한 `let()` = 가독성 손실** — **MCP 룰 `unnecessary-let-as-readability-loss` 후보** ⭐⭐.
117
+
118
+ ## 메타 노트
119
+
120
+ - **DYGames 양 단계 완성** — galcyurio reviewer (PR #30·#42 ippnsj 결).
121
+ - **Controller 어휘 누적 7 PR 정점** (PR #37·#42·#48·#47·#72·#43·#54) — Controller 책임 + 테스트 + 분류 어휘 최정점.
122
+ - **원칙 vs 본질 단일 답 거부 누적 4 PR** (PR #38·#62·#43·#37) — MCP 핵심 가치 어휘 정점.
@@ -0,0 +1,117 @@
1
+ # PR #12 — [해시] 1단계 블랙잭
2
+
3
+ - **Reviewee:** [@EmilyCh0](https://github.com/EmilyCh0)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/12
5
+ - **단계:** 1단계
6
+ - **리뷰어:** [@BeokBeok](https://github.com/BeokBeok) (벅벅) — 2023 코호트 reviewer
7
+ - **라인 코멘트:** 10 스레드 — *단방향 리뷰 (학생 자가 답변 X) / `init` 함수명 의미 + Mutable 노출 + 언더바 backing property 컨벤션 + Ace 책임 위치 + 원시값 포장 + 함수명 의도 일치 + 테스트 함수명 구체성*
8
+ - **신규 reviewee** (2023 코호트). PR #15 (sujin9 1단계, BeokBeok)와 동일 가이드 결.
9
+
10
+ ## 잘한 점 (설계 관점)
11
+
12
+ - Card 클래스 내 Shape/Value 잘 구현 (Thread 2 — 다만 파일 분리 권유).
13
+ - A 판단 테스트 코드 작성 (Thread 9 — 다만 함수명 구체성 보완).
14
+
15
+ ## 못한 점 (설계 관점)
16
+
17
+ ### 1. `init` 함수명 의미 (Thread 0)
18
+
19
+ ```kotlin
20
+ fun init(...) // 별도 리턴값이 있는 함수
21
+ ```
22
+
23
+ reviewer:
24
+
25
+ > *"init이라는 함수는 대체로 \"값을 초기화한다\" 라는 의미를 가집니다. 다만 초기화는 아래와 같이 별도의 리턴값이 있을 것이라 예상되지 않습니다. `val a = 1`. 구현부의 의도를 잘 알 수 있도록 함수명을 개선해보면 어떨까요?"*
26
+
27
+ → **`init` = 초기화 어휘 (리턴 X 예상)** = **MCP 룰 `init-name-implies-no-return` 후보** ⭐ 신규.
28
+
29
+ ### 2. 상수값 집합 = enum (Thread 1)
30
+
31
+ `Answer` 클래스를 enum으로 권유. 누적 다수.
32
+
33
+ ### 3. 하나의 파일 = 하나의 클래스 (Thread 2)
34
+
35
+ reviewer: *"Card 클래스 내에 Shape와 Value를 잘 구현해주셨네요. 지금처럼 하셔도 좋지만, 가급적이면 하나의 파일에는 하나의 클래스를 관리하는 것이 좋습니다. 현재 구조에서는 Shape 혹은 Value 클래스가 변경이 되면 Card 클래스도 영향을 받기 쉬운 구조이기 때문입니다."*
36
+
37
+ → **단일 책임 파일 분리 + 변경 전파 영향 어휘** = 누적 다수.
38
+
39
+ ### 4. `List<List<Card>>` 포장 (Thread 3)
40
+
41
+ reviewer: *"List<List<Card>>를 포장해보면 어떨까요?"*
42
+
43
+ → **이중 컬렉션 포장 (일급 컬렉션)** = 누적 다수.
44
+
45
+ ### 5. `MutableList` 외부 노출 (Thread 4)
46
+
47
+ ```kotlin
48
+ // Dealer.kt
49
+ class Dealer(name: String = DEALER_NAME, cards: MutableList<Card>) : Player(name, cards)
50
+ ```
51
+
52
+ reviewer:
53
+
54
+ > *"cards의 타입이 Mutable 타입이네요. 이렇게 되면 외부에서는 Mutable 타입이 노출되기 때문에, 클래스를 내부가 아닌 외부에서 값을 변경하기 쉬운 구조가 됩니다."*
55
+
56
+ → **Mutable 타입 외부 노출 = 캡슐화 위반** = 누적 다수.
57
+
58
+ ### 6. 언더바 `_` = backing property 컨벤션 (Thread 5)
59
+
60
+ ```kotlin
61
+ class Player(name: String, _cards: MutableList<Card>)
62
+ ```
63
+
64
+ reviewer:
65
+
66
+ > *"프로퍼티에 언더바(_)를 붙이는 경우는, backing property 기법을 적용할 때 사용하는 컨벤션입니다. 또한, 언더바는 private를 의미하기도 하기 때문에, 외부에서 값을 생성해서 전달해주는 생성자와는 맞지 않습니다."*
67
+
68
+ → **언더바 = backing property 전용 컨벤션 (생성자 인자 X)** = **MCP 룰 `underscore-prefix-backing-property-only` 후보** ⭐ 신규. PR #18 (boogi-woogi) backing property 어휘 결 합류.
69
+
70
+ ### 7. 함수명 = 유효성 체크 시 Boolean 기대 (Thread 6)
71
+
72
+ reviewer: *"함수명만 봤을 때에는 플레이어의 합의 유효성을 체크하는 것으로 보입니다. \"유효성을 체크한다\" 라고 하면, 흔히 Boolean 타입을 떠올리곤 합니다."*
73
+
74
+ → **`isXX` / `checkXX` = Boolean 기대 어휘** = **MCP 룰 `validate-fn-name-implies-boolean` 후보** ⭐⭐. 함수명 의도 일치 누적 15+ PR과 결 합류.
75
+
76
+ ### 8. ACE 책임 위치 (Thread 7)
77
+
78
+ reviewer: *"ACE를 판단하는 로직을 Player가 갖도록 구현해주셨네요. ACE는 어떤 클래스에서 책임을 가지고 있는지 확인해보시고, 이 로직을 어디에 위치해야 적합한지 고민해보면 어떨까요?"*
79
+
80
+ → **Tell-Don't-Ask + Ace 책임 위치** = 누적 다수.
81
+
82
+ ### 9. Score Int 포장 (Thread 8)
83
+
84
+ reviewer: *"Score의 타입이 Int이니, 이 값을 포장해보면 어떨까요?"*
85
+
86
+ → **원시값 포장** = 누적 다수.
87
+
88
+ ### 10. 테스트 함수명 구체성 (Thread 9)
89
+
90
+ reviewer: *"하지만 함수명만 봐서는 한 장인 경우와 두 장인 경우, 그리고 세 장인 경우 어떤 것을 테스트를 하려고 하는지 알기가 어렵습니다. 가령, \"A가 한 장인 경우는 11점이다\" 와 같이 함수명을 좀 더 자세하게 작성해보면 어떨까요?"*
91
+
92
+ → **테스트 함수명 구체성 (입력→기대 명시)** = PR #15 (sujin9 1단계) 동일 가이드 + 누적 다수.
93
+
94
+ ## 대표 인용
95
+
96
+ > [BeokBeok Thread 0]
97
+ > *"init이라는 함수는 대체로 \"값을 초기화한다\" 라는 의미를 가집니다."*
98
+
99
+ → **`init` 함수명 의미 어휘**.
100
+
101
+ > [BeokBeok Thread 5]
102
+ > *"언더바(_)를 붙이는 경우는, backing property 기법을 적용할 때 사용하는 컨벤션입니다."*
103
+
104
+ → **언더바 = backing property 컨벤션 어휘**.
105
+
106
+ ## 얻은 교훈 (보편)
107
+
108
+ 1. **`init` 함수명 의미 (리턴 X 예상)** — **MCP 룰 `init-name-implies-no-return` 후보** ⭐ 신규.
109
+ 2. **언더바 `_` 접두사 = backing property 컨벤션** — **MCP 룰 `underscore-prefix-backing-property-only` 후보** ⭐ 신규.
110
+ 3. **`isXX` / `checkXX` 함수명 = Boolean 기대 어휘** — **MCP 룰 `validate-fn-name-implies-boolean` 후보** ⭐⭐.
111
+ 4. **Mutable 타입 외부 노출 = 캡슐화 위반** = 누적 다수.
112
+ 5. **테스트 함수명 입력→기대 구체성** = PR #15 결 합류.
113
+
114
+ ## 메타 노트
115
+
116
+ - 학생 자가 답변 / 토론 X — *단방향 reviewer 가이드만* (PR #12 학생 첫 1단계 시작 시기).
117
+ - 2025-05-24 시점에서 PR #15 sujin9 1단계 (BeokBeok 동일 reviewer, 같은 시기) 가이드 결과 *3가지 신규 패턴* (`init` / 언더바 / `isXX` Boolean) 명확화 — *동일 reviewer 가이드가 다른 학생에게 반복되며 신규 안티패턴 어휘를 정착시키는 사례*.
@@ -0,0 +1,291 @@
1
+ # PR #38 — [해시] 2단계 블랙잭
2
+
3
+ - **Reviewee:** [@EmilyCh0](https://github.com/EmilyCh0)
4
+ - **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/38
5
+ - **단계:** 2단계
6
+ - **리뷰어:** [@BeokBeok](https://github.com/BeokBeok) (벅벅) — 2023 코호트 reviewer
7
+ - **라인 코멘트:** 18 스레드 — *학생 자가 의문 + 답변 풍부 (9 thread 학생 자가 응답) / runCatching 예측 가능/불가 오류 + 입력 검증 재귀 호출 위험 + 멤버 변수 상태 의존 함수 결과 + Tell-Don't-Ask 메시지 어휘 \"내 X 넘겨줄테니 Y 알려줘\" + 디미터 점(.) 2개 이하 + `lateinit` 초기화 미인지 위험 + Pair vs data class 의미 명확성*
8
+ - **양 단계 완성** (1단계 #12, BeokBeok). EmilyCh0 양 단계 완성.
9
+ - **PR 본문 자가 학습 명시**: *"1단계 미션에서 받은 피드백 반영하고, 컨트롤러에 있던 로직을 도메인으로 분리하려고 새로운 방식을 시도해봤습니다."*
10
+
11
+ ## 잘한 점 (설계 관점)
12
+
13
+ ### 1. PR 본문 자가 학습 시도 명시
14
+
15
+ PR 본문에 *"컨트롤러에 있던 로직을 도메인으로 분리하려고 새로운 방식을 시도"* 라는 1단계 → 2단계 자가 학습 명시.
16
+
17
+ → **PR 본문 자가 학습 진화 명시** = PR #15·#35·#126 결 합류.
18
+
19
+ ### 2. 학생 자가 답변 9 thread (학습 가시화)
20
+
21
+ 18 thread 중 **9 thread 학생 자가 답변** + 코드 수정 보고 — *학습 가시화 최상위 모범*. PR #144 (m6z1)·PR #149 (cucumber99) 결.
22
+
23
+ ### 3. 추가 칭찬
24
+
25
+ - Thread 0: runCatching 반복 구조 활용 (다만 본질 = 예외 처리 위치 고민).
26
+ - Thread 9: 수익률 테스트 코드 칭찬.
27
+
28
+ ## 못한 점 (설계 관점)
29
+
30
+ ### 1. runCatching 예측 가능 vs 불가 오류 (Thread 0) — 학생 자가 깊은 의문 정점
31
+
32
+ reviewer:
33
+
34
+ > *"runCatching 내부는 try-catch로 이루어져있습니다. 코틀린에서는 오류는 아래와 같이 처리하고 있습니다. - 오류가 예상되는 경우 - 오류가 예상되지 않는 경우. 위의 경우에는 어떤 오류인지 고민해보시고, 나아가 어떻게 개선하면 좋을지 고민해보면 어떨까요?"*
35
+
36
+ 학생 자가 답변 (의문 정점):
37
+
38
+ > *"코틀린에서 예측되는 범위의 오류는 null 또는 sealed class의 Failure를 리턴하여 처리하고, 예측되지 않는 범위의 오류는 예외를 throw 해서 처리합니다. **그런데 예측할 수 있는 오류와 예측하기 어려운 오류의 차이를 잘 모르겠습니다.**🥲 현재 코드에서는 UserNameContainer 생성 시 require를 통해 이름 중복과 빈 이름을 검증하고 있는데, 예외를 던지는 require가 아니라 null 또는 Failure로 처리하는 것이 좋을까요?*
39
+ >
40
+ > *예외 처리 방식도 궁금하지만, 예외 처리를 어디에서 하는 것이 좋을지도 궁금합니다. 지금까지는 \"문자열 Int로 파싱\", \"빈 입력\" 정도는 사용자 입력 오류라고 생각해서 InputView에서 toIntOrNull() 등을 사용하여 처리하고 나머지 논리적 오류는 도메인에서 예외를 throw하고 컨트롤러에서 runCatching하는 방식을 사용했는데, 이번 미션을 진행하면서 점점 뷰에서 검증하는 비중이 높아지는 것 같습니다. **뷰에서 아예 검증을 완료한 도메인 객체를 리턴하는 방식까지 생각해봤는데** 이러한 방식에는 문제가 없을지 궁금합니다."*
41
+
42
+ reviewer:
43
+
44
+ > *"너무 어렵게 생각하시는 것이 아닌가 싶습니다. 😅 값을 입력받을 때 아래와 같은 함수를 사용하고 계십니다. `readln().toIntOrNull()`. 즉, Int 타입으로 변환하되, 변환이 되지 않으면 null을 반환한다고 쉽게 이해할 수 있습니다. (...) 반대로 예외를 예측하기 어려운 대표적인 오류는, 0으로 나누는 경우입니다. (...) ArithmeticException이 발생하게 됩니다.*
45
+ >
46
+ > *또한, 함수 내에서 재귀호출을 하는 방식은 굉장히 위험합니다. 예상하지 못한 오류가 발생했을 경우, 영문도 모른채 프로그램이 영원히 종료되지 않을 가능성이 높습니다.*
47
+ >
48
+ > *예외처리를 어디에서 하는지에 대한 여부는 개발자마다 의견이 다르기에 정답이 없습니다. 말씀하신대로 뷰에서 도메인 객체를 리턴하는 방식도 문제가 없습니다. 😅"*
49
+
50
+ → **`predictable-vs-unpredictable-error-distinction`** = **MCP 룰 후보** ⭐⭐⭐:
51
+ - 예측 가능 (`toIntOrNull` = 변환 안되면 null) → 다른 방식으로 처리.
52
+ - 예측 불가 (`0`으로 나누기 → ArithmeticException) → throw.
53
+
54
+ → **`view-as-domain-validator-pattern`** = *뷰에서 검증 완료한 도메인 객체 리턴* 패턴 — 학생 자가 의문 + reviewer 인정 *"정답 없다"*. ⭐⭐ 신규.
55
+
56
+ → **`exception-handling-location-no-right-answer`** = *"개발자마다 의견 다르기에 정답이 없습니다"* — **MCP `oh-my-oop` 핵심 가치 어휘 정점** ⭐⭐⭐ (단일 답 거부).
57
+
58
+ ### 2. 입력 검증 재귀 호출 위험 (Thread 17)
59
+
60
+ ```kotlin
61
+ // LoginView.kt
62
+ fun getBetAmount(): Int {
63
+ val input = readln().toIntOrNull() ?: return getBetAmount()
64
+ require(input > 0)
65
+ return input
66
+ }
67
+ ```
68
+
69
+ reviewer:
70
+
71
+ > *"배팅 금액을 음수를 두 번 입력하게 되면, `return input`은 몇 번 호출될까요? 양수를 입력받기 위한 예외처리로 인해, 프로그램의 오류가 발생하게 됩니다. 이 부분이 재귀 호출을 신중하게 하지 않았기에, 예상하지 못한 오류가 발생하게 됩니다."*
72
+
73
+ (스크린샷 첨부 — 실제 오류 재현)
74
+
75
+ 학생 자가 답변: *"리턴 처리해서 정상 작동하도록 수정했습니다 🥹"*
76
+
77
+ → **`recursive-input-validation-bug`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *입력 검증 재귀 호출 시 예외처리 빠지면 예측 못한 오류*.
78
+
79
+ → **reviewer 스크린샷 = 도메인 룰 증거**: PR #144 결 (m6z1 — reviewer 이미지 첨부) 합류 — *스크린샷 = 버그 재현 증거*. ⭐ 강화.
80
+
81
+ ### 3. 멤버 변수 상태 의존 함수 결과 (Thread 1)
82
+
83
+ ```kotlin
84
+ class BlackJackGame {
85
+ private var deck: Deck = Deck.empty()
86
+ private var players: Players = Players.empty()
87
+
88
+ fun setUpBlackJackGame(...) { deck = ...; players = ... }
89
+ fun playDealerTurn() { /* deck, players 사용 */ }
90
+ }
91
+ ```
92
+
93
+ reviewer:
94
+
95
+ > *"멤버 변수는 클래스 내부에서 데이터에 편하게 접근하고 변경할 수 있는 장점이 있지만, **멤버 변수의 상태에 따라서 함수의 호출 결괏값이 달라지는 단점이 있습니다.** setUpBlackJackGame 함수를 호출하지 않고, playDealerTurn 함수를 호출하게 되면 어떻게 될까요?"*
96
+
97
+ 학생 자가 답변:
98
+
99
+ > *"deck과 players를 갖는 BlackJackGameData를 추가했습니다. setUpBlackJackGame을 통해 BlackJackGameData를 생성할 수 있고, BlackJackGame 내의 나머지 함수가 BlackJackGameData를 인자로 받아 setUpBlackJackGame 이전에 호출할 수 없도록 했습니다."*
100
+
101
+ → **`mutable-member-var-state-dependent-result`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *멤버 변수 상태에 따라 함수 결과 달라짐 = 호출 순서 의존*.
102
+
103
+ → **`function-call-order-dependency-violation`** = **MCP 룰 후보** ⭐⭐⭐ — *호출 순서가 강요되는 API = 잘못된 설계*. 학생 자가 답변 = *데이터 객체 인자 + 컴파일러 강제* 해결.
104
+
105
+ → **타입으로 호출 순서 강제** 어휘 (BlackJackGameData 인자 = setUp 이전 호출 못함) — *type-safety로 invariant 강제* ⭐⭐.
106
+
107
+ ### 4. Pair vs data class 의미 명확성 (Thread 2)
108
+
109
+ reviewer:
110
+
111
+ > *"Pair를 활용해주셨네요. 👍 Pair는 두 개의 타입을 간편하게 정의하고 사용할 수 있는 장점이 있지만, **first가 무엇인지 second가 무엇인지 알기 어렵다는 단점이 있습니다.** Pair 대신 data class를 활용해보면 어떨까요?"*
112
+
113
+ 학생 자가 답변: *"data class로 변경했습니다!"*
114
+
115
+ → **`pair-vs-data-class-naming-clarity`** = **MCP 룰 후보** ⭐⭐ 신규 — *Pair = first/second 의미 잃음*. PR #137·#107 (`typealias vs class`) 결 합류 — *익명 타입 어휘 손실*.
116
+
117
+ ### 5. BlackJackGame god-object (Thread 3) — 디미터 법칙
118
+
119
+ reviewer:
120
+
121
+ > *"BlackJackGame는 Score, Players, Dealer, Cards 등 다른 객체들을 너무 잘 알고 있는 것은 아닌지 고민해보시면 좋을 것 같아요. 각 객체에 메시지를 보내도록 코드를 개선해보면 어떨까요? **대체로 점(.)을 통해서 두세번 접근을 하게 되면, 객체를 능동적으로 관리하고 있는지 고민**해보시면 좋을 것 같아요."*
122
+
123
+ 학생 자가 답변: *"`val dealerScore get() = dealer.cards.score` 와 같은 변수, 함수를 추가하여 BlackJackGame에서 직접 접근하지 않도록 했습니다."*
124
+
125
+ → **god-object + 디미터 점(.) 2-3개 시그널** = 누적 다수.
126
+
127
+ ### 6. Cards → Score 리턴 타입 일치 (Thread 4)
128
+
129
+ reviewer: *"리턴 타입이 Int인데, 이미 구현하신 Score 객체를 활용해보면 어떨까요?"*
130
+
131
+ → **`primitive-return-on-wrapped-value`** = 누적 다수.
132
+
133
+ ### 7. enum exhaustive when (Thread 7)
134
+
135
+ 누적.
136
+
137
+ ### 8. Score 책임 — 상태 + 계산 로직 (Thread 8)
138
+
139
+ reviewer: *"점수를 관리하는 Score 클래스를 잘 구현해주셨네요. 👍 **상태 외에도 점수를 계산하는 로직도 Score 클래스에서 책임을 갖도록** 개선해보면 어떨까요?"*
140
+
141
+ 학생 자가 답변: *"Cards에 있던 점수 계산 로직을 Score로 옮겼습니다!"*
142
+
143
+ → **`value-holder-vs-value-calculator-conflation`** = *값을 가진 객체가 값 계산 책임도 가짐* = 누적 다수.
144
+
145
+ ### 9. 테스트 명명 도메인 어휘 (Thread 9)
146
+
147
+ reviewer:
148
+
149
+ > *"`점수가 21이면 블랙잭이다`. 21은 블랙잭을 상징하니, 버스트가 아니다라는 것보다는 블랙잭임을 나타내는 것이 더 좋을 것 같아요."*
150
+
151
+ → **테스트 명명 = 도메인 어휘 (Bust 아니다 ✗ / 블랙잭이다 ✓)** = 누적 다수.
152
+
153
+ ### 10. 개행 = 흐름 단위 (Thread 11)
154
+
155
+ reviewer: *"프로그램의 흐름 단위로 개행을 해주시면, 좀 더 로직을 이해하는 데 수월합니다."*
156
+
157
+ → **`blank-line-as-flow-boundary`** = ⭐ (가독성 컨벤션).
158
+
159
+ ### 11. 3개 이상 인스턴스 변수 제약 — 임시 방편 vs 본질 (Thread 12)
160
+
161
+ reviewer: *"3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다 — 위 요구사항을 반영해보면 어떨까요?"*
162
+
163
+ 학생 자가 답변: *"score와 numbers를 함수로 변경하여 해결할 수 있을 것 같습니다. **하지만 이게 적절한 해결 방법인지, 이점이 무엇인지 잘 모르겠습니다.**"*
164
+
165
+ reviewer:
166
+
167
+ > *"score와 numbers를 단순히 함수로 바꾸는 것은, **임시 방편일 뿐 해결방법은 아닙니다.** score와 numbers는 isBlackJackScore 함수를 호출하기 위해 필요합니다. 그렇다면, score와 numbers를 멤버 변수로 가지고 있어야 할까요? 멤버 변수로 가지지 않아도 isBlackJackScore 함수를 호출할 수 있도록 개선할 수 있지 않을까요?"*
168
+
169
+ → **`primitive-fn-conversion-as-temporary-fix`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *멤버 변수 제약 위반 시 *함수로 변경* = 임시 방편. 본질 = 멤버 변수 필요성 고민*.
170
+
171
+ → ***임시 방편 vs 본질 해결* 어휘** ⭐⭐ — reviewer 코드 변경 *형태*가 아닌 *왜 멤버 변수인가* 고민 유도.
172
+
173
+ ### 12. Tell-Don't-Ask 메시지 어휘 — *"내 X 넘겨줄테니 Y 알려줘"* (Thread 13)
174
+
175
+ reviewer:
176
+
177
+ > *"isBlackJackScore 함수는 블랙잭 스코어 여부에 대해서 판단해주는 함수로 보입니다. 그렇다면, Score 에 메시지를 보내도록 코드를 개선해보면 어떨까요? **\"내 카드들의 정보를 넘겨줄테니 블랙잭인지 아닌지 알려줘\"**"*
178
+
179
+ 학생 자가 답변:
180
+
181
+ ```kotlin
182
+ fun isBlackJack(numbers: List<Int>, hasAce: Boolean): Boolean =
183
+ (valueOfCards(numbers, hasAce).value == BLACKJACK_CONDITION)
184
+ ```
185
+
186
+ → **`tell-dont-ask-message-vocabulary`** = **MCP 룰 후보** ⭐⭐⭐ 신규 정점 — *"내 X를 넘겨줄테니 Y 알려줘"* 어휘. PR #15·#80 (`onXX` 콜백 어휘)·PR #133 (Player → Score 메시지) 결 합류.
187
+
188
+ → **메시지 어휘 명시화** = MCP `oh-my-oop` 핵심 가치 (책임-역할-협력) 정점.
189
+
190
+ ### 13. sumOf 활용 (Thread 15)
191
+
192
+ reviewer: *"sumOf를 활용하면 좀 더 간결한 코드를 작성할 수 있어요."*
193
+
194
+ → Kotlin stdlib 어휘 = 누적.
195
+
196
+ ### 14. `lateinit` 초기화 위험 (Thread 16)
197
+
198
+ ```kotlin
199
+ class User(val name: String, val cards: Cards, val bettingMoney: Double) {
200
+ var gameResult: GameResult = GameResult.UNKNOWN // 또는 lateinit
201
+ }
202
+ ```
203
+
204
+ reviewer:
205
+
206
+ > *"아래와 같은 코드를 작성하게 되면 어떤 일이 발생하게 될까요? `val user = User(\"커트\", Cards(listOf()), 0.0); user.gameResult.label`. 이 문제를 해결하기 위해 어떻게 개선하면 좋을까요?"*
207
+
208
+ 학생 자가 답변:
209
+
210
+ > *"아래 코드처럼 초기화되지 않은 상태에서는 IllegalStateException이 발생하도록 할 수 있습니다. 하지만 이 경우 별도의 예외 처리를 해주지 않으면 IllegalStateException이 발생했을 때 프로그램이 종료됩니다.*
211
+ >
212
+ > *또는 gameResult를 nullable한 타입으로 바꾸고 초기값을 null로 하는 방법도 있습니다."*
213
+
214
+ reviewer:
215
+
216
+ > *"**지연초기화는 초기화가 안된 상태에서도 접근할 수 있다는 점을 반드시 알고 넘어가셨으면 좋겠습니다.** 초기화가 되지 않은 상태에서 접근하는 경우가 생각보다 많습니다. 😅 그리고, 일반초기화가 아닌 지연초기화를 쓰는 것이 적합한지에 대해서도 고민하시고 사용하시는 것을 권장합니다."*
217
+
218
+ → **`lateinit-initialization-checking-burden`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *`lateinit` 미초기화 접근 위험 + 적합성 자가 고민*. PR #100 (`mutable-state-open-violation`)·PR #18 (`enum-companion-init-order`) 결 합류 — *초기화 시점 어휘 누적 3 PR*.
219
+
220
+ ### 15. 디미터 법칙 — 점(.) 2개 이하 (Thread 17)
221
+
222
+ reviewer (Thread 1 링크):
223
+
224
+ > *"디미터 법칙에 대해서 학습해보시고 코드를 개선해보면 어떨까요?"*
225
+
226
+ 학생 자가 의문:
227
+
228
+ > *"Player에 `getCards()`라는 함수를 만들었는데, **어느 정도까지 디미터 법칙을 준수해야 하는지** 궁금합니다. 아예 Players에 `getDealerCards()`도 만들어서 `player.dealer` 코드까지 없애는 것이 좋을까요?"*
229
+
230
+ reviewer:
231
+
232
+ > *"점(.)을 2개 이하로 유지하는 것을 권장합니다. 오직 인접한 친구에게만 소통한다라고 이해해주시면 될 것 같습니다. 말씀하신 `player.dealer`를 풀어보면, `player.getDealer()` 와 동일하다고 볼 수 있습니다. 가령, \"딜러의 카드들을 출력해줘\" 라고 메시지를 보낸다고 하면, **Dealer 클래스에 카드 리스트를 출력하는 함수를 구현해주시면 됩니다.**"*
233
+
234
+ → **`dot-2-or-fewer-rule`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *디미터 법칙 = 점(.) 2개 이하 + 인접한 친구만 + `a.b` = `a.getB()` 동일성*.
235
+
236
+ → **메시지 어휘 — Tell View (출력 책임 위치)**: *"딜러의 카드들을 출력해줘" = Dealer가 출력 메서드* — Thread 13 (Tell-Don't-Ask 메시지 어휘) 결 합류 정점.
237
+
238
+ ## 대표 인용
239
+
240
+ > [BeokBeok Thread 0]
241
+ > *"예외처리를 어디에서 하는지에 대한 여부는 개발자마다 의견이 다르기에 정답이 없습니다. 말씀하신대로 뷰에서 도메인 객체를 리턴하는 방식도 문제가 없습니다."*
242
+
243
+ → **단일 답 거부 + 학생 대안 존중** — MCP `oh-my-oop` 핵심 가치 어휘.
244
+
245
+ > [EmilyCh0 Thread 0]
246
+ > *"예측할 수 있는 오류와 예측하기 어려운 오류의 차이를 잘 모르겠습니다."*
247
+
248
+ → **학생 자가 깊은 의문 어휘**.
249
+
250
+ > [BeokBeok Thread 1]
251
+ > *"멤버 변수의 상태에 따라서 함수의 호출 결괏값이 달라지는 단점이 있습니다."*
252
+
253
+ → **멤버 변수 상태 의존 = 호출 순서 의존 어휘**.
254
+
255
+ > [BeokBeok Thread 12]
256
+ > *"단순히 함수로 바꾸는 것은, 임시 방편일 뿐 해결방법은 아닙니다."*
257
+
258
+ → **임시 방편 vs 본질 어휘**.
259
+
260
+ > [BeokBeok Thread 13]
261
+ > *"\"내 카드들의 정보를 넘겨줄테니 블랙잭인지 아닌지 알려줘\""*
262
+
263
+ → **Tell-Don't-Ask 메시지 어휘 정점**.
264
+
265
+ > [EmilyCh0 Thread 17]
266
+ > *"어느 정도까지 디미터 법칙을 준수해야 하는지 궁금합니다."*
267
+
268
+ → **학생 자가 *정도* 의문 어휘** = MCP `oh-my-oop` 학생 측 메타 어휘.
269
+
270
+ > [BeokBeok Thread 17]
271
+ > *"점(.)을 2개 이하로 유지하는 것을 권장합니다."*
272
+
273
+ → **디미터 점(.) 2개 이하 어휘**.
274
+
275
+ ## 얻은 교훈 (보편)
276
+
277
+ 1. **예측 가능 vs 불가 오류 구분** — **MCP 룰 `predictable-vs-unpredictable-error-distinction` 후보** ⭐⭐⭐.
278
+ 2. **입력 검증 재귀 호출 위험** — **MCP 룰 `recursive-input-validation-bug` 후보** ⭐⭐⭐.
279
+ 3. **멤버 변수 상태 의존 = 호출 순서 강요** — **MCP 룰 `mutable-member-var-state-dependent-result` + `function-call-order-dependency-violation` 후보** ⭐⭐⭐.
280
+ 4. **임시 방편 vs 본질 해결** — **MCP 룰 `primitive-fn-conversion-as-temporary-fix` 후보** ⭐⭐⭐.
281
+ 5. **Tell-Don't-Ask 메시지 어휘 *"내 X 넘겨줄테니 Y 알려줘"*** — **MCP 룰 `tell-dont-ask-message-vocabulary` 후보** ⭐⭐⭐ 정점.
282
+ 6. **디미터 점(.) 2개 이하** — **MCP 룰 `dot-2-or-fewer-rule` 후보** ⭐⭐⭐.
283
+ 7. **`lateinit` 초기화 미인지 위험** — **MCP 룰 `lateinit-initialization-checking-burden` 후보** ⭐⭐⭐.
284
+ 8. **Pair vs data class 의미 명확성** — **MCP 룰 `pair-vs-data-class-naming-clarity` 후보** ⭐⭐.
285
+ 9. **예외 처리 위치 정답 없음** — *MCP `oh-my-oop` 핵심 가치 어휘*.
286
+
287
+ ## 메타 노트
288
+
289
+ - **EmilyCh0 양 단계 완성 (1단계 #12 → 2단계 #38)** — 1단계 단방향 가이드만 → 2단계 9 thread 학생 자가 답변 + PR 본문 자가 학습 진화 명시 → *학습 가시화 진화*. PR #144 (m6z1 *셀프 코드 리뷰*) 결.
290
+ - **BeokBeok reviewer 다년 활동 강화** — 1단계 #12·#15 + 2단계 #38 + 누적 시기 코호트.
291
+ - **메타 케이스 6번째 — 단방향 가이드 → 학생 자가 답변 진화 학습 시간성** (#12 단방향 0 → #38 자가 답변 9 thread): PR #71 → #96 (Hogu59 1년 늦은 2단계) 결과 *시간성 학습 모범* 다른 축.