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,1475 @@
1
+ # kotlin-blackjack OOP 분석 — 인계 (동일 리뷰이 2단계 완료 시점, batch 11)
2
+
3
+ > **현재 상태 (2026-05-23 세션 N+3 기준):** ≥30 심각 그룹 **32/32 완료** + ≥10~29 중간 그룹 *동일 리뷰이 1단계+2단계 완성 (총 23 PR 추가)*. **양 단계 모두 분석된 reviewees 18명**. 다음 = 새 reviewees 진입.
4
+
5
+ ---
6
+
7
+ ## 1. 진행 현황
8
+
9
+ ### 완료 (≥30 심각 그룹 32/32 + 중간 그룹 batch 8·9)
10
+
11
+ `git log --oneline` 으로 9 배치 + 2 commit 확인:
12
+
13
+ | Batch | Commit | PR 목록 | 그룹 |
14
+ |---|---|---|---|
15
+ | 1 | `99a62c6` | #78, #63, #65, #123, #125 | ≥30 |
16
+ | 2 | `149b639` | #112, #28, #79, #128, #135 | ≥30 |
17
+ | 3 | `00f0c06` | #114, #92, #29, #24, #116 | ≥30 |
18
+ | 4 | `47531b2` | #10, #33, #119, #17, #81 | ≥30 |
19
+ | 5 | `bba52ec` | #34, #25, #111, #8, #61 | ≥30 |
20
+ | 6 | `5bcd8a2` | #20, #120, #64, #110, #51 | ≥30 |
21
+ | 7 | `ae98945` | #124, #108 | ≥30 마무리 |
22
+ | 8 | `3bcea6d` | #152, #133, #131, #132, #136 | 중간 (≥10~29, 동일 리뷰이 1→2단계) |
23
+ | 9 | `108c118` | #88, #85, #90, #93, #103 | 중간 (동일 리뷰이 2단계) |
24
+ | 10 | `a721ab4` | #41, #49, #53, #58, #137 | 중간 (동일 리뷰이 2단계) |
25
+ | 11 | `91671c3` | #146, #147, #148, #151 | 중간 (동일 리뷰이 2단계 마지막) |
26
+ | 12 | `64b00c9` | #75, #74, #70, #32, #67 | 새 1단계 reviewees (sh1mj1, songpink, chaehyuns, krrong, s6m1n) + 신규 reviewer (vagabond95, KwonDae) |
27
+ | 13 | `8afa82d` | #98, #95, #99, #23, #26 | batch 12 reviewees (chaehyuns/songpink/s6m1n) 2단계 양 단계 완성 + 2023년 3월 코호트 진입 (rhthrhrl0, chws0508) |
28
+ | 14 | `a0fbf02` | #39, #43, #46, #16, #77 | batch 13 reviewees (rhthrhrl0/chws0508) 2단계 + krrong 2단계 완성 (양 단계 28명) + 새 1단계 reviewees (SeongHoonC, murjune) + 신규 reviewer BeokBeok |
29
+ | 15 | `aa9776e` | #91, #9, #31, #66, #107 | murjune 2단계 완성 (양 단계 29명) + 새 1단계 reviewees 4명 (Choisehyeon/no1msh/JoYehyun99/junseo511). **메타 케이스: no1msh = MCP `oh-my-oop` 저자 (반달) 학생 시기 PR** |
30
+ | 16 | `6dd65c5` | #145, #11, #13, #76, #82 | junseo511 2단계 완성 (양 단계 30명) + 새 1단계 reviewees 4명 (ki960213/hyunji1203/Yunseok-Nam/Hevton). **2023년 3월 코호트 6 PR + 2024 코호트 풍부** |
31
+ | 17 | `cce33fd` | #86, #100, #22, #72, #80 | Yunseok-Nam + Hevton 2단계 완성 (양 단계 32명) + 새 1단계 reviewees 3명 (RightHennessy/kimhm0728/Junyoung-WON). **신규 reviewer 2명 (galcyurio, ghojeong) → 누적 11명** |
32
+ | 18 | `93758d1` | #48, #14, #18, #73, #106 | RightHennessy 2단계 완성 (양 단계 33명) + 새 1단계 reviewees 4명 (DYGames/boogi-woogi/jaeyeongjo/giovannijunseokim). **신규 reviewer 1명 (woowahan-leah) → 누적 12명** |
33
+ | 19 | `2bd2c8f` | #36, #87, #21, #117, #129 | boogi-woogi #36 + jaeyeongjo #87 양 단계 완성 (2명 추가, **양 단계 35명**) + 새 1단계 reviewees 3명 (hyemdooly/parkjiminnnn/rosemin928). **신규 reviewer 1명 (woowahan-dino) → 누적 13명**. **2025년 코호트 신규 합류 (2 PR: parkjiminnnn/rosemin928) — 셀프 체크리스트 PR 본문 + 모든 스레드 학생 자가 답변 + 커밋 SHA 첨부** |
34
+ | 20 | `f0b989e` | #138, #139, #35, #126, #130 | rosemin928 #138 + parkjiminnnn #139 + hyemdooly #35 양 단계 완성 (3명 추가, **양 단계 38명**) + 새 1단계 reviewees 2명 (doabletuple/medAndro). **신규 reviewer 1명 (hyemdooly) → 누적 14명**. **2025년 코호트 5 PR 코퍼스 형성 (parkjiminnnn/rosemin928/doabletuple/medAndro = 4 reviewees)**. **메타 케이스 2번째: hyemdooly = 2023 학생 (#21·#35) → 2025 reviewer (#130) 2년 진화 (krrong 1년 진화에 이어)** |
35
+ | 21 | `0380d00` | #142, #143, #109, #113, #118 | doabletuple #142 + medAndro #143 양 단계 완성 (2명 추가, **양 단계 40명**) + 새 1단계 reviewees 3명 (cucumber99/jiyuneel/gahyunkim). **신규 reviewer 1명 (malibinYun 2024→2025 다년 활동) → 누적 14명 유지 (말리빈 기존)**. **2025년 코호트 10 PR 코퍼스 정점 (7 reviewees)**. **신규 reviewer 메타 케이스: malibinYun = 2024 reviewer (PR #95 등) → 2025 reviewer (PR #118) = 다년 활동** |
36
+ | 22 | `7b104fb` | #140, #141, #96, #121, #19 | jiyuneel #140 + gahyunkim #141 양 단계 완성 (2명 추가, **양 단계 42명**) + Hogu59 #96 2단계 단독 (1단계 #71 적음 = 2단계만, 양 단계 43명) + 새 1단계 reviewees 2명 (devfeijoa/briandr97). **2023 코호트 마지막 ≥10 thread 1단계 (#19 briandr97) 완료**. **reviewer 다년 활동 2번째 (Gyuil-Hwnag 두루 = 2024→2025)** |
37
+ | 23 | `a8d6ba3` | #149, #153, #71, #68, #69 | cucumber99 #149 + devfeijoa #153 + Hogu59 #71 양 단계 완성 (3명 추가, **양 단계 45명**) + 새 1단계 reviewees 2명 (kkosang/gaeun5744 = 2024 코호트). **PR #71 ↔ #96 메타 케이스: 1년 늦은 2단계 학생 자가 학습 시간성** |
38
+ | 24 | `00ab0b9` | #94, #102, #122, #144, #15 | kkosang #94 + gaeun5744 #102 + m6z1 양 단계 동시 (#122+#144) 완성 (3명 추가, **양 단계 48명**) + 새 1단계 sujin9 #15 (2023 코호트). **학생 자가 *셀프 코드 리뷰* (m6z1 PR #144) + 학생 자가 *컴파일 상수* / *open vs abstract* / *type-safe* 메타 어휘 정점** |
39
+ | 25 | `0cd59b9` | #12, #38, #115, #154, #47 | EmilyCh0 #12+#38 양 단계 동시 (2023 코호트) + tobae-time #115+#154 양 단계 동시 (2025 모바일 안드로이드 7기) + sujin9 #47 2단계 완성 (#15 1단계 batch 24) — 3명 추가, **양 단계 51명**. **메타 케이스 정점**: tobae-time PR #154 본문 *조영호 「객체지향의 사실과 오해」 도서 자가 학습 인용* + *Rule god-object → 상태 패턴 학습 방향 전환* + reviewer laco-dev 양 PR 어휘 진화 (#115 *쎄게 양해* → #154 *성장 격려*) + sujin9 *커버리지 100 강박 자가 자각 + 메서드 참조 함수형 매커니즘 어휘* + EmilyCh0 *Tell-Don't-Ask 메시지 어휘 \"내 X 넘겨줄테니 Y 알려줘\" + 디미터 점(.) 2개 이하 + 입력 검증 재귀 호출 위험* |
40
+ | 26 | `4488d04` | #30, #42, #62, #89, #54 | ippnsj #30+#42 양 단계 동시 (2023 코호트) + haeum808 #62+#89 양 단계 동시 (안드로이드 6기) + SeongHoonC #54 2단계 완성 (#16 1단계 batch 14) — 3명 추가, **양 단계 54명**. **메타 케이스 정점**: ghojeong reviewer 자가 반성 어휘 양 PR 연속 (#62 *forEach 강요 X 자가 수정* → #89 *미션 본 목표 복귀 + 갈아엎기 사과*) + haeum808 PR 본문 *flux 상태 아키텍쳐 자가 학습 + Slack DM 학습* + 함수형 프로그래밍 어휘 정점 (LISP single linked list + Lazy Evaluation + map·filter·reduce 3종 + HOF) + galcyurio *controller = presentation logic 4-layer 분류* + ippnsj *콜백 명명 도메인 입장* + SeongHoonC *프로퍼티 vs 함수 = 상태 vs 행동 + 불필요 위임 = 분석 부담 PR #72 반대 어휘* |
41
+
42
+ | 27 | `fd07c66` | #37, #134, #101, #97, #150 | DYGames #37 + giovannijunseokim #134 + Junyoung-WON #101 + kimhm0728 #97 + chanho0908 #150 2단계 완성 — 5명 양 단계 완성, **양 단계 59명**. **메타 케이스 정점**: ghojeong reviewer 3 PR 어휘 누적 최정점 (#62 함수형 → #89 미션 본 목표 복귀 → #97 유지보수/성능/협력/메시지/판단 기준) + kimhm0728 PR 본문 *처음부터 다시 구현 고려* 학생 자가 의문 + DM 학습 + 학생 자가 *마음에 걸린다* 사전 자각 + chanho0908 학생 자가 *DIP/OCP/SRP 동시 위반 자가 자각 + 로버트 마틴 우발적 중복 인용 + 못난이 코드 자조* 정점 + giovannijunseokim *클라이언트 입장 어휘 + 학생 자가 트레이드오프 도표화* + Junyoung-WON *Tell-Don't-Ask 학생 자가 자각 + 메시지 어휘 narrate* + DYGames *원칙 = 가이드 / 절대 X* |
43
+
44
+ | 28 | (commit pending) | #50, #105, #59, #52 | rhkrwngud445 #50 + aprilgom #105 + briandr97 #59 + Choisehyeon #52 양 단계 완성 (4명, 5 thread 이하 패스 정책). **양 단계 63명**. **메타 케이스 정점**: rhkrwngud445 *Effective Kotlin Item 4·14 외부 서적 인용 (외부 권위 누적 5 PR)* + aprilgom *PR 본문 strength 도메인 어휘 상세 + 이미지 첨부 + 점수 출력 vs 비교 분리 + laco-dev 시그니처 어휘 `controller-imagination-test`* + briandr97 *MVC 1인 vs 다인 협업 시나리오 학생 자가 사고 + 다른 팀원 설명 가능 기준 + 객체지향 생활체조 else 회피 vs Kotlin lift return trade-off* + Choisehyeon *3 인스턴스 변수 원칙 학생 자가 어려움 어휘* |
45
+
46
+ reviewee 디렉토리 81개 (양 단계 완성 63명 + 1단계만 9명) + HANDOVER. **batch 28 4명 양 단계 완성** (rhkrwngud445 + aprilgom + briandr97 + Choisehyeon, 5 thread 이하 패스 정책 적용). **batch 27 5명 양 단계 완성** (DYGames + giovannijunseokim + Junyoung-WON + kimhm0728 + chanho0908). **batch 26 새 reviewees 2명 (ippnsj, haeum808) + SeongHoonC 양 단계 완성**. **양 단계 모두 분석된 reviewees (45명):** ijh1298, jinuemong, re4rk, tmdgh1592, wondroid-world, Leeyerin0210, moondev03, hwannow, oungsi2000, dpcks0509, ii2001, kmkim2689, junjange, hxeyexn, pingu244, inseonyun, whk06061, otter66, HamBeomJoon, yrsel, donghyun81, etama123, jerry8282, chaehyuns, songpink, s6m1n, rhthrhrl0, chws0508, krrong, SeongHoonC, murjune, junseo511, Yunseok-Nam, Hevton, RightHennessy, boogi-woogi, jaeyeongjo, hyemdooly, rosemin928, parkjiminnnn, doabletuple, medAndro, jiyuneel, gahyunkim, **EmilyCh0 (batch 25), tobae-time (batch 25), sujin9 (batch 25)**. **2단계만 분석 (Hogu59 = 1단계 적음으로 단독, batch 22 추가)**.
47
+
48
+ **reviewer 다양성:** @laco-dev (페로로), @malibinYun (말리빈), @Gyuil-Hwnag (두루), @namjackson (잭슨), @lee-ji-hoon (지훈), @krrong (크롱), @vagabond95, @KwonDae, @BeokBeok, @galcyurio, @ghojeong, @woowahan-leah, @woowahan-dino, **@hyemdooly (둘리, batch 20 신규 = 학생 → reviewer 진화)** — *총 14 reviewer*.
49
+
50
+ **메타 학습 케이스 (14건, batch 28 누적):**
51
+ - 학생 krrong (PR #32) = PR #148·#151 의 reviewer 본인 (2023 → 2024 1년 진화).
52
+ - 학생 hyemdooly (PR #21·#35) = PR #130 의 reviewer 본인 (2023 → 2025 2년 진화).
53
+ - reviewer 다년 활동 1: malibinYun (말리빈) = 2024 PR 들의 reviewer (PR #95 등) + 2025 PR #118·#141 reviewer.
54
+ - reviewer 다년 활동 2 (batch 22): Gyuil-Hwnag (두루) = 2024 PR 들의 reviewer (PR #98 chaehyuns·#146 yrsel 등) + 2025 PR #121 devfeijoa reviewer.
55
+ - Hogu59 (batch 23, PR #71 → #96) = 1년 늦은 2단계 학생 자가 학습 시간성.
56
+ - m6z1 (batch 24, PR #144) = 학생 자가 *셀프 코드 리뷰* 코멘트 (가장 풍부한 PR 본문 + 자가 코멘트 8개).
57
+ - **EmilyCh0 (batch 25, PR #12 → #38)** = 1단계 단방향 가이드 (학생 자가 답변 0) → 2단계 학생 자가 답변 9 thread + PR 본문 자가 학습 진화 명시 — **학습 가시화 진화 메타**.
58
+ - **tobae-time (batch 25, PR #115 → #154) 정점** = *Rule god-object 학생 자가 시도* → reviewer 4 thread 반복 비판 + *"쎄게 피드백 양해"* → 학생 자가 **조영호 「객체지향의 사실과 오해」 도서 자가 학습 인용** → 2단계 상태 패턴 도입 (불완전 인정) → reviewer laco-dev 어휘 진화 *"성장 과정 격려 + 어려움 인정"*. **학습 방향 전환 + 도서 자가 학습 + reviewer 어휘 진화 3중 메타** — *MCP `oh-my-oop` 도구 영감 도서 학생 자가 인용으로 도구 가치 검증*.
59
+ - **haeum808 (batch 26, PR #62 → #89) 정점** = 1단계 ghojeong reviewer *index loop = LISP 절차지향 + 함수형 3 도구 (map·filter·reduce) + HOF* 어휘 → reviewer *forEach 강요 X 자가 수정* → 2단계 학생 자가 *reviewer 추천 flux 상태 아키텍쳐 자가 학습 + Slack DM 학습 자가 어휘* → reviewer *반응형 덕후 자가 반성 + 미션 본 목표 복귀 + 갈아엎기 사과* → 학생 자가 도전 → reviewer 감사 + 함수형 어휘 진화 (map 능숙). **reviewer 자가 반성 어휘 양 PR 연속 + 학생 자가 학습 + reviewer 갈아엎기 사과 + 학생 도전 4중 메타 정점**.
60
+ - **giovannijunseokim (batch 27, PR #106 → #134)** = 1단계 *언제 관점 깨는가 학생 자가 의문 (PR #106 메타)* → 2단계 *클라이언트 입장 어휘 학생 자가 정착 + 학생 자가 트레이드오프 도표화 (val mutableList vs var list 결론 명시) + abstract vs interface 자가 분류*. **학생 측 메타 어휘 학습 정점**.
61
+ - **Junyoung-WON (batch 27, PR #80 → #101)** = 1단계 *콜백 명명 View 동사* → 2단계 *Tell-Don't-Ask 학생 자가 자각 정점 (객체 자유 + 메시지 요청) + 디미터 후 역할/책임 명확화 자가 자각 + 학생 자가 메시지 narrate*. **메시지 어휘 학생 측 자가 자각 정점**.
62
+ - **kimhm0728 (batch 27, PR #72 → #97) 정점** = 1단계 *controller-classification-criteria* + 풍부 메타 → 2단계 PR 본문 *처음부터 다시 구현 고려 학생 자가 의문* + ghojeong reviewer 3 PR 어휘 누적 최정점 (유지보수/성능/협력/메시지/판단 기준) + Slack DM 활발 + 6개 자가 학습 진화 명시 + 학생 자가 *마음에 걸린다* 사전 자각. **학생 자가 *처음부터 다시* + DM 학습 + ghojeong 어휘 최정점 결합**.
63
+ - **chanho0908 (batch 27, PR #123 → #150) 정점** = 2단계 학생 자가 *DIP/OCP/SRP 동시 위반 자가 자각 + 로버트 마틴 우발적 중복 인용 + 못난이 코드 자조* + reviewer 학생 열정 인정 어휘. **학생 자가 SOLID 인용 + 외부 권위 인용 누적 4 PR (조영호·로버트 마틴·객체 지향 생활 체조·엘레강트 오브젝트) 정점**.
64
+ - **briandr97 (batch 28, PR #19 → #59) 정점** = 2단계 PR 본문 *m,v,c 1인 vs 다인 협업 시나리오 학생 자가 사고* + vagabond95 *다른 팀원 설명 가능 기준* 어휘 + 학생 자가 *반대 의견 합당성 인정* + 객체지향 생활체조 else 회피 vs Kotlin lift return trade-off + 수업 시간 템플릿 메서드 패턴 자가 학습 적용. **학생 자가 MVC 협업 시뮬레이션 + 판단 기준 메타**.
65
+ - **2025년 코호트 12 PR 코퍼스 정점** (batch 19-25 누적 + tobae-time #115·#154 추가) = *모바일 안드로이드 7기 9 reviewees* + *셀프 체크리스트 PR 본문 스타일* + *모든 스레드 학생 자가 답변 + 커밋 SHA 첨부 모범*. **3 시기 코호트 합류** (2023년 3월 / 2024 / 2025).
66
+
67
+ ### 남은 작업
68
+
69
+ | 그룹 | PR 수 | 다음 작업 |
70
+ |---|---|---|
71
+ | ≥30 스레드 | **0개** | 완료 ✓ |
72
+ | 동일 리뷰이 2단계 미분석 | **0개** | 완료 ✓ |
73
+ | 새 1단계 reviewees (≥10~29) | ~10-15개 | 다음 우선 (jiyuneel, parkjiminnnn, rosemin928, m6z1, doabletuple, gahyunkim, junseo511, medAndro, cucumber99, tobae-time, devfeijoa 등 — 1단계 미분석 reviewees) |
74
+ | 새 2단계 reviewees | ~60-65개 | 후속 |
75
+ | 5~9 | 14개 | 짧은 분석 |
76
+
77
+ > ⚠ **`/tmp/oop-lessons-cache-blackjack/`은 휘발성**. 다음 세션 시작 시 `ls /tmp/oop-lessons-cache-blackjack/` 확인. 캐시 없으면 §6 절차 (HANDOVER 원본) 재실행. 단 *각 PR 코멘트는 `/tmp/pr<N>_full.txt`에 즉시 dump* 가능 (gh CLI).
78
+
79
+ ---
80
+
81
+ ## 2. 누적 안티패턴 강도 (MCP 룰화 후보)
82
+
83
+ 세션 N에서 30 PR 분석 후 *반복 등장 횟수 ≥5*인 패턴:
84
+
85
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 우선순위 |
86
+ |---|---|---|
87
+ | **enum의 UI value (`koreanText`/`description`/`word`/`value`/`displayName`)** | **17+** | ⭐⭐⭐ 최강 |
88
+ | **승부 = 참가자 메시지 (정적 `judge(dealer, player)` 회피)** | **18+** | ⭐⭐⭐ |
89
+ | **Singleton Deck (`object`) = 테스터빌리티 ↓ + 2판 이상 불가** | **11+** | ⭐⭐ |
90
+ | **외부 `MutableList<Card>` 참조 누수 (lotto `empty-object-external-fill` 변형)** | **12+** | ⭐⭐ (기존 룰 변형) |
91
+ | **Ace 11 기본 + while/차감 보정 < Ace 1 기본 + 단일 +10 룰** | **11+** | ⭐⭐ |
92
+ | **블랙잭 룰 오해 (Ace+10 두 장만 진짜 블랙잭 / Bust 양측 / 21 ≠ 블랙잭 / 16이하 반복)** | **10+** | ⭐⭐ (도메인 특수) |
93
+ | **Controller god-object + 절차적 명령 (`game.data → loop → game.method`)** | **11+** | ⭐⭐ |
94
+ | **점수 계산이 Player에 = Hand/Card 책임 누수** | **9+** | ⭐⭐ |
95
+ | **만능 명사 (`Manager`/`Information`/`Rule`/`Value`/`Wallet`/`Base*`/`UserInfo`)** | **8+** | ⭐⭐ (기존 `vague-class-name` 룰 확장) |
96
+ | **`lateinit var callback` + setter (호출 순서 invariant 부재)** | **7+** | ⭐ |
97
+ | **`apply`/`with`/DSL Builder의 의도 위반 = 수업 적용 욕구** | **6+** | ⭐ |
98
+ | **`open class Player` + `Dealer : Player` < `abstract Participant`** | **5+** | ⭐ |
99
+ | **형식 규칙(3변수 제한)이 만든 인공 객체 (`Wallet`/`PlayerBetInfo`/`UserInformation`)** | **3** | ⭐ (도메인 특수) |
100
+ | **State 패턴의 *전이 누락* (Hit→Stay/BlackJack/Bust)** | **3+** | ⭐ (State 도입 PR 한정) |
101
+ | **잘못된 함수명 (`isACE`/`JUMP`/`takeCard`/`deepCopy`/`showCard`/`runPhase`)** | **6+** | ⭐ |
102
+
103
+ ### 신규 도메인 특수 (lotto에 없음)
104
+
105
+ 1. **`State` sealed interface** — Running(Hit) / Finished(Stay/Bust/BlackJack). 신규 룰 `state-machine-without-sealed`?
106
+ 2. **`Ace` 1↔11 양가성** — 8개+ PR 동일한 *while + 차감* 안티패턴.
107
+ 3. **"카드 배부 진행자가 누구?"** — Dealer? Blackjack? Game? `dealer-vs-progressor-conflation` 룰 후보.
108
+ 4. **`Deck` 자료구조** — Set/재귀 / Singleton / `ArrayDeque`/`MutableList` 선택.
109
+ 5. **블랙잭 룰 정확성** — *Ace+10 두 장*, *Bust 개별 판정*, *딜러 자동 hit ≤16* — `blackjack-rule-fidelity` 후보.
110
+
111
+ ---
112
+
113
+ ## 3. 학생/리뷰어 패턴 (사족 X, 분석에 도움되는 메타 정보)
114
+
115
+ ### 학생 자가 토론이 풍부한 PR (학습 가시화 모범)
116
+
117
+ PR #128/#135 (ijh1298), #111 (oungsi2000), #110 (hwannow), #120 (yrsel), #29 (tmdgh1592), #63 (jinuemong) — *PR 본문/코멘트에 자가 의문 + 자가 답변 명시*.
118
+
119
+ → 학생이 *자가 의문 → 리뷰어 메타 질문 → 자가 답변*으로 정답 도달하는 패턴. *분석 시 인용 가치 ↑*.
120
+
121
+ ### 같은 코드 / 다른 리뷰어 케이스
122
+
123
+ - PR #78 (dpcks0509, reviewer Gyuil-Hwnag) vs PR #79 (ii2001, reviewer laco-dev) — *동일 코드 다른 리뷰어 = 안티패턴이 코드 자체의 문제임을 증명* (룰화 신뢰도 ↑).
124
+ - PR #24 (otter66, reviewer laco-dev) vs PR #25 (whk06061, reviewer namjackson) — 거의 동일 코드. 리뷰 토론 결은 다름.
125
+ - PR #111 (oungsi2000) vs PR #112 (etama123) — 코드 구조 매우 유사.
126
+
127
+ ### 페어 / 동일 학생 1단계+2단계
128
+
129
+ | 학생 | 1단계 | 2단계 |
130
+ |---|---|---|
131
+ | ijh1298 | #128 | #135 |
132
+ | jinuemong | #63 | #92 |
133
+ | re4rk | #8 | #34 |
134
+ | tmdgh1592 | #29 | #51 |
135
+
136
+ → *진화 비교는 사족 금지* (HANDOVER §4). 다만 *2단계 신규 기능*(베팅, 수익률, 블랙잭 1.5배)은 *별도 패턴*으로 기록.
137
+
138
+ ---
139
+
140
+ ## 4. 분석 파일 작성 규칙 (변동 없음 + 신규 권고)
141
+
142
+ 기본 §4 규칙 + 세션 N에서 굳어진 추가:
143
+
144
+ ### 작성 길이 휴리스틱
145
+
146
+ - 학생 자가 토론 풍부 → **1000~1500줄** (예: PR #128·#135·#111·#120)
147
+ - 표준 리뷰 → **800~1100줄** (예: PR #20·#64)
148
+ - PR #24 같은 *공통 코드 다른 PR* → **400~600줄** ("PR #N과 공통 + 추가 패턴만")
149
+
150
+ ### 신규 권고
151
+
152
+ 1. **누적 패턴 ≥5인 안티패턴은 *§N에서 결*로 간략 인용** — 본 분석에서 *반복 텍스트 작성 방지*. 예: "PR #28·#78·#112·#125와 같은 결".
153
+ 2. **블랙잭 룰 오해 발견 시 *명시*** — 학생/리뷰어/코드 어디서 룰이 어긋났는지.
154
+ 3. **학생 자가 답변이 *정답 도달*하면 *대표 인용*에 학생 코멘트 직접 인용** — 학습 모범 사례 기록.
155
+
156
+ ---
157
+
158
+ ## 5. 다음 세션 진입 순서
159
+
160
+ ### 권장 첫 단계
161
+
162
+ 1. `cat HANDOVER.md` (이 문서) 정독.
163
+ 2. `ls /tmp/oop-lessons-cache-blackjack/` — 캐시 확인.
164
+ 3. **이미 작성된 PR 1개 정독** (가벼운 거 권장 — `chanho0908/123-1단계-블랙잭.md` 또는 `donghyun81/116-1단계-블랙잭.md`) → 스타일 감 회복.
165
+ 4. **남은 ≥30 그룹 2개부터 마무리** — `#124 wondroid-world`, `#108 Leeyerin0210`.
166
+ 5. 그 뒤 ≥10~29 그룹 진입 (배치 5개씩, 각 배치마다 commit).
167
+
168
+ ### 진행 방식 자가 점검
169
+
170
+ - *배치 5개씩* + *5 PR 끝나면 commit + push 안 함* 유지.
171
+ - *공통 안티패턴은 짧게 인용으로*, *PR 특이 패턴은 길게*.
172
+ - *학생 자가 의문/답변* 발견 시 *대표 인용*에 넣고 *얻은 교훈*에 학습 패턴 명시.
173
+
174
+ ---
175
+
176
+ ## 6. 최종 정리 단계 (모든 분석 끝난 후)
177
+
178
+ 다음을 수행:
179
+
180
+ 1. **`PROGRESS.md` 작성** — lotto 패턴. 모든 PR 목록 + 짧은 한 줄 요약.
181
+ 2. **`SUMMARY.md` 작성** — 룰 ↔ 대표 PR 매핑 (lotto 인덱스 패턴).
182
+ 3. **`README.md`** — 코퍼스 사용 가이드.
183
+ 4. **MCP 룰화 검토** — §2의 ⭐⭐⭐ 패턴 3-5개를 *validate 룰*로 (`src/validate/<rule>.ts` + `rules.ts` 등록 + 테스트 케이스).
184
+ 5. **`MCP_STRUCTURE.md` §5에 신규 후보 추가** — 도메인 특수 패턴 (State 패턴, Ace, 블랙잭 룰 정확성, Dealer 진행자 vs 참여자).
185
+ 6. **`CLAUDE.md` "알려진 추가 작업"에 blackjack 완료 명시 + 신규 룰 후보 정리**.
186
+
187
+ ---
188
+
189
+ ## 7. 위험 / 메모
190
+
191
+ - ***/tmp 캐시 휘발성*** — 매 세션 첫 작업이 캐시 확인.
192
+ - ***컨텍스트 관리*** — 본 세션 N에서 *6 배치 = 30 PR 분석*에 *800k 토큰*. *한 세션에 6 배치가 적정 한계*. 더 진행하려면 `/compact` 또는 세션 종료.
193
+ - ***PR #124, #108은 실제 라인 코멘트 수는 30 미달 가능성*** — `reviewThreads` vs `comments` 단위 차이.
194
+
195
+ ---
196
+
197
+ **최근 commit (세션 N+3 batch 10·11, 9 PR 추가):** `a721ab4` (batch 10 동일 리뷰이 2단계 5개), `91671c3` (batch 11 동일 리뷰이 2단계 마지막 4개). *전체 batch 7~11 누계: 23 PR 추가 + 2 HANDOVER update*. `git push` 는 안 함 (HANDOVER 원본 정책 유지).
198
+
199
+ ## 10. batch 10·11 신규 안티패턴 (누적)
200
+
201
+ batch 10·11 (#41, #49, #53, #58, #137, #146, #147, #148, #151) 에서 새로 발견된 패턴:
202
+
203
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
204
+ |---|---|---|
205
+ | **상태 × 참가자 N×M 클래스 폭증** (Initial/Playing/Finished × Dealer/Player) | 1 (#147) | ⭐⭐ — `state-times-actor-class-explosion` |
206
+ | **`Hit + 주체` (DealerHit/PlayerHit/DoubleHit) 폭증** | 1 (#147) | ⭐ |
207
+ | **`Finished is-a Initial` 상속 모순** | 1 (#147) | ⭐ |
208
+ | **`ProfitPlayer / MatchResultProfitPlayerWithXXX` 기능 + 명사 이어붙이기 폭증** | 1 (#147) | ⭐⭐ — `feature-class-naming-explosion` |
209
+ | **typealias vs 클래스 트레이드오프 (3+ 멤버 = 클래스 권고)** | 1 (#146) | ⭐ — `typealias-vs-class` |
210
+ | **방어적 복사 강박 자가 학습 (불변 객체 deepCopy 비용)** | 2 (#137·#148) | ⭐⭐ — `defensive-copy-on-immutable` |
211
+ | **`canHit` vs `isBust` 부울 의미 일관 (True 방향 통일)** | 1 (#151) | ⭐ |
212
+ | **View vs 도메인 검증 학생 자가 토론 깊이 (Multi-platform 함정)** | 2 (#41·#151) | ⭐⭐ — `view-only-validation-cross-ui-fragility` |
213
+ | **역할 vs 상태 자가 학습 (Player=역할, GameResult=상태)** | 1 (#148) | ⭐⭐ — `role-state-conflation` |
214
+ | **참가자 vs 참가자 일반화 (플레이어 vs 플레이어, 딜러 vs 딜러)** | 4 (#148·#151·#49·#132) | ⭐⭐⭐ 메이저 |
215
+ | **`Listener` vs 고차함수 콜백 트레이드오프** | 1 (#148) | ⭐ |
216
+ | **Controller stateless 재사용 vs in-place 변경** | 1 (#151) | ⭐ |
217
+ | **`Map<X, X>` 자료구조 우회 인스턴스 변수 제약** | 1 (#151) | ⭐ |
218
+ | **카지노 6덱 메타포 vs 요구사항 트레이드오프** | 1 (#58) | ⭐ |
219
+ | **`data class + private constructor copy 우회 함정`** | 1 (#58) | ⭐ |
220
+ | **`println` 도메인 X (간접 lambda 도 결합)** | 1 (#137) | ⭐ |
221
+ | **enum + when exhaustive 활용 (else 불필요)** | 다수 (#137·#148·#90 외) | ⭐⭐ |
222
+ | **`onXX` 콜백 어휘 (Inversion of Control)** | 2 (#137·#132) | ⭐⭐ |
223
+ | **반란군 비유 (요구사항 vs 좋은 설계 자유 인정)** | 1 (#151) | (reviewer 어휘) |
224
+
225
+ ### batch 10·11 신규 reviewer
226
+
227
+ - @namjackson (잭슨): #41 (핑구), #53 (베리) — *학생 자가 학습 메타 질문 + 트레이드오프 명시*
228
+ - @lee-ji-hoon (지훈) [신규]: #137 (미플) — *원시값 포장 + onXX 콜백 + 어휘 양방향 학습*
229
+ - @krrong (크롱) [신규]: #148 (타마), #151 (제리) — *역할 vs 상태 + 추상화 확장 (참가자 vs 참가자) + 반란군 비유*
230
+
231
+ ## 18. batch 18 신규 안티패턴 + 메타 어휘 (누적)
232
+
233
+ batch 18 (#48, #14, #18, #73, #106) 에서 새로 발견된 패턴:
234
+
235
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
236
+ |---|---|---|
237
+ | **`controller-to-domain-test-enablement`** (god-object 이전 = 테스트 가능성) | 1 (#48) | ⭐⭐ |
238
+ | **`domain-isolation-refactoring-steps`** (UI 분리/private 최소/public 테스트) | 1 (#48) | ⭐⭐⭐ |
239
+ | **`test-only-public-exposure-anti-pattern`** | 1 (#48) | ⭐⭐ |
240
+ | **`cli-vs-gui-assumption-test`** (y/n CLI 한정 → Boolean) | 1 (#14) | ⭐⭐ |
241
+ | **`test-fake-self-test-anti-pattern`** (Fake 자체 테스트 X) | 1 (#14) | ⭐⭐ |
242
+ | **`test-static-import-convention`** (프로덕션과 다른 컨벤션) | 1 (#14) | ⭐ |
243
+ | **`enum-companion-init-order`** (enum 인스턴스 vs companion 시점) | 1 (#18) | ⭐⭐ |
244
+ | **`student-honest-no-deep-thought`** (학생 자가 *깊은 생각 없었음* 솔직 인정) | 1 (#18) | ⭐ |
245
+ | **`offline-code-review-suggestion`** | 1 (#18) | ⭐ |
246
+ | **`time-boxed-self-learning`** (*오늘까지만 한번 더*) | 1 (#18) | ⭐ |
247
+ | **`is-operator-polymorphism-avoidance`** (is = 절차지향 시그널) | 1 (#73) | ⭐⭐⭐ |
248
+ | **`design-pattern-without-effect`** (패턴 도입 후 의도 효과 X) | 1 (#73) | ⭐⭐ |
249
+ | **`reviewer-emphasis-rationale-meta`** (자가 강조 이유 명시) | 1 (#73) | ⭐⭐ |
250
+ | **`reviewer-don't-be-swayed`** (휘둘리지 마세요) | 1 (#73) | ⭐⭐⭐ |
251
+ | **`consecutive-if-as-else-violation`** (연속 if = else 위반) | 1 (#73) | ⭐⭐ |
252
+ | **`reviewer-power-restraint-meta`** (논리로 찍어 누를 수 있으나) | 1 (#106) | ⭐⭐⭐ |
253
+ | **`professional-vs-learning-acceptance-criteria`** (동료 99% / 학습 자가) | 1 (#106) | ⭐⭐ |
254
+ | **`student-perspective-shift-self-question`** (언제 관점 깨는가?) | 1 (#106) | ⭐⭐ |
255
+ | **`student-stubbornness-self-question`** (고집인가?) | 1 (#106) | ⭐ |
256
+ | **`having-vs-knowing-conflation`** (멤버 vs 의존) | 1 (#106) | ⭐⭐ |
257
+ | **`rank-vs-score-separation`** (Rank 게임 무관 / 점수 외부) | 1 (#106) | ⭐⭐ |
258
+ | **`bust-as-error-not-state`** (Bust = 상태 / 오류 X) | 1 (#106) | ⭐⭐ |
259
+ | **`android-onx-vs-domain-callback-confusion`** | 1 (#106) | ⭐⭐ |
260
+ | **`stdlib-name-conflict`** (Character vs Number) | 1 (#106) | ⭐ |
261
+
262
+ ### batch 18 메타 어휘 (MCP `oh-my-oop` 핵심 가치 정점)
263
+
264
+ - **`reviewer 정답 강요 회피 메타`** (말리빈 #106) — *"제가 생각하는 지점을 알려드리는 것으로 수렴하는 느낌이 드네요. (...) 정답으로 받아들일 수 있기에 (...) 좋아하지 않아요"*.
265
+ - **`reviewer 권력 자제 메타`** (말리빈 #106) — *"언제든지 논리로 찍어 누를 수 있으나, 그렇게 하지 않는 이유는 그것이 정답으로 받아들여질 것이 필연적이기 때문이에요"*.
266
+ - **`실무 vs 학습 미션 수용 기준 차이`** (말리빈 #106) — *"동료분들은 프로라고 생각해요. 그렇기에 그들이 하는 말을 99% 반영해요"*.
267
+ - **`학생 자가 *언제 관점 깨는가?* 메타 의문`** (giovannijunseokim #106) — **MCP 핵심 가치 학생 측 메타 어휘**.
268
+ - **`reviewer "휘둘리지 마세요"`** (ghojeong #73) — *"제 피드백에 휘둘리지 마시고, '객체 지향 생활 체조 원칙' 에 집중하시면 좋을 것 같습니다"*.
269
+ - **`수업 시간 인용 reviewer 합류`** (woowahan-leah #18) — *"수업 시간에 배운 backing property 활용 👍"*. PR #107·#80 결의 *강의 인용 패턴*.
270
+
271
+ ### batch 18 신규 reviewer (1명)
272
+
273
+ - **@woowahan-leah** (PR #18 boogi-woogi) — 2023년 3월 코호트. *enum + companion object 깊은 어휘 + 상속 vs 조합 외부 글 + 오프라인 코드 리뷰 권유 + 수업 시간 인용*.
274
+
275
+ **누적 reviewer 12명**: 말리빈/잭슨/두루/페로로/지훈/크롱/vagabond95/BeokBeok/KwonDae/galcyurio/ghojeong/woowahan-leah.
276
+
277
+ ## 17. batch 17 신규 안티패턴 + 메타 어휘 (누적)
278
+
279
+ batch 17 (#86, #100, #22, #72, #80) 에서 새로 발견된 패턴:
280
+
281
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
282
+ |---|---|---|
283
+ | **`redundant-validation-on-type-constraint`** (enum 제약 + 추가 검증 = 중복) | 1 (#86) | ⭐⭐ |
284
+ | **`redundant-factory-with-strategy-parameter`** (Card.from(provider) = 중복) | 1 (#86) | ⭐ |
285
+ | **`companion-object-method-locus`** (팩토리 + 도우미만, 모든 메서드 강제 X) | 1 (#86) | ⭐ |
286
+ | **`personal-metaphor-without-shared-vocabulary`** (지갑 안 신분증) | 1 (#100) | ⭐⭐ |
287
+ | **`mutable-state-open-violation`** (open var + OCP 위반) | 1 (#100) | ⭐⭐ |
288
+ | **`pseudo-domain-controller-layer`** (Game = 통신 매개체) | 1 (#100) | ⭐⭐ |
289
+ | **`external-naming-search-tool`** (grep.app 활용) | 1 (#100) | ⭐ |
290
+ | **`dependency-direction-clarification`** (UI→Domain OK / Domain→UI 문제) | 1 (#22) | ⭐⭐⭐ |
291
+ | **`static-mutable-collection-unsafe`** (ALL_CARDS = 전역 + remove/add) | 1 (#22) | ⭐⭐ |
292
+ | **`test-3-properties-clarity-completeness-conciseness`** (Google Testing Blog) | 1 (#22) | ⭐⭐ |
293
+ | **`data-structure-tool-knowledge`** (LinkedList pop = Kotlin 자료구조) | 1 (#22) | ⭐ |
294
+ | **`kotlin-vocabulary-misconception`** (enum 내 companion object 가능) | 1 (#22) | ⭐ |
295
+ | **`constant-shared-vs-local`** (한 곳 = private / 여러 곳 = public) | 1 (#22) | ⭐ |
296
+ | **`controller-classification-criteria`** (view 의존 + 테스트 가능 2 기준) | 1 (#72) | ⭐⭐⭐ |
297
+ | **`caching-decision-by-data-scale`** (수천 = 캐싱 / 수백 = 최신값) | 1 (#72) | ⭐⭐ |
298
+ | **`jvm-type-erase-firstclass-key`** (`Map<List<Card>, Int>` Key 일급 컬렉션) | 1 (#72) | ⭐⭐ |
299
+ | **`cache-key-smaller-than-value`** (Key < Value 크기 원칙) | 1 (#72) | ⭐ |
300
+ | **`forward-compatible-delegation`** (로직 없는 위임 = 향후 유지보수 가치) | 1 (#72) | ⭐⭐ |
301
+ | **`value-vs-behavior-class-distinction`** (data class vs 일반 class) | 1 (#72) | ⭐⭐ |
302
+ | **`package-entry-point-classification`** (각 패키지 대표 객체) | 1 (#72) | ⭐⭐ |
303
+ | **`dto-vs-model-classification`** (DTO = 데이터 전달 + 테스트 X) | 1 (#72) | ⭐⭐ |
304
+ | **`domain-vocabulary-vs-general-noun`** (HandCards 도메인 vs Cards 일반) | 1 (#72) | ⭐⭐ |
305
+ | **`fold-with-label-return`** (Kotlin fold + return@label) | 1 (#72) | ⭐ |
306
+ | **`team-convention-documentation`** (팀 컨벤션 + 문서화 강조) | 1 (#72) | ⭐ |
307
+ | **`foreach-repeat-as-side-effect-signal`** (Unit 반환 + 변경) | 1 (#72) | ⭐⭐ |
308
+ | **`awkward-feeling-signal`** (어색함 = 코드 시그널) | 1 (#72) | ⭐ |
309
+ | **`callback-naming-view-coupling`** (printX/showX = View 동사) | 1 (#80) | ⭐⭐⭐ |
310
+ | **`unnecessary-abstraction-without-polymorphism`** (다형성 X = 추상화 X) | 1 (#80) | ⭐⭐ |
311
+ | **`util-package-definition`** (전역 + 비즈니스 X + 문자열/랜덤/날짜) | 1 (#80) | ⭐⭐ |
312
+ | **`multi-source-learning-integration`** (수업 + reviewer + 자가 학습 통합) | 다수 (#80·#82·#145·#107·#46·#91·#100) | ⭐⭐ |
313
+
314
+ ### batch 17 메타 어휘 (MCP `oh-my-oop` 핵심 가치와 일치)
315
+
316
+ - **`11 reviewer 메타 어휘 완전 확인`** — galcyurio (#22) *"개방 폐쇄 원칙을 잘 지켰다고 생각해요 :+1:"* / *"domain에서 ui를 의존하는 반대의 경우는 문제"* + ghojeong (#72) *"결국 정답은 없습니다"* / *"개발팀마다 모두 다릅니다. 중요한 것은 팀 전체가 납득할 수 있는 컨벤션을 만들고 문서화하는 일입니다"* — **새 reviewer 2명 모두 *MCP 핵심 가치 어휘* 사용**.
317
+ - **`사람 시뮬레이션 비유` (ghojeong #72)** — *"해당 역할을 컴퓨터가 아니라 사람에게 시키려고 했을 때, 사람이 한명 더 필요한가 아니면 같은 사람에게 시킬 수 있을까"* — **MCP `oh-my-oop` *역할-책임-협력 (RDD)* 어휘 강화**.
318
+ - **`Controller 판단 기준 2 가지`** (ghojeong #72) — *view 의존 + 테스트 가능*.
319
+ - **`데이터 규모별 캐싱 결정`** (ghojeong #72) — *수천/수만 = 캐싱 / 수백 = 최신값*.
320
+ - **`팀 컨벤션 + 문서화 강조`** (ghojeong #72) — *팀 다양성 + 컨벤션 문서*.
321
+ - **`학생 자가 *코드 누적 부채* 자가 인정`** (Hevton #100) — *"이미 시작에서부터 너무 많은 설계가 연쇄"*.
322
+ - **`학생 자가 *그저 좋다 생각만* 자가 인정 강화`** (data class private constructor #86, BaseHuman 추상화 #80, Wallet 지갑 #100, Manager 폭증 #145, 팩토리 메서드 #76, 일급 컬렉션 과적용 #39).
323
+ - **`다음 미션 학습 자가 적용`** (Hevton #100 오목 미션 *고차함수 자가 활용*) — **MCP `oh-my-oop` 학습 = 시간 두고 반복 어휘**.
324
+
325
+ ### batch 17 신규 reviewer (2명)
326
+
327
+ - **@galcyurio** (PR #22 RightHennessy) — 2023년 3월 코호트 4번째. *OCP/OOP 원칙 명시 + Google Testing Blog 외부 자료 + UI/Domain 의존 방향 메타*.
328
+ - **@ghojeong (파이로)** (PR #72 kimhm0728) — 2024 코호트 신규. *Controller 판단 기준 2가지 + 사람 시뮬레이션 비유 + 데이터 규모별 캐싱 + 팀 컨벤션 문서화 + 디미터 법칙 ACM 논문 인용*.
329
+
330
+ **누적 reviewer 11명**: 말리빈/잭슨/두루/페로로/지훈/크롱/vagabond95/BeokBeok/KwonDae/galcyurio/ghojeong.
331
+
332
+ ## 16. batch 16 신규 안티패턴 + 메타 어휘 (누적)
333
+
334
+ batch 16 (#145, #11, #13, #76, #82) 에서 새로 발견된 패턴:
335
+
336
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
337
+ |---|---|---|
338
+ | **`manager-class-proliferation`** (Manager 폭증 = 빈약 Model) | 1 (#145) | ⭐⭐⭐ |
339
+ | **`responsibility-extraction-overcorrection`** (PR #107 자가 도입 → PR #145 안티패턴 전환) | 1 (#145) | ⭐⭐ |
340
+ | **`function-vs-lambda-naming-perspective`** (함수=수신/람다=공급 시점) | 1 (#145) | ⭐ |
341
+ | **`map-to-domain-object-migration`** (Map → Domain 2 이유 자가 명시) | 1 (#145) | ⭐ |
342
+ | **`view-domain-object-creation-locus`** (View 가 Domain 객체 생성 양가성) | 1 (#145) | ⭐⭐ |
343
+ | **`meaningless-stdlib-test`** (Kotlin operator fun 테스트 무의미) | 1 (#145) | ⭐⭐ |
344
+ | **`branch-order-readability-vs-logic`** (BLACKJACK 우선 미적 vs BUST 우선 논리) | 1 (#145) | ⭐ |
345
+ | **`code-format-readability-convention`** (abstract val / val / abstract fun / fun 순서) | 1 (#145) | ⭐ |
346
+ | **`business-rule-explicit-in-code`** (항상 true 인 조건문 = 비즈니스 룰 명시 의도) | 1 (#11) | ⭐⭐ |
347
+ | **`set-vs-list-firstclass-collection`** (Set = 의도 명시 / List = 사용자 친화 검증 양가성) | 1 (#11) | ⭐⭐ |
348
+ | **`single-locale-method-name`** (toKorean 한국어 한정 명명) | 1 (#11) | ⭐⭐ |
349
+ | **`general-name-class-bloat`** (Const.kt, BlackJackRule.kt, misc 일반 명명 비대화) | 3 (#11·#13·#16) | ⭐⭐ |
350
+ | **`inconsistent-accessor-pattern`** (value vs toList vs cards 혼재) | 1 (#11) | ⭐ |
351
+ | **`inconsistent-approach-pattern`** (비슷한 일 = 비슷한 방식 X) | 1 (#13) | ⭐ |
352
+ | **`input-retry-cohesion`** (ReadValueSureModifier 응집) | 1 (#11) | ⭐ |
353
+ | **`etc-package-anti-pattern`** (etc/common/misc 패키지 = 마지막 수단) | 1 (#13) | ⭐⭐ |
354
+ | **`kotlin-function-locus-criteria`** (클래스 내부 vs top-level extension vs object function 기준) | 1 (#13) | ⭐⭐⭐ |
355
+ | **`factory-method-discoverability`** (생성자 미차단 + 팩토리 = 발견 어려움) | 1 (#76) | ⭐⭐ |
356
+ | **`pattern-applied-without-need`** (팩토리 메서드/Manager/Builder *그저 좋다 생각만*) | 4 (#76·#145·#39·#31) | ⭐⭐⭐ |
357
+ | **`proxy-object-anti-pattern`** (대리자 = 데이터 외부 주입 + 행동 위탁) | 1 (#76) | ⭐⭐ |
358
+ | **`domain-object-string-input-leak`** (Card.of(String) View 입력 의존) | 1 (#76) | ⭐⭐ |
359
+ | **`constant-locus-meaning-cohesion`** (Denomination 10 = 카드 합계 영역) | 1 (#76) | ⭐⭐ |
360
+ | **`jvm-type-erase-factory-justification`** (List<T> 시그니처 충돌 = 팩토리 정공) | 1 (#76) | ⭐ |
361
+ | **`test-readability-pause-anti-pattern`** (복잡 로직 = 머릿속 계산 강제) | 1 (#76) | ⭐ |
362
+ | **`maintainer-perspective-locator`** (기획자 요구사항 + 동료 개발자 위치) | 다수 (#82·#107·#145·#46·#91) | ⭐⭐⭐ |
363
+ | **`intermediate-object-without-role`** (Answer 단순 변환만 = 존재 가치 의문) | 1 (#82) | ⭐⭐ |
364
+ | **`test-classification-domain-vs-view`** (입력 변환 = View 테스트 / 비즈니스 = 도메인) | 1 (#82) | ⭐⭐ |
365
+ | **`hand-deck-conflation`** (Hand 가 Deck 보유 = 의미 혼동) | 1 (#82) | ⭐⭐ |
366
+ | **`requirement-vs-natural-modeling-conflict`** (인덴트 depth 강제 = 부자연스러운 상수) | 1 (#82) | ⭐⭐ |
367
+ | **`dependency-graph-self-review`** (PR 본문 의존성 그래프 첨부 + 자가 검토) | 1 (#82) | ⭐⭐ |
368
+ | **`nested-loop-to-flatmap`** (Kotlin 어휘 = depth 회피) | 1 (#82) | ⭐ |
369
+ | **`controller-vs-game-manager-distinction`** (Controller = 게임장 / GameManager = 매 게임 관리자) | 1 (#82) | ⭐ |
370
+
371
+ ### batch 16 메타 어휘 (MCP `oh-my-oop` 핵심 가치와 일치)
372
+
373
+ - **`9 reviewer 메타 어휘 완전 합류 확인`** — vagabond95 *"저의 개인적인 경험으로"* (#11) + 말리빈 *"필요에 의해서 추가 및 수정함"* (#76) + KwonDae *"기획자 요구사항이 왔을 때 동료 개발자가 어디를 가장 먼저 살펴보게 될까요?"* (#82) + lee-ji-hoon *"의견을 너무 어필 시 그대로 따라갈까 봐 추상적 표현"* (#145).
374
+ - **`히스토리를 들어보니`** (vagabond95 #11) — *대화형 분석 메타*.
375
+ - **`reviewer 자가 사과 + 의도 명확화`** — KwonDae #82 *"헷갈리게 말씀드린거 같네요 🥲"*, lee-ji-hoon #145 *"의견을 너무 어필 시"*.
376
+ - **`친밀한 이모지 어조`** — *🫠 🥲 🤔 👀 😅 😢* — *학생/reviewer 양측 친밀 어조 모든 PR 일관*.
377
+ - **`학생 자가 *그저 좋다 생각만* 자가 인정`** — Yunseok-Nam #76 *"팩토리메서드가 그저 좋다라는 것만 생각하고 일단 생성한 다음 의미를 부여한것 같다"* / junseo511 #145 *"Manager 폭증"* / rhthrhrl0 #39 *"일급 컬렉션 과적용"* / no1msh #31 *"Builder 패턴 불필요"*. **MCP 룰 `pattern-applied-without-need` 강화**.
378
+
379
+ ### batch 16 신규 reviewer
380
+
381
+ - 없음. 9 reviewer 안정 (말리빈/잭슨/두루/페로로/지훈/크롱/vagabond95/BeokBeok/KwonDae).
382
+
383
+ ### batch 16 코호트 분포 확장
384
+
385
+ - **2023년 3월 코호트 (PR ≤ 60):** PR #9·#11·#13·#16·#23·#26·#31·#33·#39·#43·#46 (#33 batch 4 이미 분석) — *11 PR 분석*.
386
+ - **2024 코호트 (PR ≥ 60):** *나머지 35+ PR* — *압도적 다수*.
387
+ - **2024 코호트가 *학생 자가 학습 가시화 매개* + *PR 본문 자가 의문* 풍부 시리즈 (PR #91·#107·#46·#77·#82·#145·#137·#148·#151·#46·#136 등)**.
388
+ - **2023년 3월 코호트는 *외부 글 추천 + 요구사항 인용 + 한글 변수* 패턴 풍부 (PR #11·#13·#16·#23·#26·#9 — 벅벅/말리빈/잭슨/vagabond95)**.
389
+
390
+ ## 15. batch 15 신규 안티패턴 + 메타 어휘 (누적)
391
+
392
+ batch 15 (#91, #9, #31, #66, #107) 에서 새로 발견된 패턴:
393
+
394
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
395
+ |---|---|---|
396
+ | **`uimodel-passive-vs-active-tension`** (UiModel 자립적 vs 데이터 운반자 양가성) | 1 (#91) | ⭐⭐ |
397
+ | **`sealed-class-when-exhaustive`** (학생 자가 정리 강화) | 1 (#91) | ⭐⭐⭐ (누적 #98·#137·#148·#90·#146·#16·#91) |
398
+ | **`runcatching-locus`** (View 입력 + Result 반환 위치) | 1 (#91) | ⭐⭐ |
399
+ | **`error-classification-locus`** (논리적 오류 vs 입력 오류) | 1 (#91) | ⭐⭐ |
400
+ | **`extension-function-domain-misuse`** (확장 함수 외부 발견 어려움) | 1 (#9) | ⭐⭐ |
401
+ | **`builder-call-order-dependency`** (Builder 호출 순서 의존) | 2 (#9·#31) | ⭐⭐ |
402
+ | **`dto-conversion-locus`** (Domain 이 DTO 반환 = 테스트 어려움) | 1 (#31) | ⭐⭐ |
403
+ | **`dealer-extends-player-lsp-violation`** (Dealer is-a Player 의미적 위반) | 2 (#31·#95) | ⭐⭐ |
404
+ | **`unnecessary-builder-pattern`** (YAGNI 위반 + 책임 모호) | 1 (#31) | ⭐ |
405
+ | **`domain-state-duplication`** (동일 상태 다중 객체 보유) | 1 (#31) | ⭐⭐ |
406
+ | **`controller-domain-coupling-depth`** (Controller 도메인 침투 깊이) | 다수 (#31·#46·#77·#91·#107) | ⭐⭐⭐ |
407
+ | **`string-constant-locus`** (에러 메시지 상수화 양가성) | 1 (#31) | ⭐ |
408
+ | **`initial-method-public-leak`** (initial~ public + 최초 1회 기대) | 1 (#66) | ⭐ |
409
+ | **`view-passive-vs-active`** (MVP/MVVM 어휘) | 1 (#107) | ⭐⭐ |
410
+ | **`maintenance-perspective-evaluation`** (유지보수 관점 메타 어휘) | 1 (#107) | ⭐⭐ |
411
+ | **`magic-default-conversion`** (View 가 기본값 → 도메인 어휘 매직 변환) | 1 (#107) | ⭐⭐ |
412
+ | **`concrete-abstract-method-override-impossible`** (abstract 기본 구현 + override X) | 1 (#107) | ⭐ |
413
+ | **`test-name-business-perspective`** (테스트 명 = 비즈니스 의도) | 1 (#107) | ⭐ |
414
+ | **`vagueName 강화 (4 회 동일 PR)`** (setUp/init/sum/calculateSum) | 1 (#66) | ⭐⭐ |
415
+ | **`enum-with-ui-value 반대 시점`** (View 가 enum 변환 자가 결정) | 1 (#9) | (양가성 보강) |
416
+ | **`procedural-method-name` (라면 비유 결)** | 1 (#9) | ⭐ |
417
+ | **`class-without-state` 강화** | 1 (#9) | ⭐⭐ |
418
+ | **`primitive-with-domain-logic` 강화** | 1 (#107) | ⭐⭐ |
419
+ | **`magic-number-in-view`** (`2` 매직 넘버) | 1 (#66) | ⭐ |
420
+ | **`은닉 사라진 자가 인정` (private constructor 망각)** | 1 (#107) | ⭐ |
421
+
422
+ ### batch 15 메타 어휘 (MCP `oh-my-oop` 핵심 가치와 일치)
423
+
424
+ - **`개인 의견 메타 어휘` 9 reviewer 완전 합류** — KwonDae #91 *"제 개인적인 생각으로는"* — 말리빈/잭슨/두루/페로로/지훈/크롱/vagabond95/BeokBeok/KwonDae **9 reviewer 모두 사용**. **MCP `oh-my-oop` 핵심 가치 일치 강도 최고**.
425
+ - **`유지보수 관점 메타 어휘`** (lee-ji-hoon #107) — *"누군가 유지보수 한다고 생각을 해볼까요?"* — *시간 두고 관점*.
426
+ - **`강의 인용 reviewer 패턴`** (lee-ji-hoon #107) — *"오늘 강의 시간 때 이야기 했던 내용"* — *실시간 학습 연결*.
427
+ - **`reviewer 자가 사과 + 친밀한 어조` 다수** — lee-ji-hoon (학생 이름 *"동전"* 실수 + 밥 약속), KwonDae #91 (*"혼란을 드린거 같아 죄송합니다 🥲"*), KwonDae #77, 말리빈 #46/#23, BeokBeok #16.
428
+ - **`5 단계 핑퐁 토론 + 학생 자가 결정 변경`** (#107 junseo511) — *학생 의도 → reviewer 질문 → 학생 정당화 → reviewer 유지보수 관점 → 자가 후퇴 + 결정 변경*.
429
+
430
+ ### batch 15 신규 reviewer
431
+
432
+ - 없음 (vagabond95/KwonDae/BeokBeok/lee-ji-hoon 모두 기존). 누적 reviewer 9 명 안정.
433
+
434
+ ### batch 15 학생/reviewer 메타 케이스 강화
435
+
436
+ - **no1msh = MCP `oh-my-oop` 저자 (반달)** — 2023년 3월 학생 시기 PR #31 분석 = *학생 시기 자가 의문 (DTO 위치 + 상수화) → 1 년 후 MCP 저자 시기 *N 안 + 트레이드오프* 어휘 진화*. **`학생 → 도구 저자` 변형** — PR #46 (krrong *학생 → reviewer*) 결의 *학생 → 도구화* 변형.
437
+ - **`junseo511 학습 가시화 최강 사례`** (#107) — PR 본문 자가 의문 2 + 스크린샷 + 25 thread 중 22 응답 + 5 단계 핑퐁 + 자가 도입 3종 (UserCommand/GameManager/ResultManager). **모든 학습 가시화 매개체 활용**.
438
+
439
+ ## 14. batch 14 신규 안티패턴 + 메타 어휘 (누적)
440
+
441
+ batch 14 (#39, #43, #46, #16, #77) 에서 새로 발견된 패턴:
442
+
443
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
444
+ |---|---|---|
445
+ | **`first-class-collection-without-behavior`** (`PlayersNameAndBet` 행동 없는 일급화) | 1 (#39) | ⭐⭐ — lotto `collection-wrapper-without-behavior` 변형 |
446
+ | **`and-conjunction-name`** (`NameAndBet`, `HandAndWallet`) | 1 (#39) | ⭐⭐ |
447
+ | **`immutable-recompute-on-call`** (불변 + 매 호출 계산 함수) | 1 (#39) | ⭐⭐ |
448
+ | **`factory-vs-constructor-inconsistency`** (생성 방식 일관성 부재) | 1 (#39) | ⭐ |
449
+ | **`deepCopy 명명 vs 실제 (얕은 복사)` 명명 정확성** | 1 (#39) | ⭐ |
450
+ | **`class-without-state`** (행동만 가진 클래스 = static helper 차이 X) | 2 (#16·#46) | ⭐⭐ |
451
+ | **`primitive-with-domain-logic`** (Int 점수 + 도메인 로직 = Score 포장) | 2 (#16·#39) | ⭐⭐ |
452
+ | **`package-cohesion`** (constants 패키지 + 로직 객체 = 응집 위반) | 1 (#16) | ⭐ |
453
+ | **`abstract-without-abstract-method` 강화** | 1 (#16) | ⭐⭐⭐ (누적 4 PR #74·#95·#147·#16) |
454
+ | **`dataclass-private-constructor-copy-leak`** (PR #58 결 강화) | 1 (#46) | ⭐⭐ |
455
+ | **`value-object-arithmetic-invariant-leak`** (BettingMoney ≥ 1 + 수익률 음수) | 1 (#46) | ⭐⭐ |
456
+ | **`procedural-method-name`** (`냄비에물을500미리붓고...` vs `라면끓이기`) | 1 (#46) | ⭐ |
457
+ | **`delegate-vs-firstclass-collection`** (`by` 키워드 + 일급 컬렉션 양가성) | 2 (#77·#74) | ⭐⭐ |
458
+ | **`lambda-injection-locus`** (람다 인자 vs 생성자 주입) | 1 (#77) | ⭐⭐ |
459
+ | **`judge-symmetry-violation`** (참가자 vs 참가자 일반화 + 비대칭 룰 충돌) | 1 (#77) | ⭐⭐ |
460
+ | **`premature-strategy-extraction`** (PointCalculator 분리 YAGNI 위반) | 1 (#77) | ⭐ |
461
+ | **`unnecessary-member-variable`** (initialCards 멤버 X) | 1 (#46) | ⭐ |
462
+ | **`when-pattern-vs-condition` Kotlin 어휘 갭** | 1 (#43) | ⭐ |
463
+ | **Phase 추상화 (학생 창의적 발상)** | 1 (#39) | (도메인 특수) |
464
+
465
+ ### batch 14 메타 어휘 (MCP `oh-my-oop` 핵심 가치와 일치)
466
+
467
+ - ***극단 사례 (reductio ad absurdum)*** — *"1만 개의 메서드"* (#46), *"100개의 메서드"* (#46) — **변경 시 비용 메타 어휘**.
468
+ - **`라면 비유`** (말리빈 #46) — *추상화 수준 시각화*. PR #151 (크롱 *반란군 비유*) / PR #146 (두루 *YAGNI 비유*) 결.
469
+ - **`반영커밋 URL 첨부` 패턴** (krrong #46, 14회 중 11회) — *학생 자가 학습 가시화 강화*.
470
+ - **`외부 채널 권유 (Slack DM)`** (말리빈 #46, KwonDae #99·#77) — *PR 코멘트 외부 토론 채널 인정*.
471
+ - **`공동 학습 권유`** ("같이 고민해봐도 좋을 것 같습니다" — KwonDae #77) / **`reviewer 자가 사과 + 자가 부연`** (KwonDae #77, BeokBeok #16, 말리빈 #46).
472
+ - **`요구사항 인용`** (BeokBeok #16, *"프로그래밍 요구사항은 아래와 같은"*) — *블랙잭 미션 명시 요구사항을 reviewer 가 그대로 인용*.
473
+ - **`객체지향 원칙 약어 (SRP/LSP/DIP)` 명시** (BeokBeok #16, KwonDae #77 *DIP*) — **MCP `oh-my-oop` 룰의 *guideline* 필드와 일치**.
474
+
475
+ ### batch 14 신규 reviewer
476
+
477
+ - @BeokBeok (벅벅) — PR #16. *2023년 3월 코호트 3번째 reviewer* (말리빈/잭슨/벅벅). 요구사항 인용 + SRP/LSP 원칙 명시.
478
+
479
+ ### batch 14 학생/reviewer 메타 케이스
480
+
481
+ - **krrong 1 년 학생 → reviewer 진화** — *2023년 3월 학생 시기 (PR #32, #46) 의 학습 패턴 (자가 토론 + 양방향 + 반영커밋 URL) → 2024년 3월 reviewer 시기 (PR #148·#151) 의 학생 권유*. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘와 일치**.
482
+ - **`Test Fixture 학습 전파` 케이스** — *PR #99 (KwonDae *Test Fixture 품질* 권고) → PR #77 (KwonDae *Test Fixture 잘 활용* 칭찬)* — **reviewer 의 학습 시드가 다른 학생에게 이어지는 *reviewer 매개 학습 전파*** 케이스.
483
+
484
+ ## 13. batch 13 신규 안티패턴 + 메타 어휘 (누적)
485
+
486
+ batch 13 (#98, #95, #99, #23, #26) 에서 새로 발견된 패턴:
487
+
488
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
489
+ |---|---|---|
490
+ | **`abstract-without-abstract-method` 2단계 재발** (학생 자가 의문 형태) | 1 (#95) | ⭐⭐ — 기존 룰 강화 |
491
+ | **enum 분기 곱집합 = 명명 어색 (WIN/LOSE × 블랙잭/일반)** | 1 (#99) | ⭐⭐ — `enum-product-axes-conflation` |
492
+ | **`Return → GameResult` (vague enum rename)** | 1 (#99) | ⭐ — 기존 `vagueName` 변형 |
493
+ | **테스트 = 명세서 메타 어휘** (test-as-spec) | 1 (#26) | (reviewer 어휘) |
494
+ | **암묵 제약 (implicit invariant) 외부에서 알기 어려움** | 1 (#26) | ⭐⭐ — `implicit-invariant-on-known-rule` 강화 |
495
+ | **`~~~er` 접두사 영어 사전 의미 충돌 (Drawer = 서랍)** | 1 (#23) | ⭐ — `er-suffix-collision` |
496
+ | **자료구조 Set vs List (여러 카드덱)** | 2 (#23·#26) | ⭐⭐ — `set-vs-list-multiset` |
497
+ | **카드 1벌 vs 여러 벌 도메인 룰 분기** (카지노 6덱 메타포 #58 결) | 1 (#26) | ⭐ — 도메인 특수 |
498
+ | **`Test Fixture` 품질 = 프로덕션 동등** (createPlayers/createCards) | 2 (#99·#26) | ⭐⭐ — `test-fixture-quality-parity` |
499
+ | **`onXX` 콜백 어휘 자가 적용** (학생 자가 람다 분리) | 2 (#99·#23) | ⭐⭐ — 기존 룰 강화 |
500
+ | **재구현 권유 (학습 = 시간 두고 반복)** | 3 (#95·#98·#99) | (reviewer 어휘) |
501
+ | **머지 후 후속 코멘트 (학습 종료 X)** | 1 (#23) | (reviewer 어휘) |
502
+ | **공식 의견 + 개인 의견 메타 분리** | 2 (#23·#26) | (reviewer 어휘 — MCP `oop_propose_alternatives` 일치) |
503
+ | **외부 자료 첨부 = Kotlin 공식 문서** | 2 (#23·#26) | (reviewer 어휘) |
504
+ | **블랙잭 룰 정확성 명시 (Bust 양측 + BlackJack 2장 > 3장 21)** | 1 (#26) | ⭐⭐⭐ — `blackjack-rule-fidelity` 강화 (#20·#64·#110·#120·#29·#63·#23·#26) |
505
+ | **suggestion 블록 활용** (given-when-then, expression body) | 1 (#26) | (reviewer 도구 활용) |
506
+ | **`Controller + View 없이 가능?` 메타 질문** (테스터빌리티) | 1 (#99) | ⭐⭐ — `controller-view-domain-coupling` |
507
+ | **PR 본문 자가 의문 + 다이어그램 + 1단계 코멘트 URL 자가 참조** | 1 (#99) | (학생 자가 학습 모범) |
508
+ | **`current 상태 = 분기 책임 위치 이동 ≠ 책임 제거` 자가 의문 (상태 패턴)** | 1 (#98) | ⭐ — 도메인 특수 |
509
+ | ***"옳고 그름 X, 장단점만"* reviewer 메타 어휘** | 1 (#95) | (reviewer 어휘 — MCP 핵심 가치 일치) |
510
+ | **`data object` vs `object` Kotlin 어휘** (sealed + 디버그 친화) | 1 (#98) | ⭐ — Kotlin 어휘 |
511
+ | **`fun interface` vs `interface` 자가 결정** (SAM 한정 vs 확장 여지) | 1 (#98) | ⭐ — Kotlin 어휘 |
512
+ | **점수 책임 위치 (Dealer / Player / Participant 3 후보) + 그림 첨부 의존 관계** | 1 (#23) | ⭐⭐ — `dealer-vs-player-result-locus` |
513
+ | **else 지양 원칙 극단 적용 자가 학습** | 1 (#23) | (학생 자가 학습 — PR #146·#151 결) |
514
+
515
+ ### batch 13 메타 어휘 (MCP `oh-my-oop` 핵심 가치와 일치)
516
+
517
+ - ***"개발에 옳고 그름은 없고, 장단점만이 있는 세계"*** (말리빈, PR #95) — *조영호 「객체지향의 사실과 오해」 + MCP `oop_propose_alternatives` 어휘*.
518
+ - **공식 의견 + 개인 의견 메타 분리** (말리빈 PR #23, 잭슨 PR #26) — *reviewer 가 *주된 권고 + 개인 의견 + 학생 선택지* 명시*.
519
+ - **다른 크루의 말 *그대로 따라하지 말기*** (말리빈 PR #95) — *권위 인용 ≠ 논리적 설득*.
520
+ - **테스트 = 프로그램 명세서 어휘** (잭슨 PR #26) — *테스트 가 *동작 명세*를 표현*.
521
+ - **머지 시점 회고 권유** (KwonDae PR #99, 두루 PR #98, 말리빈 PR #95) — *"수정사항을 반영하시면서 어떤 장점을 느꼈는지 정리"* / *"처음부터 다시 만들어보는 시간"* — *학생 자가 학습 가시화*.
522
+
523
+ ### batch 13 신규 reviewer
524
+
525
+ - 없음 (말리빈/잭슨/두루/KwonDae 모두 기존). *2023년 3월 코호트 진입 = 시기적 다른 PR 풀*.
526
+
527
+ ## 11. 학생 자가 학습 + 메타 토론 모범 패턴 (전체 누적)
528
+
529
+ - **자가 의문 → reviewer 메타 답변 → 자가 후퇴/결정 명시 + 커밋 SHA 첨부** — *PR #124·#128·#135·#108·#133·#136·#137·#148·#151·#146·#147·#88 등 다수*.
530
+ - **외부 자료 인용 + 코드 적용** — *Effective Kotlin Item 4/14 (#108), 엘레강트 오브젝트 4.2/2.2 (#136), 객체 지향 생활 체조 원칙 (#151), YAGNI 인용 (#146), Racing Car 피드백 (#148), 디미터의 법칙 (#93·#133·#146), Clean Code (#93)*.
531
+ - **양방향 reviewer/학생 토론** — *PR #137 (지훈 자가 인정 어휘 혼란), #151 (크롱 자가 인정 확장성 한계), #133 (말리빈 다각도 시점), #146 (두루 typealias 자가 사용 의견), #147 (페로로 다형성 학습 진행 인정)*.
532
+
533
+ ## 12. 다음 세션 진입 순서 (업데이트)
534
+
535
+ 1. `ls /tmp/oop-lessons-cache-blackjack/` — 캐시 확인.
536
+ 2. **새 reviewees 1단계 진입** — *PR 번호 < 108* 중 *threads ≥10 + 1단계* 미분석 PR 추출:
537
+ - 이미 분석된 PR 번호 (batch 13 까지): #8, #10, #17, #20, #23, #24, #25, #26, #28, #29, #32, #33(보고: 35 thread 미분석), #34, #51, #61, #63, #64, #65, #67, #70, #74, #75, #78, #79, #81, #92, #95, #98, #99, #108, #110, #111, #112, #114, #116, #119, #120, #123, #124, #125, #128, #135
538
+ - **양 단계 완성 reviewees (21명):** ijh1298, jinuemong, re4rk, tmdgh1592, wondroid-world, Leeyerin0210, moondev03, hwannow, oungsi2000, dpcks0509, ii2001, kmkim2689, junjange, hxeyexn, pingu244, inseonyun, whk06061, otter66, HamBeomJoon, yrsel, donghyun81, etama123, jerry8282, **chaehyuns** (#70 + #98), **songpink** (#74 + #95), **s6m1n** (#67 + #99)
539
+ - **1단계만 분석 reviewees (5명, 2단계 미분석):** sh1mj1 (#75 → #104 thread 3개 너무 적음 스킵 가능), krrong (#32 → #46 thread 29개), rhthrhrl0 (#23 → #39 thread 23개), chws0508 (#26 → #43 thread 10개)
540
+ - **남은 1단계 미분석 후보 (≥10 thread):**
541
+ - 2023년 3월 코호트 (PR 번호 ~33): #9 Choisehyeon (23), #11 ki960213 (19), #13 hyunji1203 (19), #14 DYGames (16), #16 SeongHoonC (21), #18 boogi-woogi (16), #19 briandr97 (14), #21 hyemdooly (15), #22 RightHennessy (16), #31 no1msh (19), #33 2chang5 (35)
542
+ - 2024년 코호트 (#61~107): #66 JoYehyun99 (18), #71 Hogu59 (10), #72 kimhm0728 (17), #73 jaeyeongjo (17), #76 Yunseok-Nam (18), #77 murjune (24), #80 Junyoung-WON (19), #82 Hevton (19), #106 giovannijunseokim (19), #107 junseo511 (25)
543
+ - 배치 5개씩, 매 배치 commit
544
+ 3. **새 2단계 PR** — 1단계 분석 후 자연스럽게 같은 reviewee 의 2단계 진입
545
+ 4. **5~9 그룹** — 짧은 분석 (400-600줄) + 다른 배치 와 함께
546
+ 5. *최종 정리* — PROGRESS.md, SUMMARY.md, README.md 작성 + MCP 룰화 검토
547
+
548
+ ### batch 14 후보 (다음 세션)
549
+
550
+ - **양 단계 완성 우선**: rhthrhrl0 #39 (2단계, 23) + chws0508 #43 (2단계, 10) + krrong #46 (2단계, 29) — 3개
551
+ - **신규 1단계**: #16 SeongHoonC (21) + #33 2chang5 (35) 또는 #77 murjune (24) — 2개
552
+ - 총 5개
553
+
554
+ ### batch 15 후보 (다음 세션)
555
+
556
+ - ⚠ *주의: §12 "이미 분석된 PR" 표가 부정확 — #33 2chang5 1단계는 batch 4 에서 이미 분석됨 (`2chang5/33-1단계-블랙잭.md` 존재)*. counts.tsv vs 디렉토리 ls 로 교차 확인 필수.
557
+ - **양 단계 완성 우선**:
558
+ - SeongHoonC #44 (베르 2단계, 10) — 적음 스킵 가능, #54 (10) 도 마찬가지
559
+ - murjune #91 (오둥이 2단계, 13) — 양 단계 완성
560
+ - 1단계만 분석된 5명 모두 *2단계가 적은 thread* → 양 단계 완성 가치 작음
561
+ - **신규 1단계** (≥10 thread, 미분석):
562
+ - 2023년 3월 코호트: #9 Choisehyeon (23), #11 ki960213 (19), #13 hyunji1203 (19), #14 DYGames (16), #18 boogi-woogi (16), #19 briandr97 (14), #21 hyemdooly (15), #22 RightHennessy (16), #31 no1msh (19)
563
+ - 2024년 코호트: #66 JoYehyun99 (18), #71 Hogu59 (10), #72 kimhm0728 (17), #73 jaeyeongjo (17), #76 Yunseok-Nam (18), #80 Junyoung-WON (19), #82 Hevton (19), #106 giovannijunseokim (19), #107 junseo511 (25)
564
+ - **권장 batch 15**: murjune #91 (2단계 완성) + 새 1단계 4개 (예: #9 Choisehyeon + #31 no1msh + #66 JoYehyun99 + #107 junseo511) — 다양성 강화. 또는 *5~9 그룹 짧은 분석* 진입.
565
+
566
+ ### batch 16 후보 (다음 세션)
567
+
568
+ - 양 단계 완성 reviewees 29명 + 1단계만 13명 (Choisehyeon, no1msh, JoYehyun99, junseo511 추가). 1단계만 분석된 reviewees 의 2단계 PR 후보:
569
+ - Choisehyeon #52 (로피 2단계, 6 thread) — 적음
570
+ - no1msh #55 (반달 2단계, 5 thread) — 적음
571
+ - JoYehyun99 #83 (예니 2단계, 5 thread) — 적음
572
+ - junseo511 #145 (공백 2단계, 17 thread) — 가치 있음
573
+ - **권장 batch 16**: junseo511 #145 (2단계 완성, 17) + 새 1단계 4개 (예: #11 ki960213, #13 hyunji1203, #22 RightHennessy, #76 Yunseok-Nam 또는 #80 Junyoung-WON, #82 Hevton)
574
+ - **또는 5~9 그룹 짧은 분석 진입** — 13 + 14 = 27 PR 분석 완료 시점으로 *코퍼스 충분* — *최종 정리 (PROGRESS.md/SUMMARY.md/README.md) + MCP 룰화* 진입 검토.
575
+
576
+ ### batch 17 후보 (다음 세션)
577
+
578
+ - **양 단계 완성 우선** — 1단계만 분석된 reviewees 의 2단계 PR 후보:
579
+ - ki960213 #40 (토마스 2단계, 5 thread) — 적음 스킵
580
+ - hyunji1203 #45 (뽀또 2단계, 5 thread) — 적음 스킵
581
+ - Yunseok-Nam #86 (서기 2단계, 16 thread) — 가치 있음
582
+ - Hevton #100 (팡태 2단계, 16 thread) — 가치 있음
583
+ - **신규 1단계** (≥10 thread, 미분석):
584
+ - 2023년 3월 코호트: #14 DYGames (16), #18 boogi-woogi (16), #19 briandr97 (14), #21 hyemdooly (15), #22 RightHennessy (16)
585
+ - 2024년 코호트: #71 Hogu59 (10), #72 kimhm0728 (17), #73 jaeyeongjo (17), #80 Junyoung-WON (19), #106 giovannijunseokim (19)
586
+ - **권장 batch 17**: Yunseok-Nam #86 + Hevton #100 (2단계 완성 2개) + 새 1단계 3개 (예: #22 RightHennessy + #72 kimhm0728 + #80 Junyoung-WON)
587
+ - **또는 최종 정리 진입** — *batch 16 까지 양 단계 30명 + 1단계 16명 = 76 PR 분석 완료 시점으로 *코퍼스 매우 충분***. *최종 정리 (PROGRESS.md/SUMMARY.md/README.md) + MCP 룰화* 우선 검토.
588
+
589
+ ### batch 18 후보 (다음 세션)
590
+
591
+ - **양 단계 완성 우선** — 1단계만 분석 reviewees 의 2단계 PR 후보:
592
+ - kimhm0728 #97 (올리브 2단계, 8 thread) — 적음
593
+ - Junyoung-WON #101 (호두 2단계, 9 thread) — 적음
594
+ - RightHennessy #48 (링링 2단계, 13 thread) — 가치 있음
595
+ - **신규 1단계** (≥10 thread, 미분석):
596
+ - 2023년 3월 코호트: #14 DYGames (16), #18 boogi-woogi (16), #19 briandr97 (14), #21 hyemdooly (15)
597
+ - 2024년 코호트: #71 Hogu59 (10), #73 jaeyeongjo (17), #106 giovannijunseokim (19)
598
+ - **권장 batch 18**: RightHennessy #48 (2단계 완성, 13) + 새 1단계 4개 (예: #14 DYGames + #18 boogi-woogi + #73 jaeyeongjo + #106 giovannijunseokim)
599
+ - **또는 최종 정리 진입** — *batch 17 까지 양 단계 32명 + 1단계 17명 = **81 PR 분석 완료** 시점으로 *코퍼스 매우 충분***. *최종 정리 + MCP 룰화* 우선순위 강화.
600
+
601
+ ### batch 19 후보 (다음 세션)
602
+
603
+ - **양 단계 완성 우선** — 1단계만 분석 reviewees 의 2단계 PR 후보 (≥10 thread):
604
+ - DYGames #37 (코건 2단계, 9 thread) — 적음
605
+ - boogi-woogi #36 (우기 2단계, 24 thread) — **가치 있음**
606
+ - jaeyeongjo #87 (레오 2단계, 22 thread) — **가치 있음**
607
+ - giovannijunseokim #134 (지오 2단계, 9 thread) — 적음
608
+ - **신규 1단계** (≥10 thread, 미분석):
609
+ - 2023년 3월 코호트: #19 briandr97 (14), #21 hyemdooly (15)
610
+ - 2024년 코호트: #71 Hogu59 (10), #126 doabletuple (18), #129 rosemin928 (22), #130 medAndro (25), #117 parkjiminnnn (25), #118 gahyunkim (18), #121 devfeijoa (24), #109 cucumber99 (25), #113 jiyuneel (22)
611
+ - **권장 batch 19**: boogi-woogi #36 + jaeyeongjo #87 (2단계 완성 2개) + 새 1단계 3개 (예: #21 hyemdooly + #117 parkjiminnnn + #129 rosemin928)
612
+ - **최종 정리 진입 시점 강력 권장** — *batch 18 까지 양 단계 33명 + 1단계 20명 = **86 PR + 12 reviewer + 130+ 룰 후보***. *코퍼스 포화 + 메타 어휘 완전*. **PROGRESS.md/SUMMARY.md/README.md + MCP 룰화 우선 진입 권장**.
613
+
614
+ ### batch 20 후보 (다음 세션) — **최종 정리 진입 매우 강력 권장**
615
+
616
+ - **양 단계 완성 우선** — 1단계만 분석 reviewees 의 2단계 PR 후보 (≥10 thread):
617
+ - hyemdooly #25 (둘리 2단계, 28 thread) — **가치 있음** *(주의: batch 5에서 PR #25 whk06061 분석됨 — PR 번호 충돌 확인 필요)*
618
+ - parkjiminnnn 2단계 PR (확인 필요, PR #117 1단계 → 2단계 PR 번호 ≥160 가능)
619
+ - rosemin928 2단계 PR (확인 필요)
620
+ - **신규 1단계** (≥10 thread, 미분석, 우선순위 ↓):
621
+ - 2024 코호트: #71 Hogu59 (10), #126 doabletuple (18), #130 medAndro (25), #118 gahyunkim (18), #121 devfeijoa (24), #109 cucumber99 (25), #113 jiyuneel (22)
622
+ - 2023 코호트: #19 briandr97 (14)
623
+ - **최종 정리 진입 매우 강력 권장** — *batch 19 까지 양 단계 35명 + 1단계 21명 = **91 PR + 13 reviewer + 160+ 룰 후보***. **3 시기 코호트 합류 (2023·2024·2025) + 메타 어휘 완전 정점**. **추가 batch 한계 효용 매우 작음**.
624
+
625
+ ### batch 21 후보 (다음 세션)
626
+
627
+ - **양 단계 완성 우선** — 1단계만 분석 reviewees 의 2단계 PR 후보 (≥10 thread):
628
+ - doabletuple #142 (디랙 2단계, 20 thread) — **가치 있음**
629
+ - medAndro #143 (메다 2단계, 19 thread) — **가치 있음**
630
+ - Hogu59 #96 (악어 2단계, 28 thread) — **가치 있음** (1단계 #71 = 10 thread 적음, 2단계 우선)
631
+ - gahyunkim #141 (조이 2단계, 21 thread) — **가치 있음**
632
+ - jiyuneel #140 (포르 2단계, 16 thread) — **가치 있음**
633
+ - **신규 1단계** (≥10 thread, 미분석):
634
+ - 2024 코호트: #109 cucumber99 (25), #113 jiyuneel (22), #118 gahyunkim (18), #121 devfeijoa (24)
635
+ - 2023 코호트: #19 briandr97 (14)
636
+ - **권장 batch 21**: doabletuple #142 + medAndro #143 (2025 코호트 양 단계 완성 2개) + 새 1단계 3개 (예: #109 cucumber99 + #113 jiyuneel + #118 gahyunkim)
637
+
638
+ ### batch 22 후보 (다음 세션)
639
+
640
+ - **양 단계 완성 우선**:
641
+ - cucumber99 2단계 PR (확인 필요, #144·#150 후보)
642
+ - jiyuneel #140 (포르 2단계, 16 thread) — *batch 21 권장 후보였음*
643
+ - gahyunkim #141 (조이 2단계, 21 thread) — *batch 21 권장 후보였음*
644
+ - Hogu59 #96 (악어 2단계, 28 thread) — **가치 매우 높음** (1단계 #71 적음 = 2단계 단독 가치)
645
+ - **신규 1단계**:
646
+ - #121 devfeijoa (이든 1단계, 24 thread) — *최후 1단계 ≥10 thread 미분석*
647
+ - #19 briandr97 (빅스 1단계, 14 thread, 2023 코호트)
648
+ - **권장 batch 22**: jiyuneel #140 + gahyunkim #141 + Hogu59 #96 (2단계 완성 3개) + 새 1단계 2개 (#121 devfeijoa + #19 briandr97)
649
+
650
+ ### batch 23 후보 (다음 세션)
651
+
652
+ - **남은 양 단계 완성 후보**:
653
+ - cucumber99 2단계 PR (확인 필요, #144 또는 #149)
654
+ - **신규 1단계** (≥10 thread, 미분석 잔여):
655
+ - 거의 다 완료. 5~9 그룹 진입 시점.
656
+ - **5~9 그룹 짧은 분석** (14 PR, 400-600줄/PR):
657
+ - 가장 풍부한 thread 7-9 PR 부터 시도
658
+ - **최종 정리** 또는 **5~9 진입** 결정 시점.
659
+
660
+ ### §28 신규 안티패턴 (batch 28, 4 PR — 5 thread 이하 패스 정책)
661
+
662
+ batch 28 (#50, #105, #59, #52) 에서 신규/강화 안티패턴:
663
+
664
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
665
+ |---|---|---|
666
+ | **`effective-kotlin-inferred-type-reference`** + **`reviewer-book-chapter-citation`** (Effective Kotlin Item 4·14 챕터 명시) | 1 (#50) | ⭐⭐⭐ 신규 정점 |
667
+ | **외부 서적 인용 누적 5 PR** (조영호·로버트 마틴·LISP·엘레강트 오브젝트·Effective Kotlin) | 5 (#154·#150·#62·#136·#50) | ⭐⭐⭐ MCP 핵심 가치 정점 강화 |
668
+ | **`dealer-constructor-vs-player-runtime-injection`** (불변=생성자/가변=실행 시 주입, 누적 3 PR) | 3 (#50·#38·#154) | ⭐⭐⭐ |
669
+ | **`deck-fill-strategy-via-constructor`** (덱 전략 생성자 주입, 누적 3 PR) | 3 (#50·#30·#154) | ⭐⭐⭐ |
670
+ | **`bjackjack-vs-normal-win-different-responsibility`** (enum 책임 분리 시그널) | 1 (#50) | ⭐⭐⭐ 신규 |
671
+ | **`firstclass-collection-mutable-inner-with-tolist-return`** (일급 컬렉션 + Mutable 내부 + toList) | 1 (#50) | ⭐⭐ |
672
+ | **`student-cross-pr-feedback-continuity`** (1단계 리뷰 링크 + 2단계 연장) | 1 (#50) | ⭐⭐ |
673
+ | **`assertall-vs-sequential-assert-tradeoff`** (assertAll 효율) | 2 (#50·#42) | ⭐⭐ |
674
+ | **`reviewer-deadline-miss-merge-vocabulary`** (기한 초과 머지, 누적 3 PR) | 3 (#50·#134·#97) | ⭐⭐ |
675
+ | **`pr-body-domain-vocabulary-with-screenshot`** (PR 본문 도메인 어휘 + 이미지) | 1 (#105) | ⭐⭐⭐ 신규 정점 |
676
+ | **`score-display-vs-score-compare-separation`** (점수 출력 vs 비교 분리, 누적 3 PR) | 3 (#105·#134·#50) | ⭐⭐⭐ 정점 |
677
+ | **`controller-imagination-test`** (laco-dev 시그니처 양 PR) | 2 (#105·#154) | ⭐⭐⭐ (누적 2 PR) |
678
+ | **`policy-as-int-to-object-with-role`** (Policy 원시값 → 객체 역할) | 1 (#105) | ⭐⭐⭐ 신규 |
679
+ | **`statistics-as-pure-value-vs-responsibility`** (Statistics 단순 값 / 정보 보유자 책임) | 3 (#105·#134·#38) | ⭐⭐⭐ 정점 |
680
+ | **`student-self-question-mark-self-deprecation`** (학생 자가 *물음표 자조* 누적 3 PR) | 3 (#105·#150·#144) | ⭐⭐ |
681
+ | **`test-only-secondary-constructor-anti-pattern`** (테스트용 부 생성자 → Fixture) | 2 (#105·#154) | ⭐⭐ |
682
+ | **`operator-overload-times-domain`** 누적 4 PR | 4 (#37·#47·#150·#105) | ⭐⭐⭐ |
683
+ | **`mvc-collaboration-scenario-vocabulary`** (학생 자가 MVC 1인 vs 다인 협업 시나리오) | 1 (#59) | ⭐⭐⭐ 신규 정점 |
684
+ | **`team-explanation-criteria-test`** (다른 팀원 설명 가능 기준) | 3 (#59·#97·#134) | ⭐⭐⭐ 정점 |
685
+ | **`view-no-loop-collection-decoupling`** (View 컬렉션 루프 = 결합 시그널) | 1 (#59) | ⭐⭐⭐ 신규 |
686
+ | **`interface-no-concrete-dependency`** (인터페이스 = 일반 / 특정 의존성 X, 누적 3 PR) | 3 (#59·#150·#154) | ⭐⭐⭐ |
687
+ | **`return-lift-vs-else-tradeoff`** (객체지향 생활체조 else 회피 vs Kotlin lift return) | 1 (#59) | ⭐⭐⭐ 신규 |
688
+ | **`java-based-principle-kotlin-exception`** (자바 기반 원칙 = Kotlin 예외 학생 자가 정당화) | 1 (#59) | ⭐⭐ |
689
+ | **`template-method-pattern-on-state`** (수업 시간 학습 → 상태 패턴 자가 적용, 누적 3 PR) | 3 (#59·#89·#62) | ⭐⭐ |
690
+ | **`student-self-acknowledgment-of-confusion`** (학생 자가 *혼동 명시*) | 1 (#59) | ⭐⭐ |
691
+ | **`student-self-acknowledgment-opposing-view-validity`** (학생 자가 반대 의견 합당성 인정) | 1 (#59) | ⭐⭐ |
692
+ | **`extension-fn-location-near-parent-class`** (확장함수 = 부모 클래스 계층 정합) | 1 (#59) | ⭐⭐ |
693
+ | **`return-bundling-via-existing-aggregate`** (기존 집합 객체로 묶기) | 1 (#59) | ⭐⭐ |
694
+ | **`reviewer-student-detailed-intent-acknowledgment`** (학생 의도 상세 = reviewer 같이 생각) | 1 (#59) | ⭐⭐ |
695
+ | **`pr-body-three-instance-var-difficulty-vocabulary`** (학생 자가 3 인스턴스 변수 원칙 어려움) | 1 (#52) | ⭐⭐ |
696
+ | **`kotlin-wildcard-import-avoid`** (Kotlin 와일드카드 import + ktlint ref) | 1 (#52) | ⭐ |
697
+ | **`null-guarantee-via-getorelse`** (`getOrElse` null 회피) | 1 (#52) | ⭐⭐ |
698
+ | **원칙 vs 본질 단일 답 거부 누적 5 PR** (#38·#62·#43·#37·#59) | 5 | ⭐⭐⭐ MCP 핵심 가치 정점 |
699
+
700
+ ### batch 28 메타 어휘 (MCP `oh-my-oop` 핵심 가치 정점)
701
+
702
+ - **`mvc-collaboration-scenario-vocabulary`** (briandr97 #59) — *"m, v, c를 각자 다른 사람이 개발한다고 생각했을 때 도메인 개발자는 프린트 되는 시점을 알 필요가 없고 단순히 필요한 값들만 전달 받으면 된다고 생각했습니다."* — **학생 자가 MVC 협업 시뮬레이션 어휘 정점**.
703
+ - **`team-explanation-criteria-test`** (vagabond95 #59) — *"다른 팀원이 개발을 진행할 때, XxxView 와 XxxOutput 에 어떤 코드를 넣어야할지 명확한 기준을 설명할 수 있을까요?"* — **판단 기준 어휘 정점**.
704
+ - **`return-lift-vs-else-tradeoff`** (briandr97 #59) — *"else를 지양하라는 객체지향 생활체조 원칙 때문에 이렇게 진행하였는데 해당 원칙은 자바를 기반으로 기술되어 코틀린에서는 예외가 있을 수 있다고 생각됩니다!"* — **원칙 vs 본질 학생 자가 정당화 어휘**.
705
+ - **`student-self-acknowledgment-opposing-view-validity`** (briandr97 #59) — *"혼동 될 수 있다고 생각하고 합쳐야한다는 의견 또한 합당하다고 생각됩니다!"* — **학생 자가 반대 의견 합당성 인정 어휘**.
706
+ - **`controller-imagination-test`** (laco-dev #105 + #154) — *"지금 블랙잭 프로그램은, 컨트롤러 없이 게임이 가능할까?"* — **laco-dev 시그니처 어휘 양 PR**.
707
+ - **`effective-kotlin-inferred-type-reference`** (malibinYun #50) — *"Effective Kotlin 서적의 챕터를 참고해서 스스로 생각해본 것과 비교해보아요. Item 4: Inferred Type으로 리턴하지 말라"* — **외부 권위 인용 누적 5 PR 정점**.
708
+ - **`pr-body-domain-vocabulary-with-screenshot`** (aprilgom #105) — PR 본문 strength 족보 어휘 + 이미지 첨부 + 점수 출력 vs 비교 분리 어휘.
709
+ - **`score-display-vs-score-compare-separation`** (aprilgom #105) — *"승패를 비교할 때는 strength를 이용하고, 점수 출력을 할 때에는 손에 있는 카드 점수의 총합을 이용해 출력합니다."* — **도메인 책임 분리 어휘 누적 3 PR**.
710
+
711
+ ### batch 28 누적 정점 안티패턴 (⭐⭐⭐ 강한 신규 후보)
712
+
713
+ batch 7-28 합계 MCP 룰 후보가 **530종+**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 28 강화):
714
+ - 외부 서적 인용 누적 5 PR (조영호·로버트 마틴·LISP·엘레강트 오브젝트·Effective Kotlin)
715
+ - 원칙 vs 본질 단일 답 거부 누적 5 PR
716
+ - `mvc-collaboration-scenario-vocabulary` (MVC 1인 vs 다인 학생 자가 사고)
717
+ - `team-explanation-criteria-test` (판단 기준 누적 3 PR)
718
+ - `controller-imagination-test` (laco-dev 시그니처 누적 2 PR)
719
+ - `score-display-vs-score-compare-separation` (도메인 책임 분리 누적 3 PR)
720
+ - `statistics-as-pure-value-vs-responsibility` (Statistics 책임 누적 3 PR)
721
+ - `interface-no-concrete-dependency` (인터페이스 일반 / 특정 의존성 X 누적 3 PR)
722
+ - `pr-body-domain-vocabulary-with-screenshot` (학생 자가 PR 본문 어휘 + 이미지)
723
+ - `dealer-constructor-vs-player-runtime-injection` (불변/가변 의존 시점 누적 3 PR)
724
+
725
+ ### 최종 정리 진입 시점 — batch 28 완료
726
+
727
+ | 지표 | batch 27 | batch 28 (현재) |
728
+ |---|---|---|
729
+ | 양 단계 완성 | 59명 | **63명** (+4, 5 thread 이하 패스 정책) |
730
+ | reviewee 디렉토리 | 77 | **81** (+4) |
731
+ | 누적 PR | 131 | **135** (+4) |
732
+ | 메타 학습 케이스 | 13 | **14** (+1: briandr97 MVC 시뮬레이션 + 판단 기준) |
733
+ | 누적 MCP 룰 후보 | 500+ | **530+** |
734
+ | 2025 코호트 PR | 16 | 16 |
735
+ | 누적 reviewer | 14 | 14 (BeokBeok/malibinYun/laco-dev/vagabond95 재등장) |
736
+ | 5 thread 이하 패스 | - | 사용자 명시 정책 (남은 5 thread 4개 + 0 thread 16개 패스) |
737
+
738
+ ### §27 신규 안티패턴 (batch 27, 5 PR)
739
+
740
+ batch 27 (#37, #134, #101, #97, #150) 에서 신규/강화 안티패턴:
741
+
742
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
743
+ |---|---|---|
744
+ | **`process-in-controller-vs-main-testability`** (`process()` Controller vs main = 테스트 가능성) | 1 (#37) | ⭐⭐⭐ 신규 |
745
+ | **`principle-as-guide-not-absolute`** (3 인스턴스 변수 원칙 = 가이드 / 절대 X) | 4 (#37·#38·#62·#43) | ⭐⭐⭐ 정점 (누적 4 PR 단일 답 거부) |
746
+ | **`forced-class-division-without-role`** (역할 없는 클래스 분리 거부) | 2 (#37·#42) | ⭐⭐⭐ (누적 2 PR) |
747
+ | **`operator-overload-times-domain`** (`times()` 도메인 어휘) | 3 (#37·#47·#150) | ⭐⭐ (누적 3 PR) |
748
+ | **`output-fake-with-print-callback`** (Fake 출력 = `onPrint()` 고차함수) | 1 (#37) | ⭐⭐⭐ 신규 |
749
+ | **`unnecessary-let-as-readability-loss`** (`let()` = 가독성 손실) | 2 (#37·#42) | ⭐⭐ (누적 2 PR) |
750
+ | **`student-self-pros-cons-tabulation`** (학생 자가 트레이드오프 도표화 + 결론 명시) | 1 (#134) | ⭐⭐⭐ 신규 정점 |
751
+ | **`client-perspective-vocabulary`** (클라이언트 입장 vs 구현자 입장 학생 자가 자각) | 1 (#134) | ⭐⭐⭐ 신규 정점 |
752
+ | **`abstract-vs-interface-criteria`** (interface = 다형성/역할 / abstract = 코드 중복+강력 도구) | 1 (#134) | ⭐⭐⭐ 신규 |
753
+ | **`state-pattern-no-type-casting-hidden-requirement`** (블랙잭 = 타입 캐스팅 X 숨겨진 요구사항) | 4 (#134·#154·#42·#73) | ⭐⭐⭐ 정점 (누적 4 PR) |
754
+ | **`score-vs-blackjack-score-locus`** (Score = 일반 / 블랙잭 룰 = ParticipantState) | 1 (#134) | ⭐⭐⭐ 신규 |
755
+ | **`responsibility-shift-side-effect-discovery`** (책임 이전 시 다른 클래스 캡슐화 부작용 자가 발견) | 1 (#134) | ⭐⭐⭐ 신규 |
756
+ | **`reviewer-mission-time-bound-conclusion-vocabulary`** (학습 시간 한계 → 미션 마무리 + 재구현 권유) | 2 (#134·#115) | ⭐⭐⭐ (누적 2 PR) |
757
+ | **`pr-body-prior-feedback-applied-list`** (1단계 영감 자가 적용 리스트) | 1 (#134) | ⭐⭐ |
758
+ | **`state-hierarchy-inverted-relationship`** (상태 계층 관계 역전 시그널) | 1 (#134) | ⭐⭐ |
759
+ | **`tell-dont-ask-student-self-realization-vocabulary`** (학생 자가 *객체 자유 + 메시지 요청*) | 3 (#101·#38·#154) | ⭐⭐⭐ 정점 (누적 3 PR) |
760
+ | **`responsibility-clarity-via-demeter`** (학생 자가 *디미터 후 역할/책임 명확화* 자가 자각) | 1 (#101) | ⭐⭐⭐ 신규 |
761
+ | **`message-vocabulary-student-self-narration`** (학생 자가 *메시지를 날린다* narrate) | 1 (#101) | ⭐⭐⭐ 신규 — MCP 핵심 가치 |
762
+ | **`comment-removal-as-refactoring-feedback`** (학생 자가 *리팩터링 후 주석 불필요* 자가 자각) | 1 (#101) | ⭐⭐⭐ 신규 |
763
+ | **`single-traversal-for-mutual-result`** (한 번의 순회로 양측 승패+수익) | 1 (#101) | ⭐⭐⭐ 신규 |
764
+ | **`naming-from-self-perspective-consistency`** (본인 중심 명명 일관) | 1 (#101) | ⭐⭐⭐ 신규 |
765
+ | **`companion-object-fn-for-reuse-instead-of-instantiation`** (companion object function = 인스턴스화 불필요) | 3 (#101·#154·#18) | ⭐⭐⭐ (누적 3 PR) |
766
+ | **`init-fn-reusable-vs-init-only`** (init 함수 = 재사용 vs 최초만 + 흐름 정합) | 1 (#101) | ⭐⭐ |
767
+ | **`factory-fn-for-named-state-reuse`** (win/push/defeat 생성자 함수 = 가독성 + 재사용) | 1 (#101) | ⭐⭐ |
768
+ | **`maintainability-over-performance-priority`** (유지보수 > 성능 우선순위 + 개인 경험) | 1 (#97) | ⭐⭐⭐ 신규 정점 |
769
+ | **`code-judgment-criteria-test-fn-clarity`** (판단 기준 = 테스트 가능 + 함수 명확) | 1 (#97) | ⭐⭐⭐ 신규 정점 |
770
+ | **`public-fn-as-message-collaboration-vocabulary`** (public = 메시지 통로 + 협력 관계) | 3 (#97·#42·#101) | ⭐⭐⭐ 정점 (누적 3 PR) |
771
+ | **`static-fn-as-misplaced-utility`** (static 함수 = 어느 객체에도 무관 유틸) | 2 (#97·#80) | ⭐⭐⭐ (누적 2 PR) |
772
+ | **`branch-multiplication-as-test-burden-signal`** (분기 N×M = 테스트 부담 → 상태 패턴) | 5 (#97·#154·#42·#89·#134) | ⭐⭐⭐ 정점 (누적 5 PR) |
773
+ | **`result-as-state-not-final-vocabulary`** (GameResult → GameState 진행 중 어휘) | 1 (#97) | ⭐⭐⭐ 신규 |
774
+ | **`reviewer-feedback-prioritization-meta`** (reviewer 피드백 우선순위 메타) | 1 (#97) | ⭐⭐⭐ 신규 |
775
+ | **`reviewer-mid-mission-direction-regret`** (reviewer 자가 *방향 안내 부족 아쉬움*) | 7 (#97·#62·#89·#115·#73·#106·#54) | ⭐⭐⭐ MCP 핵심 가치 최정점 (누적 7 PR) |
776
+ | **`pr-body-restart-from-scratch-consideration`** (학생 자가 *처음부터 다시 구현 고려*) | 3 (#97·#154·#89) | ⭐⭐⭐ (누적 3 PR) |
777
+ | **`time-bound-priority-package-vs-design`** (시간 한계 우선순위 어휘) | 3 (#97·#115·#134) | ⭐⭐ |
778
+ | **`reviewer-personal-experience-vocabulary`** (reviewer 안드로이드 경험 어휘) | 2 (#97·#62) | ⭐⭐ |
779
+ | **`student-SOLID-violation-self-realization`** (학생 자가 DIP/OCP/SRP 위반 동시 자가 자각) | 1 (#150) | ⭐⭐⭐ 신규 정점 |
780
+ | **`abstract-class-knowing-concretes-anti-pattern`** (추상 클래스가 구현체 안다 = DIP 위반) | 1 (#150) | ⭐⭐⭐ 신규 |
781
+ | **`accidental-vs-essential-duplication-distinction`** (우발적 중복 vs 진짜 중복 자가 자각) | 1 (#150) | ⭐⭐⭐ 신규 정점 |
782
+ | **`student-cites-robert-martin`** (학생 자가 로버트 마틴 인용 — 외부 권위 누적 4 PR) | 4 (#150·#154·#151·#136) | ⭐⭐⭐ 정점 (누적 4 PR) |
783
+ | **`interface-without-polymorphism-purpose-loss`** (인터페이스 분리 = 다형성 X = 의미 퇴색) | 3 (#150·#80·#134) | ⭐⭐⭐ (누적 3 PR) |
784
+ | **`polymorphism-vs-when-branch-on-concrete`** (when 분기 = 구현체 의존 / 다형성 해결) | 6 (#150·#154·#97·#42·#73·#101) | ⭐⭐⭐ 정점 (누적 6 PR) |
785
+ | **`feature-spec-before-impl-habit-vocabulary`** (기능 명세서 우선 습관) | 1 (#150) | ⭐⭐ |
786
+ | **`reviewer-student-passion-acknowledgment`** (학생 열정 → reviewer 자가 깊은 질문) | 1 (#150) | ⭐⭐ |
787
+ | **`pr-body-student-design-focus-explicit`** (학생 자가 설계 초점 PR 본문 명시) | 1 (#150) | ⭐⭐ |
788
+ | **`student-bug-discovery-with-screenshot`** (학생 자가 버그 발견 + 스크린샷) | 1 (#150) | ⭐⭐ |
789
+ | **`responsibility-of-judging-no-single-answer`** (승패 책임 위치 = 정답 없음) | 1 (#43) | ⭐⭐⭐ |
790
+ | **`controller-runs-game-business-encapsulation`** (Controller 어휘 누적 9 PR) | 9 (#37·#42·#48·#47·#72·#43·#54·#134·#150·#97) | ⭐⭐⭐ 정점 |
791
+
792
+ ### batch 27 메타 어휘 (MCP `oh-my-oop` 핵심 가치 정점)
793
+
794
+ - **`maintainability-over-performance-priority`** (ghojeong #97) — *"저는 쉬운 유지보수를 최우선 가치로 개발하고, 성능은 문제가 되었을 경우에만 최적화를 합니다. (...) 성능이 느려서 문제가 되는 경우보다 유지보수가 어려워서 추가 기능 개발이 느려지는 게 문제가 되는 경우가 훨씬 많았기 때문입니다."* — **유지보수 우선 어휘 정점**.
795
+ - **`public-fn-as-message-collaboration-vocabulary`** (ghojeong #97) — *"public 하게 공개된 함수는 생성자를 포함하여, 다른 객체에게 소통의 통로가 되는 메시지 입니다."* — **메시지 어휘 정점**.
796
+ - **`tell-dont-ask-student-self-realization-vocabulary`** (Junyoung-WON #101) — *"객체가 내부에서 무엇을 하고 어떻게 처리하는지는 객체의 자유에 맡기고, state에서는 한번의 메시지로 요청만 보내도록 하면 더욱 객체지향적이겠군요!"* — **학생 자가 Tell-Don't-Ask 자가 자각 정점**.
797
+ - **`student-SOLID-violation-self-realization`** (chanho0908 #150) — *"이 경우 저는 추상화에 의존하는줄 알았지만 사실은 구현체에 의존하고 있었고 DIP를 위배하는 것 같습니다 (...) 그리고 이런 행위는 OCP도 위반하는 행위라고 생각합니다! (...) SRP를 준수할 수 있다고 생각해요! 나열하고 보니 아주 아주 못난이 코드였네요"* — **학생 자가 SOLID 3종 동시 위반 자가 자각 + 자조 어휘 정점**.
798
+ - **`accidental-vs-essential-duplication-distinction`** (chanho0908 #150) — *"여기서 제가 생각하는 중복은 로버트 마틴이 주장한 \"우발적 중복\"에 해당한다고 생각합니다."* — **학생 자가 외부 권위 인용 + 우발적 중복 자가 자각 어휘**.
799
+ - **`client-perspective-vocabulary`** (giovannijunseokim #134) — *"`Card`를 사용하는 클라이언트 입장에서는 생성자를 부르고 있는 것인지, `invoke` 함수를 부르고 있는 것인지 알아볼 필요가 없다고 생각해요."* — **학생 자가 관점 전환 어휘 정점**.
800
+ - **`principle-as-guide-not-absolute`** (galcyurio #37) — *"원칙을 따르는 것은 좋지만 절대적으로 항상 올바른 원칙은 없기에 모든 경우에 적용시켜서는 안됩니다."* — **단일 답 거부 어휘 누적 4 PR 정점**.
801
+ - **`reviewer-mid-mission-direction-regret`** (ghojeong #97) — *"제가 더 일찍 방향을 잡아주지 못해서 살짝 아쉬움이 남네요. 모든 내용을 학습하지 못한 것에 크게 마음 두지 마시고"* — **reviewer 자가 반성 어휘 누적 7 PR 최정점**.
802
+
803
+ ### batch 27 누적 정점 안티패턴 (⭐⭐⭐ 강한 신규 후보)
804
+
805
+ batch 7-27 합계 MCP 룰 후보가 **500종+**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 27 강화):
806
+ - `reviewer-mid-mission-direction-regret` (reviewer 자가 반성 어휘 누적 7 PR 최정점)
807
+ - `tell-dont-ask-student-self-realization-vocabulary` (Tell-Don't-Ask 학생 자가 자각 누적 3 PR)
808
+ - `student-SOLID-violation-self-realization` (학생 자가 SOLID 3종 동시 위반 자가 자각)
809
+ - `student-cites-robert-martin` + 학생 자가 외부 권위 인용 누적 4 PR (조영호·로버트 마틴·객체 지향 생활 체조·엘레강트 오브젝트)
810
+ - `client-perspective-vocabulary` + `student-self-pros-cons-tabulation` (학생 자가 정점 어휘)
811
+ - `branch-multiplication-as-test-burden-signal` (분기 N×M 누적 5 PR)
812
+ - `state-pattern-no-type-casting-hidden-requirement` (블랙잭 숨겨진 요구사항 누적 4 PR)
813
+ - `polymorphism-vs-when-branch-on-concrete` (다형성 누적 6 PR)
814
+ - `principle-as-guide-not-absolute` (단일 답 거부 누적 4 PR)
815
+ - `maintainability-over-performance-priority` + `code-judgment-criteria-test-fn-clarity` + `public-fn-as-message-collaboration-vocabulary` (ghojeong 어휘 정점 3개)
816
+ - `accidental-vs-essential-duplication-distinction` + `abstract-class-knowing-concretes-anti-pattern`
817
+ - `responsibility-clarity-via-demeter` + `message-vocabulary-student-self-narration` (메시지 어휘 학생 측 정점)
818
+ - `controller-runs-game-business-encapsulation` (Controller 어휘 누적 9 PR 최정점)
819
+ - `pr-body-restart-from-scratch-consideration` (학생 자가 갈아엎기 고민 누적 3 PR)
820
+
821
+ ### 최종 정리 진입 시점 — batch 27 완료
822
+
823
+ | 지표 | batch 26 | batch 27 (현재) |
824
+ |---|---|---|
825
+ | 양 단계 완성 | 54명 | **59명** (+5) |
826
+ | reviewee 디렉토리 | 72 | **77** (+5) |
827
+ | 누적 PR | 126 | **131** (+5) |
828
+ | 메타 학습 케이스 | 9 | **13** (+4: giovannijunseokim/Junyoung-WON/kimhm0728/chanho0908) |
829
+ | 누적 MCP 룰 후보 | 450+ | **500+** |
830
+ | 2025 코호트 PR | 14 | **16** (+2: chanho0908 #123 1단계 batch 분석 시점 + #150 2단계) |
831
+ | 누적 reviewer | 14 | 14 (galcyurio/malibinYun/vagabond95/ghojeong/lee-ji-hoon 재등장) |
832
+
833
+ ### §26 신규 안티패턴 (batch 26, 5 PR)
834
+
835
+ batch 26 (#30, #42, #62, #89, #54) 에서 신규/강화 안티패턴:
836
+
837
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
838
+ |---|---|---|
839
+ | **`error-message-as-inline-string-with-template`** (상수화 = `%s` + format / inline = 변수 포함) | 1 (#30) | ⭐⭐⭐ 신규 정점 |
840
+ | **`dto-as-domain-logic-naming-test`** + **`naming-removal-as-design-test`** (DTO 네이밍 제거 = 역할 중복 진단) | 1 (#30) | ⭐⭐⭐ 신규 |
841
+ | **`map-external-loss-of-meaning`** (Map<K, V> 외부 = 어휘 손실) | 2 (#30·#38) | ⭐⭐⭐ 신규 (누적 2 PR) |
842
+ | **`cli-y-n-as-ui-not-domain`** (CLI y/n = 플랫폼 종속 UI) | 2 (#30·#14) | ⭐⭐⭐ (누적 2 PR) |
843
+ | **`controller-presentation-logic-must-test`** (Controller = presentation logic 테스트 대상) | 4 (#42·#48·#47·#72) | ⭐⭐⭐ 정점 (누적 4 PR) |
844
+ | **`business-logic-4-layer-classification`** (ui/presentation/domain/data logic 4-layer) | 1 (#42) | ⭐⭐⭐ 신규 |
845
+ | **`callback-name-from-domain-perspective`** (block → onDealerHit 도메인 입장 어휘) | 4 (#42·#80·#15·#137) | ⭐⭐⭐ 정점 (누적 4 PR) |
846
+ | **`domain-to-presentation-mapper-pattern`** (Domain enum + Presentation enum + `toPresentation()`) | 1 (#42) | ⭐⭐⭐ 신규 |
847
+ | **`info-suffix-as-misplaced-data`** (PlayerInfo → Player 자체 필드) | 1 (#42) | ⭐⭐⭐ 신규 |
848
+ | **`actor-with-actor-self-reference-awkward`** (player가 player 가짐 = 객체지향 어색) | 1 (#42) | ⭐⭐ 신규 |
849
+ | **`index-loop-as-procedural-signal`** (index loop = LISP single linked list + Lazy Evaluation) | 1 (#62) | ⭐⭐⭐ 신규 정점 |
850
+ | **`foreach-as-procedural-signal-but-not-forbidden`** (forEach = 시그널 / 금지 X) | 1 (#62) | ⭐⭐⭐ 신규 |
851
+ | **`map-filter-reduce-as-functional-toolkit`** (함수형 3 도구) | 1 (#62) | ⭐⭐⭐ 신규 정점 |
852
+ | **`reviewer-self-correction-on-strong-feedback`** (강한 피드백 자가 수정 + 강요 X 명시) | 1 (#62) | ⭐⭐⭐ 신규 정점 |
853
+ | **`reviewer-self-reflection-mission-goal-return`** (reviewer 본인 취향 → 미션 본 목표 자가 반성 + 갈아엎기 사과) | 1 (#89) | ⭐⭐⭐ 신규 정점 |
854
+ | **reviewer 자가 강요 회피 어휘 누적 6 PR** (#62 + #89 + #115 + #73 + #106 + #54) | 6 | ⭐⭐⭐ MCP `oh-my-oop` 핵심 가치 정점 |
855
+ | **`mutable-team-policy-no-single-answer`** (불변/Mutable = 팀마다 다름) | 2 (#62·#38) | ⭐⭐⭐ (누적 2 PR 단일 답 거부) |
856
+ | **`mutable-member-comprehensive-state-test`** (Mutable 멤버 변경 메서드 = 내부 값 전체 테스트) | 1 (#62) | ⭐⭐⭐ 신규 |
857
+ | **`higher-order-function-as-abstraction-alternative`** (상속/interface X 환경 = HOF 추상화) | 1 (#62) | ⭐⭐⭐ 신규 |
858
+ | **`interrupt-as-functional-impurity-justification`** (시스템 IO = 함수형 한계) | 1 (#62) | ⭐⭐ 신규 |
859
+ | **`ace-as-low-high-data-class-pattern`** (Ace 1↔11 = LOW/HIGH data class 분리) | 1 (#62) | ⭐⭐ 신규 도메인 특수 |
860
+ | **`state-mutation-in-loop-as-procedural-signal`** (루프 + 상태 변경 = 튜링머신) | 1 (#62) | ⭐⭐⭐ 신규 |
861
+ | **`pr-body-property-vs-method-question`** (계산 프로퍼티 vs 메서드 자가 질문) | 1 (#62) | ⭐⭐ 신규 |
862
+ | **`student-slack-dm-learning-meta`** (PR 외 Slack DM 자가 학습) | 1 (#62) | ⭐⭐ 신규 |
863
+ | **`reviewer-personal-episode-vocabulary`** (사수 멘붕 에피소드 등 reviewer 개인 경험) | 1 (#62) | ⭐⭐ 신규 |
864
+ | **`pr-body-student-self-study-on-reviewer-recommendation`** (reviewer 추천 어휘 학생 자가 학습 + PR 본문 명시) | 2 (#89·#154) | ⭐⭐⭐ (누적 2 PR) |
865
+ | **`state-pattern-2-criteria`** (다형성 + Context 책임 2 기준) | 3 (#89·#154·#42) | ⭐⭐⭐ 정점 (누적 3 PR) |
866
+ | **`student-restart-on-reviewer-request`** (reviewer 갈아엎기 요청 → 학생 도전) | 1 (#89) | ⭐⭐⭐ 신규 |
867
+ | **`callback-string-vs-boolean-return-type`** (콜백 리턴 = 도메인 의미 명시) | 1 (#89) | ⭐⭐ 신규 |
868
+ | **`map-with-while-as-indentation-depth-signal`** (map 안 while = depth 시그널) | 1 (#89) | ⭐⭐ 신규 |
869
+ | **`property-vs-function-state-vs-behavior`** (프로퍼티 = 상태 / 함수 = 행동) | 2 (#54·#62) | ⭐⭐⭐ 신규 정점 (누적 2 PR) |
870
+ | **`unnecessary-indirect-call`** (불필요 위임 = 분석 부담 — PR #72 반대 어휘) | 1 (#54) | ⭐⭐⭐ 신규 정점 (위임 가치 vs 부담 트레이드오프) |
871
+ | **`requirement-as-constraint-not-additional`** (완성도 추가 제약 ≠ 요구사항) | 1 (#54) | ⭐⭐⭐ 신규 |
872
+ | **`val-vs-var-override-discipline`** (부모 val + 자식 var = 다른 개발자 유도) | 1 (#54) | ⭐⭐⭐ 신규 |
873
+ | **`lambda-chain-as-trace-complexity`** (람다 다중 전달 = 흐름 파악 부담) | 1 (#54) | ⭐⭐⭐ 신규 |
874
+ | **`reviewer-recommend-not-required-meta`** ("수정을 권장하는 것이 아니므로 참고") | 1 (#54) | ⭐⭐ |
875
+ | **`pr-body-incremental-refactor-difficulty`** (점진적 리팩터링 어려움 학생 자가 어휘) | 1 (#54) | ⭐⭐ 신규 |
876
+ | **`object-as-key-not-name`** (Map<Person, Int> = 객체 키 + 이름 중복 의존 X) | 1 (#54) | ⭐⭐ |
877
+ | **`assertj-soft-assertion-for-long-tests`** (긴 테스트 = assertj soft assertion) | 1 (#42) | ⭐⭐ 신규 |
878
+ | **`expression-body-too-long-as-local-var`** (expression body 한 줄 길면 지역변수) | 1 (#42) | ⭐ |
879
+ | **`mapper-top-level-declaration`** (mapper 함수 = 클래스 선언 곳 top-level) | 1 (#42) | ⭐⭐ |
880
+ | **`collection-as-game-participant-filter`** (BettingPlayers 복수 = 게임 참여자만 일급 컬렉션) | 1 (#42) | ⭐⭐ |
881
+ | **`unreachable-callback-call`** (if문 분기 후 불필요 콜백 호출) | 1 (#42) | ⭐ |
882
+ | **`pr-body-question-list`** (PR 본문 자가 질문 번호) | 1 (#30) | ⭐⭐ |
883
+ | **`kotlin-sequence-as-lazy-evaluation`** (Sequence = Lazy Evaluation) | 1 (#62) | ⭐⭐ |
884
+ | **`behavior-locus-state-vs-participant-question`** (행동 책임 위치 State vs Participant 학생 자가 고민) | 1 (#89) | ⭐⭐ |
885
+
886
+ ### batch 26 메타 어휘 (MCP `oh-my-oop` 핵심 가치 정점)
887
+
888
+ - **`reviewer-self-correction-on-strong-feedback`** (ghojeong #62) — *"헉! for 문을 제거하라는 피드백이 절대 아니었습니다. 절차지향이 나쁜 게 아니라고 고정관념을 깨고 싶어서 말씀드렸습니다."* — **reviewer 강한 피드백 자가 수정 어휘 정점**.
889
+ - **`reviewer-self-reflection-mission-goal-return`** (ghojeong #89) — *"제가 반응형 프로그래밍 덕후이다 보니, 순수 코틀린 언어에서의 객체 설계라는 주제를 벗어나는 방향으로, 해음과 대화를 많이하게 된 것 같습니다. 저도 반성을 하면서, 블랙잭 미션의 본래 목표인 객체 설계로 되돌아가고자 합니다. 죄송하지만, 2단계 미션의 구조를 버리고 다시 작성해주시면 감사하겠습니다."* — **reviewer 자가 반성 + 미션 본 목표 복귀 + 갈아엎기 사과 어휘 정점**.
890
+ - **`reviewer 자가 강요 회피 어휘 누적 6 PR 정점`** (#62 ghojeong + #89 ghojeong + #115 laco-dev + #73 ghojeong + #106 말리빈 + #54 BeokBeok) — **MCP `oh-my-oop` 핵심 가치 어휘 최정점**.
891
+ - **`mutable-team-policy-no-single-answer`** (ghojeong #62) — *"어디까지 불변을 강제하고, Mutable 을 허용해줄까는 개발팀마다 다릅니다."* — 단일 답 거부 누적 2 PR.
892
+ - **`controller-presentation-logic-must-test`** + **`business-logic-4-layer-classification`** (galcyurio #42) — *"presentation logic / domain logic / data logic"* — 4-layer 분류 어휘 정점.
893
+ - **`callback-name-from-domain-perspective`** (galcyurio #42) — *"block → onDealerHit 도메인 입장 어휘"* — 콜백 명명 누적 4 PR 어휘 정점.
894
+ - **`error-message-as-inline-string-with-template`** (galcyurio #30) — *"개인적인 컨벤션으로는 항상 inline으로 작성합니다."* — 단일 답 X + 개인 컨벤션 어휘.
895
+ - **`index-loop-as-procedural-signal`** + **`map-filter-reduce-as-functional-toolkit`** (ghojeong #62) — *"List 는 LISP 라는 프로그래밍 언어에서 중요하게 도입되었던 개념인데, 전통적으로 List 는 single linked list"* — 함수형 어휘 정점.
896
+ - **`state-pattern-2-criteria`** (ghojeong #89) — *"State 디자인 패턴은 다음 두가지를 확인합니다. 1. 다형성 활용 2. Context 책임 부여"* — 상태 패턴 어휘 정점.
897
+ - **`unnecessary-indirect-call`** vs **`forward-compatible-delegation`** (BeokBeok #54 vs galcyurio #72) — *위임 가치 vs 부담 트레이드오프* — **MCP 단일 답 X 어휘 정점**.
898
+ - **`pr-body-student-self-study-on-reviewer-recommendation`** (haeum808 #89 + tobae-time #154) — *"파이로가 말씀해주신대로 flux 상태 아키텍쳐을 공부하고 적용했습니다!"* — 학생 자가 학습 메타 누적 2 PR.
899
+
900
+ ### batch 26 누적 정점 안티패턴 (⭐⭐⭐ 강한 신규 후보)
901
+
902
+ batch 7-26 합계 MCP 룰 후보가 **450종+**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 26 강화):
903
+ - `reviewer-self-correction-on-strong-feedback` + `reviewer-self-reflection-mission-goal-return` (reviewer 자가 강요 회피 어휘 누적 6 PR 정점)
904
+ - `mutable-team-policy-no-single-answer` (단일 답 거부 누적 2 PR)
905
+ - `index-loop-as-procedural-signal` + `foreach-as-procedural-signal-but-not-forbidden` + `map-filter-reduce-as-functional-toolkit` (함수형 어휘 정점)
906
+ - `controller-presentation-logic-must-test` (Controller 테스트 가치 어휘 누적 4 PR 정점) + `business-logic-4-layer-classification`
907
+ - `callback-name-from-domain-perspective` (콜백 명명 어휘 누적 4 PR 정점)
908
+ - `state-pattern-2-criteria` (State 패턴 어휘 누적 3 PR 정점)
909
+ - `unnecessary-indirect-call` vs PR #72 `forward-compatible-delegation` (위임 트레이드오프)
910
+ - `property-vs-function-state-vs-behavior` (속성 vs 함수 = 상태 vs 행동 누적 2 PR)
911
+ - `error-message-as-inline-string-with-template` (단일 답 X 개인 컨벤션 어휘)
912
+ - `domain-to-presentation-mapper-pattern` + `info-suffix-as-misplaced-data` + `dto-as-domain-logic-naming-test` (Presentation/DTO 어휘 정점)
913
+ - `student-restart-on-reviewer-request` + `pr-body-student-self-study-on-reviewer-recommendation` (학생 자가 학습 메타)
914
+ - `higher-order-function-as-abstraction-alternative` + `mutable-member-comprehensive-state-test`
915
+ - `requirement-as-constraint-not-additional` + `val-vs-var-override-discipline` + `lambda-chain-as-trace-complexity`
916
+
917
+ ### 최종 정리 진입 시점 — batch 26 완료
918
+
919
+ | 지표 | batch 25 | batch 26 (현재) |
920
+ |---|---|---|
921
+ | 양 단계 완성 | 51명 | **54명** (+3) |
922
+ | reviewee 디렉토리 | 70 | **72** (+2) |
923
+ | 누적 PR | 121 | **126** (+5) |
924
+ | 메타 학습 케이스 | 8 | **9** (+1: haeum808 reviewer 자가 반성 어휘 양 PR 연속 + 학생 자가 학습 + 갈아엎기 사과 + 학생 도전 4중 메타 정점) |
925
+ | 누적 MCP 룰 후보 | 400+ | **450+** |
926
+ | 2025 코호트 PR | 14 | 14 |
927
+ | 누적 reviewer | 14 | 14 (BeokBeok·galcyurio·ghojeong 재등장) |
928
+
929
+ ### §25 신규 안티패턴 (batch 25, 5 PR)
930
+
931
+ batch 25 (#12, #38, #115, #154, #47) 에서 신규/강화 안티패턴:
932
+
933
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
934
+ |---|---|---|
935
+ | **`rule-as-god-object-anti-pattern`** (`Rule` 클래스에 모든 도메인 행위 모음 = god-object 변형) | 1 (#115) | ⭐⭐⭐ 신규 정점 |
936
+ | **`reviewer-strong-feedback-apology-meta`** (피드백 강도 + 양해 — *"쎄게 피드백 양해"*) | 1 (#115) | ⭐⭐⭐ 신규 |
937
+ | **`reviewer-difficulty-acknowledgment-vocabulary`** (어려움 인정 + 후일 학습 격려 — *"수정 안 해도 됨"*) | 1 (#154) | ⭐⭐⭐ 신규 |
938
+ | **`pr-body-self-learning-book-citation`** (PR 본문 학생 자가 *조영호 「객체지향의 사실과 오해」* 도서 인용) | 1 (#154) | ⭐⭐⭐ 신규 정점 — MCP 도구 영감 도서 학생 자가 인용 |
939
+ | **`pr-body-restart-from-scratch`** (rebase 코드 손실 → 학습 기회로 재해석) | 1 (#154) | ⭐⭐ 신규 |
940
+ | **`pr-self-checklist-doubt-marker`** (셀프 체크리스트 `[x?]` 회의 마커) | 1 (#154) | ⭐⭐ 신규 |
941
+ | **`state-pattern-external-mutation-risk`** (`player.state = Bust()/Hit()/Ready()` 외부 변경 위험) | 1 (#154) | ⭐⭐⭐ 신규 |
942
+ | **`state-pattern-no-if-type-check`** (상태 패턴 + if `is` 타입 검사 = 다형성 무효화) | 1 (#154) | ⭐⭐⭐ 신규 (PR #73 결 누적 2 PR) |
943
+ | **`getter-setter-naming-as-missed-object`** (`getXXX`/`setXXX` 어색 = 분리해야 할 객체 신호 — 학생 자가 자각) | 1 (#154) | ⭐⭐⭐ 신규 정점 |
944
+ | **`controller-imagination-test`** (*"컨트롤러 없이 게임 진행 가능?"* 상상 테스트) | 1 (#154) | ⭐⭐⭐ 신규 |
945
+ | **`student-state-pattern-honest-doubt`** (상태 패턴 이해 어려움 솔직 인정) | 1 (#154) | ⭐⭐⭐ 신규 (누적 3 PR 학생 솔직 인정) |
946
+ | **`subclass-tests-by-file`** (추상 함수 구현체 파일별 테스트) | 1 (#154) | ⭐⭐ 신규 |
947
+ | **`reviewer-kotlin-tip-vocabulary`** (*"코틀린 Tip:"* 메타 어휘) | 1 (#154) | ⭐⭐ 신규 |
948
+ | **`minimum-required-data-passing`** (함수 인자 = 객체 vs 상태 최소 데이터) | 1 (#154) | ⭐⭐ 신규 |
949
+ | **`tell-dont-ask-message-vocabulary`** (Tell-Don't-Ask 메시지 어휘 *"내 X 넘겨줄테니 Y 알려줘"*) | 1 (#38) | ⭐⭐⭐ 신규 정점 |
950
+ | **`predictable-vs-unpredictable-error-distinction`** (`toIntOrNull` = 예측 가능 / `0/0` = 예측 불가) | 1 (#38) | ⭐⭐⭐ 신규 |
951
+ | **`recursive-input-validation-bug`** (입력 검증 재귀 호출 시 영원 종료 안 됨) | 1 (#38) | ⭐⭐⭐ 신규 |
952
+ | **`mutable-member-var-state-dependent-result`** (멤버 변수 상태 의존 = 호출 순서 강요) | 1 (#38) | ⭐⭐⭐ 신규 |
953
+ | **`function-call-order-dependency-violation`** (호출 순서 강요 = 잘못된 설계) | 1 (#38) | ⭐⭐⭐ 신규 |
954
+ | **`primitive-fn-conversion-as-temporary-fix`** (멤버 변수 → 함수 = 임시 방편 vs 본질) | 1 (#38) | ⭐⭐⭐ 신규 |
955
+ | **`dot-2-or-fewer-rule`** (디미터 점(.) 2개 이하 + `a.b` = `a.getB()` 동일성) | 1 (#38) | ⭐⭐⭐ 신규 |
956
+ | **`lateinit-initialization-checking-burden`** (`lateinit` 초기화 미인지 위험) | 2 (#38·#115) | ⭐⭐⭐ 신규 (누적 2 PR) |
957
+ | **`pair-vs-data-class-naming-clarity`** (Pair = first/second 의미 모호) | 1 (#38) | ⭐⭐ 신규 |
958
+ | **`exception-handling-location-no-right-answer`** (예외 처리 위치 정답 없음 — 단일 답 거부) | 1 (#38) | ⭐⭐⭐ MCP 핵심 가치 |
959
+ | **`view-as-domain-validator-pattern`** (뷰에서 검증 완료한 도메인 객체 리턴) | 1 (#38) | ⭐⭐ 신규 |
960
+ | **`method-reference-as-functional-vocabulary`** (메서드 참조 = 데이터 훼손 X + 함수형 매커니즘) | 1 (#47) | ⭐⭐⭐ 신규 정점 |
961
+ | **`coverage-100-vs-test-meaning`** (커버리지 100 강박 vs 의미 — 학생 자가 자각) | 1 (#47) | ⭐⭐⭐ 신규 정점 |
962
+ | **`always-passing-test-anti-pattern`** (*"반드시 성공하는 테스트 = 의미 없음 + 차라리 안 쓰는 게 낫다"*) | 1 (#47) | ⭐⭐⭐ 신규 |
963
+ | **`test-with-logic-anti-pattern`** (테스트 코드에 로직 포함 X) | 1 (#47) | ⭐⭐ 신규 |
964
+ | **`controller-as-bridge-metaphor`** (컨트롤러 = view↔domain 브릿지 메타포 — 학생 자가) | 1 (#47) | ⭐⭐ 신규 |
965
+ | **`test-name-positive-vs-negative-vocabulary`** (부정형 → 긍정형 변환) | 1 (#47) | ⭐⭐ 신규 |
966
+ | **`kotlin-named-parameter-readability`** (≥3 파라미터 = argument name) | 2 (#144·#47) | ⭐⭐⭐ (누적 2 PR) |
967
+ | **`lambda-it-vs-named-param`** (`it` vs 명시적 변수 = 역할 정의) | 1 (#47) | ⭐⭐ 신규 |
968
+ | **`underscore-prefix-backing-property-only`** (`_` = backing property 전용) | 2 (#12·#47) | ⭐⭐⭐ (누적 2 PR + Kotlin 공식 컨벤션 ref) |
969
+ | **`init-name-implies-no-return`** (`init` = 초기화 어휘, 리턴 X 예상) | 1 (#12) | ⭐ 신규 |
970
+ | **`validate-fn-name-implies-boolean`** (`isXX`/`checkXX` 함수명 = Boolean 기대) | 1 (#12) | ⭐⭐ 신규 |
971
+ | **`package-by-type-anti-pattern`** (enum/data class 타입 종류 패키지 분리 X) | 1 (#115) | ⭐⭐ 신규 |
972
+ | **`builder-required-property-as-constructor`** (Builder = 선택적 / 필수 = 생성자) | 1 (#115) | ⭐⭐ 신규 |
973
+ | **`mutable-collection-direct-access-scenario`** (외부 mutable 직접 접근 시나리오) | 1 (#115) | ⭐⭐ 신규 |
974
+ | **`test-narrative-incremental-build`** (점진적 테스트 묘사 = 기본 → 조건 → 경계) | 1 (#115) | ⭐⭐ 신규 |
975
+ | **`rule-uniqueness-assumption-question`** (*"왜 규칙이 유일하다고 보시는지"*) | 1 (#115) | ⭐⭐ 신규 |
976
+ | **`state-as-domain-calculator`** (상태 객체 = 수익금 계산 책임) | 1 (#154) | ⭐⭐ 신규 |
977
+ | **`student-self-correction-request-vocabulary`** (학생 자가 *"맞는지/놓친 부분 궁금"*) | 1 (#47) | ⭐⭐ 신규 |
978
+ | **`class-constructor-same-line-convention`** (생성자 줄바꿈 = private 함수 오해) | 1 (#47) | ⭐ 신규 |
979
+ | **`function-order-by-call-flow`** (함수 호출 순서 = 위→아래 정렬) | 1 (#154) | ⭐ 신규 |
980
+ | **`construction-time-vs-mutation-time-invariant`** (생성 시 받기 = 전체 불변성) | 1 (#154) | ⭐⭐ 신규 |
981
+ | **`factory-with-test-only-variant`** (팩토리 + 테스트용 별도 팩토리) | 1 (#154) | ⭐⭐ 신규 |
982
+ | **`pr-self-checklist-vocabulary`** + **`pr-focused-review-request`** (셀프 체크 + 집중 리뷰 요청) | 1 (#115) | ⭐⭐ (PR #144 결 누적) |
983
+ | **`pr-body-prior-mission-feedback-recall`** (로또 미션 피드백 자가 회상) | 1 (#154) | ⭐⭐ 신규 |
984
+ | **`reviewer-hint-vocabulary`** (*"힌트는 X"* — reviewer 답변 유도) | 1 (#115) | ⭐ 신규 |
985
+
986
+ ### batch 25 메타 어휘 (MCP `oh-my-oop` 핵심 가치 정점)
987
+
988
+ - **`pr-body-self-learning-book-citation`** (tobae-time #154) — *"객체지향의 역할, 책임, 협력에 대한 이해도가 낮아서 **객체지향의 사실과 오해라는 도서를 읽고 코드를 다시 작성**해보았으나 아직도 잘 모르겠습니다."* **MCP `oh-my-oop` 도구 영감 도서 학생 자가 인용 — 도구 가치 검증 정점**.
989
+ - **`exception-handling-location-no-right-answer`** (BeokBeok #38) — *"예외처리를 어디에서 하는지에 대한 여부는 개발자마다 의견이 다르기에 정답이 없습니다. 말씀하신대로 뷰에서 도메인 객체를 리턴하는 방식도 문제가 없습니다."* — *MCP 단일 답 거부 + 학생 대안 존중* 어휘.
990
+ - **`tell-dont-ask-message-vocabulary`** (BeokBeok #38) — *"내 카드들의 정보를 넘겨줄테니 블랙잭인지 아닌지 알려줘"* — Tell-Don't-Ask 메시지 어휘 정점.
991
+ - **`getter-setter-naming-as-missed-object`** (tobae-time #154) — *"적절한 네이밍을 생각하지 못해서 두었습니다. **알아차리지 못한 객체로 분리하라는 신호였던 것 같습니다.**"* — 학생 측 *어색함 → 객체 분리 신호* 자각 어휘.
992
+ - **`coverage-100-vs-test-meaning`** (sujin9 #47) — *"테스트 커버리지를 100 만드는 것만 생각하기 보다는, 테스트의 의미에 더 집중해야겠어요"* — 학생 자가 강박 자각.
993
+ - **`always-passing-test-anti-pattern`** (BeokBeok #47) — *"반드시 성공하는 테스트를 작성하는 것은 의미가 없습니다. 저라면, 이런 경우라면 차라리 테스트 코드를 작성하지 않습니다."* — reviewer 단호 어휘.
994
+ - **`reviewer-difficulty-acknowledgment-vocabulary`** (laco-dev #154) — *"상태 패턴은 아직 개념이 잘 안잡히셨을 부분이라 너무 어렵다면 모두 수정하지 않아도 됩니다. 나중에라도 내 코드를 돌아봤을 때 이해가 되기만 하면 충분합니다."* — PR #115 *"쎄게 양해"* → PR #154 *어려움 인정 + 후일 격려* 진화.
995
+ - **`controller-imagination-test`** (laco-dev #154) — *"컨트롤러가 없더라도 블랙잭 게임을 진행할 수 있을까??"* — 상상 테스트 어휘 정점.
996
+ - **`current-realm-vs-OOP-realm-metaphor-clash`** (laco-dev #115) — *"현실세계라면 블랙잭 게임에서의 규칙이지만, 객체지향 세계에서 객체는 모두 스스로 일을 합니다."* — 현실 vs OOP 메타포 충돌 어휘.
997
+
998
+ ### batch 25 누적 정점 안티패턴 (⭐⭐⭐ 강한 신규 후보)
999
+
1000
+ batch 7-25 합계 MCP 룰 후보가 **400종+**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 25 강화):
1001
+ - `tell-dont-ask-message-vocabulary` (Tell-Don't-Ask 메시지 어휘 *"내 X 넘겨줄테니 Y 알려줘"*) — MCP 핵심 가치 정점
1002
+ - `state-pattern-external-mutation-risk` + `state-pattern-no-if-type-check` (상태 패턴 외부 변경 위험 + if 타입 검사 회피)
1003
+ - `getter-setter-naming-as-missed-object` (어색 명명 → 객체 분리 신호 학생 자가 자각)
1004
+ - `coverage-100-vs-test-meaning` + `always-passing-test-anti-pattern` (커버리지 100 강박 vs 테스트 의미)
1005
+ - `controller-imagination-test` (컨트롤러 없이 진행 가능 상상 테스트)
1006
+ - `pr-body-self-learning-book-citation` (조영호 도서 학생 자가 인용 — MCP 도구 가치 검증)
1007
+ - `rule-as-god-object-anti-pattern` (Rule god-object 학생 자가 시도 → 4 thread 반복 비판)
1008
+ - `reviewer-strong-feedback-apology-meta` + `reviewer-difficulty-acknowledgment-vocabulary` (양 PR 어휘 진화)
1009
+ - `method-reference-as-functional-vocabulary` (메서드 참조 = 함수형 매커니즘)
1010
+ - `predictable-vs-unpredictable-error-distinction` + `recursive-input-validation-bug` (예측 가능/불가 오류 + 재귀 입력 검증)
1011
+ - `dot-2-or-fewer-rule` (디미터 점(.) 2개 이하 + `a.b` = `a.getB()` 동일성)
1012
+ - `mutable-member-var-state-dependent-result` + `function-call-order-dependency-violation` + `primitive-fn-conversion-as-temporary-fix` (멤버 변수 상태 의존 + 임시 방편 vs 본질)
1013
+ - `lateinit-initialization-checking-burden` (`lateinit` 초기화 미인지 위험, 누적 2 PR)
1014
+ - `underscore-prefix-backing-property-only` + `kotlin-named-parameter-readability` (누적 2 PR + Kotlin 컨벤션)
1015
+
1016
+ ### 최종 정리 진입 시점 — batch 25 완료
1017
+
1018
+ | 지표 | batch 24 | batch 25 (현재) |
1019
+ |---|---|---|
1020
+ | 양 단계 완성 | 48명 | **51명** (+3) |
1021
+ | reviewee 디렉토리 | 68 | **70** (+2) |
1022
+ | 누적 PR | 116 | **121** (+5) |
1023
+ | 메타 학습 케이스 | 6 | **8** (+2: EmilyCh0 단방향→양방향 / tobae-time Rule→상태 + 도서 + 어휘 진화 3중) |
1024
+ | 누적 MCP 룰 후보 | 350+ | **400+** |
1025
+ | 2025 코호트 PR | 12 | **14** (+2: tobae-time #115·#154) |
1026
+ | 누적 reviewer | 14 | 14 (BeokBeok·laco-dev 재등장) |
1027
+
1028
+ ### §22 신규 안티패턴 (batch 22, 5 PR)
1029
+
1030
+ batch 22 (#140, #141, #96, #121, #19) 에서 신규/강화 안티패턴:
1031
+
1032
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
1033
+ |---|---|---|
1034
+ | **고차함수 = 도메인↔View 의존 X** | 2+ (#140·#109) | ⭐⭐ — `higher-order-function-as-domain-view-decoupling` 신규 |
1035
+ | **sealed class 라이브러리 배포 시 확장 제약** | 1 (#140) | ⭐⭐ — `sealed-class-library-extension-constraint` 신규 |
1036
+ | **parameter vs self state access** | 1 (#140) | ⭐⭐ — `parameter-vs-self-state-access` 신규 |
1037
+ | **test = 역할 중심 (not flow)** | 1 (#140) | ⭐⭐ — `test-by-role-not-by-flow` 신규 |
1038
+ | **super 키워드** | 3+ (#138·#142·#140) | ⭐⭐ — `super-keyword-for-shared-logic` 강화 |
1039
+ | **tailrec 자가 학습** | 4+ (#138·#142·#140·#141) | ⭐⭐ — 강화 |
1040
+ | **테스트 카드 스텁 재사용** | 1 (#141) | ⭐ — `test-fixture-stub-reuse` 신규 |
1041
+ | **응집 vs 분리 트레이드오프** | 1 (#141) | ⭐⭐ — `cohesion-vs-separation-tradeoff` 신규 |
1042
+ | **표면 리팩토링 vs 본질 변경** | 1 (#141) | ⭐⭐ — `superficial-refactoring-vs-essential-change` 신규 |
1043
+ | **MVC 패턴 매몰 X 학생 자가 학습** | 2+ (#118·#141) | ⭐⭐ — `pattern-vs-object-naming-priority` 강화 |
1044
+ | **학생 자가 의존성 그래프 시각화** | 1 (#96) | ⭐ — `student-self-dependency-graph-visualization` 신규 |
1045
+ | **유연성 vs 현재 룰 트레이드오프** | 1 (#96) | ⭐ — `flexibility-vs-current-rule-tradeoff` 신규 |
1046
+ | **입력 다양성 = 모든 경우 통제 X** | 1 (#96) | ⭐ — `input-diversity-uncontrollable` 신규 |
1047
+ | **팀의 코드 어휘** | 1 (#96) | ⭐⭐ — `team-code-vs-personal-code` 신규 |
1048
+ | **외부 책 인용 (엘레강트 오브젝트)** | 4+ (#96·#136·#118·#108) | ⭐ — `external-book-reference` 신규 |
1049
+ | **추상 상수 vs 도메인 어휘** | 1 (#96) | ⭐⭐ — `abstract-constant-hides-domain-meaning` 신규 |
1050
+ | **함수 인자 옵션 다양성 의식** | 1 (#96) | ⭐ — `parameter-options-exploration` 신규 |
1051
+ | **IDE 단축키 = 개발 생산성** | 1 (#96) | ⭐ — `ide-shortcut-as-productivity` 신규 |
1052
+ | **JUnit CsvSource** | 1 (#96) | ⭐ — `parameterized-test-via-csvsource` 신규 |
1053
+ | **reviewer scenario code example** | 2+ (#118·#96) | ⭐⭐ — `reviewer-scenario-code-example` 강화 |
1054
+ | **reviewer 다년 활동** | 2+ (말리빈·두루) | ⭐⭐⭐ — `multi-year-reviewer-activity` 강화 |
1055
+ | **집단 지성 어휘** | 1 (#121) | ⭐ — `collective-intelligence-as-resource` 신규 |
1056
+ | **평행 분리 객체 (Ace/Character/Number) 통합** | 1 (#121) | ⭐ — `over-separation-into-parallel-classes` 신규 |
1057
+ | **하드코딩 vs 동적 생성** | 1 (#121) | ⭐ — `hardcoded-vs-dynamic-generation` 신규 |
1058
+ | **toString vs 매퍼 vs 함수 변환 3 안** | 1 (#121) | ⭐ — `to-string-vs-mapper-vs-function-conversion` 신규 |
1059
+ | **main 에 모든 코드 = god function** | 1 (#121) | ⭐ — `main-as-god-function` 신규 |
1060
+ | **enum vs sealed class 구분 기준** | 1 (#19) | ⭐⭐ — `enum-vs-sealed-class-criteria` 신규 |
1061
+ | **sealed interface vs sealed class** | 1 (#19) | ⭐ — `sealed-interface-vs-sealed-class` 신규 |
1062
+ | **확장 함수 vs object 전략 패턴 트레이드오프** | 1 (#19) | ⭐ — `extension-function-vs-object-strategy` 신규 |
1063
+ | **도메인이 controller interface 구현 = MVC 위반** | 1 (#19) | ⭐⭐ — `domain-knows-controller-via-interface` 신규 |
1064
+
1065
+ ### batch 22 신규 reviewer
1066
+
1067
+ - **@Gyuil-Hwnag (두루) — PR #121 = 2024→2025 다년 활동** (말리빈에 이어 *두번째 reviewer 다년 활동 메타 케이스*). 누적 reviewer = 14명 유지 (두루 = 기존 2024 reviewer).
1068
+ - **@vagabond95 (PR #19 reviewer = racingcar 인용 reviewer)** — 기존 2023 reviewer (PR #75 등).
1069
+
1070
+ ### batch 22 학생/reviewer 메타 케이스
1071
+
1072
+ - **reviewer 다년 활동 2번째** (두루) — *MCP 룰 `multi-year-reviewer-activity` 강화* 누적 2+ reviewer.
1073
+ - **doabletuple 양 단계 완성 + 학생 자가 코드 예시 + 다형성 학습**.
1074
+ - **medAndro 양 단계 완성 + 학생 자가 `-0.0` Float IEEE 754 학습 + 다른 reviewer 어휘 cross-reference**.
1075
+ - **Hogu59 1년 늦은 2단계 + 학생 자가 *모든 경우 통제 못함* 메타 학습 + *팀의 코드* 어휘 학습**.
1076
+ - **devfeijoa 학생 자가 기초지식 부족 + TDD + 페어 학습**.
1077
+ - **briandr97 PR 본문 자가 interface vs abstract 의문 + Kotlin 어휘 깊은 자가 학습 (sealed interface + enum vs sealed)**.
1078
+
1079
+ ### 누적 MCP 룰 후보 300+종 (batch 7-22)
1080
+
1081
+ batch 7-22 합계 MCP 룰 후보가 **300종**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 22 강화):
1082
+
1083
+ - **`metaphor-fidelity-locator`** (12+ PR) — *현실 메타포 정합*.
1084
+ - **`model-view-dependency-direction`** (13+ PR) — *MVC 절대 원칙*.
1085
+ - **`virtual-object-vs-real-domain`** (8+ PR) — *가상 객체 회피*.
1086
+ - **`singleton-deck-via-companion`** (20+ PR) — *Singleton 안티패턴*.
1087
+ - **`blackjack-rule-fidelity-comparison`** (17+ PR) — *블랙잭 룰 정확성*.
1088
+ - **`multi-year-reviewer-activity`** (2+ reviewer) — *말리빈/두루 다년 활동*.
1089
+ - **`function-name-vs-return-semantic-mismatch`** (10+ PR).
1090
+ - **`pattern-applied-without-need`** (8+ PR).
1091
+ - **`lateinit-var-call-order-invariant`** (12+ PR).
1092
+ - **`team-code-vs-personal-code`** (1 PR) — *팀의 코드 어휘* (신규 ⭐⭐).
1093
+ - **`mathematical-naturalness-as-model-criterion`** (1 PR) — *수학식 자연스러움*.
1094
+
1095
+ ### 최종 정리 진입 시점 — batch 22 완료
1096
+
1097
+ | 지표 | batch 21 | batch 22 (현재) |
1098
+ |---|---|---|
1099
+ | 총 PR | 101 | **106** |
1100
+ | reviewer | 14 | **14** (두루 다년 활동) |
1101
+ | 양 단계 완성 reviewees | 40 | **42** |
1102
+ | 2단계만 분석 | 0 | **1 (Hogu59)** |
1103
+ | 1단계만 reviewees | 21 | **21** |
1104
+ | 2025 코호트 | 10 PR | **11 PR** (+ devfeijoa) |
1105
+ | 2023 코호트 | 11+ | **12+** (+briandr97 = 최종 1단계 ≥10 미분석 완료) |
1106
+ | 메타 케이스 | 3 | **4** (+두루 다년 활동) |
1107
+ | MCP 룰 후보 | 250+ | **300+** |
1108
+
1109
+ → **2023 코호트 ≥10 thread 1단계 분석 완료** + **2025 코호트 11 PR** + **메타 케이스 4건** + **300+ MCP 룰 후보**. *남은 작업: 5~9 그룹 짧은 분석 또는 최종 정리 진입*.
1110
+
1111
+ ### §21 신규 안티패턴 (batch 21, 5 PR)
1112
+
1113
+ batch 21 (#142, #143, #109, #113, #118) 에서 신규/강화 안티패턴:
1114
+
1115
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
1116
+ |---|---|---|
1117
+ | **reviewer 자가 의도 명료화 + 자가 사과** | 4+ (#142·#126·#130·#109) | ⭐⭐ — `reviewer-self-clarification-explicit` 강화 |
1118
+ | **학습 목표 회수 어휘** | 3+ (#142·#129·#118) | ⭐⭐ — `abstraction-purpose-revisit` 강화 |
1119
+ | **학생 자가 코드 예시 + 자가 의문** | 2+ (#142·#113) | ⭐⭐ — `student-self-code-example-as-question` 강화 |
1120
+ | **`tailrec` 자가 학습 + 바이트코드 확인** | 2+ (#138·#142) | ⭐⭐ — `tailrec-optimization-applicability` 강화 |
1121
+ | **`-0.0` Float IEEE 754 자가 학습** | 2+ (#131·#143) | ⭐ — `negative-zero-floating-point-trap` 강화 |
1122
+ | **다른 reviewer 어휘 cross-reference (학생)** | 1 (#143) | ⭐ — `peer-reviewer-cross-reference` 신규 |
1123
+ | **Kotlin 어휘 자가 N 분류 (property vs function)** | 1 (#143) | ⭐ — `property-vs-function-criteria` 신규 |
1124
+ | **결과 vs 수익률 enum 분리** | 1 (#143) | ⭐ — `result-vs-rate-enum-separation` 신규 |
1125
+ | **DI vs 내부 생성** | 2+ (#143·#109) | ⭐⭐ — `dependency-injection-vs-internal-creation` 강화 |
1126
+ | **Dummy zero for domain absent (Dealer BetAmount 0 vs X)** | 2+ (#87·#143) | ⭐ — `dummy-zero-for-domain-absent` 강화 |
1127
+ | **symmetric compare bidirectional call** | 3+ (#142·#143·#113) | ⭐⭐ — `symmetric-compare-bidirectional-call` 강화 |
1128
+ | **enum static vs instance method locator** | 1 (#143) | ⭐ — `enum-static-vs-instance-method-locator` 신규 |
1129
+ | **external-collection-as-method-arg-vs-member** | 1 (#143) | ⭐ — `external-collection-as-method-arg-vs-member` 신규 |
1130
+ | **테스트 회귀 (Deck object 제거 부작용)** | 1 (#143) | ⭐ — `test-regression-from-deck-refactor` 신규 |
1131
+ | **view-format-as-domain-invariant-tradeoff** | 1 (#143) | ⭐ — `view-format-as-domain-invariant-tradeoff` 신규 |
1132
+ | **english 어순 어색 (`cardAdd`)** | 2+ (#143·#87) | ⭐ — `english-word-order-naming` 강화 |
1133
+ | **computed property 재계산 비용** | 1 (#143) | ⭐ — `computed-property-vs-val-recompute-cost` 신규 |
1134
+ | **학생 자가 추상화 활용 부족 자가 인지** | 1 (#143) | ⭐ — `student-self-abstraction-underuse` 신규 |
1135
+ | **parameter-explosion-vs-object-passing** | 1 (#143) | ⭐ — 신규 |
1136
+ | **State 가 값 vs 객체 받기 (관심사)** | 1 (#109) | ⭐ — `state-receives-value-vs-object` 신규 |
1137
+ | **reviewer 자가 position revision** | 1 (#109) | ⭐⭐ — `reviewer-self-position-revision` 신규 |
1138
+ | **테스트 = 도메인 설계 개선 어휘** | 4+ (#87·#129·#142·#109) | ⭐⭐ — `test-driven-domain-improvement` 강화 |
1139
+ | **factory function vs constructor redundancy** | 1 (#109) | ⭐ — 신규 |
1140
+ | **constant aggregation vs domain distribution** | 1 (#109) | ⭐ — 신규 |
1141
+ | **assert-all vs multiple assertions** | 1 (#109) | ⭐ — 신규 |
1142
+ | **BDD given/when/then fidelity** | 1 (#109) | ⭐ — 신규 |
1143
+ | **init block side effect** | 1 (#109) | ⭐ — 신규 |
1144
+ | **external flow control vs internal** | 1 (#109) | ⭐ — 신규 |
1145
+ | **boolean variable naming** | 1 (#109) | ⭐ — 신규 |
1146
+ | **secondary constructor vs default value** | 1 (#109) | ⭐ — 신규 |
1147
+ | **enum vs Boolean (context-dependent)** | 1 (#113) | ⭐⭐ — `enum-vs-boolean-context-dependent` 신규 |
1148
+ | **Controller = 카지노 메타포 vs 참가자 자가** | 1 (#113) | ⭐ — `controller-as-game-mediator-vs-domain-game-object` 신규 |
1149
+ | **reviewer 자가 suggestion revision** | 1 (#113) | ⭐⭐ — `reviewer-self-suggestion-revision` 신규 |
1150
+ | **extension function locator** | 1 (#113) | ⭐ — 신규 |
1151
+ | **수학적 자연스러움 = 모델 기준** | 1 (#118) | ⭐⭐⭐ — `mathematical-naturalness-as-model-criterion` 신규 |
1152
+ | **Flyweight 패턴 자가 학습** | 1 (#118) | ⭐ — `flyweight-pattern-card-caching` 신규 |
1153
+ | **reviewer scenario code example** | 1 (#118) | ⭐⭐ — `reviewer-scenario-code-example` 신규 |
1154
+ | **MVC 패턴 매몰 vs 객체 이름 집중** | 1 (#118) | ⭐⭐ — `pattern-vs-object-naming-priority` 신규 |
1155
+ | **Kotlin 버전 업데이트 학습 권유** | 1 (#118) | ⭐ — `kotlin-version-feature-learning` 신규 |
1156
+ | **카지노 메타포 (graceful shutdown)** | 1 (#118) | ⭐ — `card-shortage-handling-strategy` 신규 |
1157
+ | **현실 메타포 vs SRP 트레이드오프** | 1 (#118) | ⭐⭐ — `metaphor-fidelity-vs-srp-tradeoff` 신규 |
1158
+ | **reviewer 다년 활동 (말리빈 2024→2025)** | 1 (#118) | ⭐⭐ — `multi-year-reviewer-activity` 신규 |
1159
+ | **Ace 처리 3 방식 (while vs math vs recursion)** | 1+ (#118) | ⭐ — `ace-bonus-while-vs-math-vs-recursion` 신규 |
1160
+ | **「객체지향의 사실과 오해」 학생 자가 인용** | 1 (#118) | ⭐⭐⭐ — *MCP `oh-my-oop` 핵심 가치 정점 학생 자가 인용* |
1161
+ | **현실 메타포** | 12+ | ⭐⭐⭐ — `metaphor-fidelity-locator` 강화 |
1162
+ | **virtual-object-vs-real-domain (CardDistributor)** | 8+ | ⭐⭐⭐ — 강화 |
1163
+ | **블랙잭 룰 정확성 (`<` vs `<=`)** | 17+ | ⭐⭐⭐ — 강화 |
1164
+ | **Singleton Deck (companion)** | 20+ | ⭐⭐⭐ — 강화 |
1165
+ | **model-view-dependency-direction** | 12+ | ⭐⭐⭐ — 강화 |
1166
+
1167
+ ### batch 21 신규 reviewer
1168
+
1169
+ - **@malibinYun (말리빈) — PR #118 — *2024 reviewer 다년 활동* (학생 → reviewer 진화의 반대 시점)** — *MCP 룰 `multi-year-reviewer-activity` 신규 메타 케이스*. 누적 reviewer = 14 명 유지 (말리빈 = 기존 2024 reviewer).
1170
+
1171
+ ### batch 21 학생/reviewer 메타 케이스
1172
+
1173
+ - **2025 코호트 10 PR 코퍼스 정점** (2023·2024·2025 3 시기 합류). *모바일 안드로이드 7기 8 reviewees*.
1174
+ - **reviewer 다년 활동** (말리빈 2024 → 2025) = *학생 → reviewer 진화 메타 케이스 (krrong/hyemdooly) 의 반대 시점*.
1175
+ - **doabletuple 양 단계 완성 (#126 + #142)** — *학생/reviewer 양방향 자가 사과 (Thread 1) + 다형성 학습 (Thread 10 학생 자가 코드 예시) + tailrec 바이트코드 확인*.
1176
+ - **medAndro 양 단계 완성 (#130 + #143)** — *학생 자가 *원래 그리던 꿈을 펼쳐볼까* (다른 reviewer cross-reference) + Kotlin 어휘 자가 4 분류 + `-0.0` Float IEEE 754 자가 학습*.
1177
+ - **학생 「객체지향의 사실과 오해」 자가 인용 (PR #118 gahyunkim)** — **MCP `oh-my-oop` 핵심 가치 정점 학생 자가 인용**.
1178
+ - **reviewer 자가 의도 명료화 + 자가 사과** 4 사례 누적 (PR #126·#130·#142·#109).
1179
+
1180
+ ### 누적 MCP 룰 후보 250+종 (batch 7-21)
1181
+
1182
+ batch 7-21 합계 MCP 룰 후보가 **250종**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 21 강화):
1183
+
1184
+ - **`metaphor-fidelity-locator`** (12+ PR) — *현실 메타포 정합*. 핵심 어휘.
1185
+ - **`model-view-dependency-direction`** (12+ PR) — *MVC 절대 원칙*.
1186
+ - **`virtual-object-vs-real-domain`** (8+ PR) — *Picker/Manager/CardDistributor 가상 객체*.
1187
+ - **`singleton-deck-via-companion`** (20+ PR) — *Singleton 안티패턴 정점*.
1188
+ - **`blackjack-rule-fidelity-comparison`** (17+ PR) — *블랙잭 룰 정확성*.
1189
+ - **`student-to-reviewer-evolution-meta`** (2 사례) — *krrong + hyemdooly 진화*.
1190
+ - **`multi-year-reviewer-activity`** (1 사례) — *말리빈 다년 활동* (신규).
1191
+ - **`mathematical-naturalness-as-model-criterion`** (1 PR) — *수학식 단순성 = 모델 자연스러움* (신규 ⭐⭐⭐).
1192
+ - **`pr-body-question-explicit-reviewer-quote`** (3+ PR).
1193
+ - **`pattern-applied-without-need`** (7+ PR) — *Service/Manager/Builder 패턴 매몰*.
1194
+ - **`enum-with-ui-value`** (17+ PR).
1195
+
1196
+ ### 최종 정리 진입 시점 — batch 21 완료 후
1197
+
1198
+ | 지표 | batch 18 | batch 19 | batch 20 | batch 21 (현재) |
1199
+ |---|---|---|---|---|
1200
+ | 총 PR | 86 | 91 | 96 | **101** |
1201
+ | reviewer | 12 | 13 | 14 | **14** (말리빈 다년) |
1202
+ | 양 단계 완성 reviewees | 33 | 35 | 38 | **40** |
1203
+ | 1단계만 reviewees | 20 | 21 | 20 | **21** |
1204
+ | 코호트 시기 | 2023·2024 | +2025 (2 PR) | 2025 (5 PR) | **2025 (10 PR)** |
1205
+ | 메타 케이스 | 1 (krrong) | 1 | 2 (krrong+hyemdooly) | **3 (+말리빈 다년)** |
1206
+ | MCP 룰 후보 | 130+ | 160+ | 200+ | **250+** |
1207
+
1208
+ → **2025 코호트 10 PR 코퍼스 정점 + 메타 케이스 3건 + 250+ MCP 룰 후보**. *사용자 피드백 (corpus-saturation-judgement): 적절한 데이터 1개라도 의미 있음 → 계속 진행*.
1209
+
1210
+ ### §20 신규 안티패턴 (batch 20, 5 PR)
1211
+
1212
+ batch 20 (#138, #139, #35, #126, #130) 에서 신규/강화 안티패턴:
1213
+
1214
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
1215
+ |---|---|---|
1216
+ | **PR 본문 자가 의문 + reviewer 라인 인용 + 답변** | 3+ (#35·#126·#138) | ⭐⭐⭐ — `pr-body-question-explicit-reviewer-quote` 강화 |
1217
+ | **학생 → reviewer 진화 메타 케이스 2번째 (hyemdooly 2년)** | 2+ (krrong + hyemdooly) | ⭐⭐⭐ — `student-to-reviewer-evolution-meta` 강화 |
1218
+ | **2025 코호트 5 PR 코퍼스 형성 (셀프 체크리스트 + 모든 스레드 commit SHA + 학생 자가 의문 풍부)** | 5 (#117·#129·#138·#126·#130) | ⭐⭐⭐ — 코호트 형성 |
1219
+ | **reviewer 자가 한계 강한 어휘 인정 + 사과** | 1 (#130) | ⭐⭐ — `reviewer-self-limitation-explicit-apology` 신규 |
1220
+ | **value class + @JvmInline = Kotlin 어휘 자가 학습** | 1 (#138) | ⭐⭐ — `value-class-application-and-rationale` 신규 |
1221
+ | **require 예외 vs runCatching 재입력 (graceful retry)** | 2+ (#129·#138) | ⭐⭐ — `require-exception-vs-graceful-retry` 신규 |
1222
+ | **super 키워드 = 공통 로직 + 자식 확장 (4 스레드 학습)** | 1 (#138) | ⭐⭐ — `super-keyword-for-shared-logic` 신규 |
1223
+ | **재귀 함수 + tailrec = 명령형 → 함수형** | 2+ (#138·#117) | ⭐⭐ — `recursive-vs-while-functional` 신규 |
1224
+ | **객체 소유 vs 매개변수 전달 구분** | 1 (#138) | ⭐⭐ — `object-ownership-vs-parameter-passing` 신규 |
1225
+ | **형식 규칙 부산물 인공 객체 자가 비판 (BlackJackTable 자가 제거)** | 1 (#138) | ⭐⭐ — `form-rule-artificial-grouping-self-critique` 신규 |
1226
+ | **인스턴스 변수 제약 부산물 묶음** | 7+ (#133·#88·#132·#136·#93·#87·#138) | ⭐⭐ — `instance-variable-limit-artificial-grouping` 강화 |
1227
+ | **lazy init companion vs instance pool** | 1 (#138) | ⭐ — `lazy-init-companion-vs-instance-pool` 신규 |
1228
+ | **현실 메타포 (외부 장치 X = 참가자 자가 판단)** | 10+ | ⭐⭐⭐ — `metaphor-fidelity-locator` 강화 |
1229
+ | **시그니처 차이 = 추상화 불가 + 학생/reviewer 자가 한계 인정** | 1 (#126) | ⭐⭐ — `abstract-method-blocked-by-signature-divergence` 신규 |
1230
+ | **변수명 = 타입 이름 회피 + 도메인 어휘 (학생 자가 4 안 분석)** | 2+ (#117·#126) | ⭐ — `variable-name-by-type-vs-meaning` 신규 |
1231
+ | **비즈니스 로직 vs Controller 로직 구분 (카드 N장 공개)** | 3+ (#129·#138·#126) | ⭐⭐ — `business-logic-vs-controller-logic` 강화 |
1232
+ | **변경 가능성 = View 책임 지표** | 1 (#126) | ⭐⭐ — `change-impact-as-locus-criteria` 신규 |
1233
+ | **InputView 입력 안내 출력 = OK (분리 엄격성 트레이드오프)** | 1 (#126) | ⭐ — `input-view-output-strict-separation` 신규 |
1234
+ | **객체 위치 = 변경 영향 범위 (Choice 도메인 vs View)** | 1 (#126) | ⭐ — `object-locus-by-change-impact` 신규 |
1235
+ | **상태 플래그 vs 도메인 상태 판단 (initialHandShown)** | 1 (#126) | ⭐ — `state-flag-vs-domain-state-judgement` 신규 |
1236
+ | **부생성자 (vararg cards) = 테스트 fixture 의도** | 2+ (#126·#130) | ⭐ — `test-fixture-secondary-constructor` 신규 |
1237
+ | **enum reverse() vs operator fun not()** | 2+ (#36·#126) | ⭐ — `enum-reverse-method-vs-operator-not` 신규 |
1238
+ | **Kotlin stdlib 확장 함수 활용 (filterIsInstance, getOrNull)** | 4+ (#117·#138·#126·#139) | ⭐⭐ — `kotlin-stdlib-extension-application` 신규 |
1239
+ | **컴파일 시 invariant 강제 (생성자 타입 분리)** | 5+ (#129·#79·#92·#48·#126) | ⭐⭐ — `compile-time-singleton-vs-runtime-filter` 강화 |
1240
+ | **결과 통계 위치 (Dealer vs Players vs 외부)** | 1 (#126) | ⭐ — `result-aggregation-locator` 신규 |
1241
+ | **블랙잭 룰 정확성 정점 (`<` vs `<=` 양가성)** | 15+ ⭐⭐⭐ | `blackjack-rule-fidelity-comparison` 강화 |
1242
+ | **Singleton Deck 안티패턴 4 가지 자가 인지** | 19+ (#130 누적 정점) | ⭐⭐⭐ — `singleton-deck-via-companion` 강화 |
1243
+ | **테스트 = 동작 명세 + 부작용 검증** | 1 (#130) | ⭐ — `test-side-effect-verification` 신규 |
1244
+ | **YAGNI 위반 자가 인지 vs 제거 비용 (Translator)** | 2+ (#146·#130) | ⭐ — `yagni-violation-removal-cost` 신규 |
1245
+ | **도메인 룰 상수 위치 = 도메인** | 1 (#130) | ⭐ — `domain-constant-locator` 신규 |
1246
+ | **enum.ordinal vs 커스텀 orderNumber** | 1 (#130) | ⭐ — `enum-ordinal-vs-custom-property` 신규 |
1247
+ | **Card 인덱스 기반 생성 vs 도메인 의미 누수** | 1 (#130) | ⭐ — `card-index-vs-card-identity` 신규 |
1248
+ | **Boolean 메서드 의미 반전 (isDrawFinish 16 이하 종료)** | 3+ (#117·#139·#130) | ⭐⭐ — `boolean-method-semantic-inversion` 신규 |
1249
+ | **클래스 명 vs 표준 라이브러리 충돌 (Number)** | 1 (#130) | ⭐ — `class-name-vs-stdlib-collision` 신규 |
1250
+ | **상태 계산 위치 (enum companion 정적 vs HandCards 자가)** | 1 (#130) | ⭐ — `state-calculation-locator` 신규 |
1251
+ | **DSL 활용 시점 (여러 번 + 테스트 fixture)** | 1 (#35) | ⭐ — `dsl-applicability-criteria` 신규 |
1252
+ | **Kotlin 예외 처리 4 원칙 + 외부글 (Elizarov)** | 3+ (#129·#138·#35) | ⭐⭐ — `kotlin-exception-handling-strategy` 신규 |
1253
+ | **Dealer 수익 = Players 합 부호 반전** | 6+ | ⭐⭐ — `dealer-profit-as-negated-player-sum` 강화 |
1254
+ | **Domain layer = 가장 테스트 쉬움 = 로직 우선 위치** | 3+ (#35·#87·#129) | ⭐⭐ — `domain-layer-testability-priority` 신규 |
1255
+ | **UI 재입력 + Domain 검증 = MVC 의존 방향 정공** | 2+ (#35·#129) | ⭐ — `retry-loop-locator-ui-vs-domain` 신규 |
1256
+ | **블랙잭 0.5 vs 1.5 모델 (순수익 vs 총 받음)** | 1 (#35) | ⭐ — `blackjack-payout-vs-profit-model` 신규 |
1257
+ | **PUSH vs DRAW 도메인 어휘** | 1 (#35) | ⭐ — `domain-vocabulary-fidelity` 신규 |
1258
+ | **HIT_STANDARD_POINT = 17 명명 정확성** | 1 (#35) | ⭐ — `dealer-stand-threshold-naming` 신규 |
1259
+ | **private constructor + companion object factory** | 1 (#35) | ⭐ — `private-constructor-with-static-factory` 신규 |
1260
+ | **set prefix vs create prefix** | 1 (#35) | ⭐ — `set-prefix-vs-create-prefix` 신규 |
1261
+ | **information-locator-as-responsibility** | 1 (#35) | ⭐ — `information-locator-as-responsibility` 신규 |
1262
+ | **indent 깊이 = 함수/지역 변수 분리** | 1 (#35) | ⭐ — `indent-depth-reduction` 신규 |
1263
+ | **boolean 메서드 N개 분리 = when 분기 중복** | 1 (#35) | ⭐ — `boolean-method-decomposition-redundancy` 신규 |
1264
+ | **이름 부연설명 회피 (current/total)** | 2+ (#117·#139) | ⭐ — `name-redundant-qualifier` 신규 |
1265
+ | **이전 단계 코드 잔재 정리 (abs 자가 정정)** | 1 (#139) | ⭐ — `dead-logic-from-previous-stage` 신규 |
1266
+ | **함수 합성 동치 = 추상화 의도 X** | 1 (#117) | ⭐ — `function-decomposition-creates-identity` 신규 |
1267
+ | **컬렉션 이름 vs 람다 인자 이름 일관성** | 1 (#139) | ⭐ — `collection-name-vs-lambda-element-naming` 신규 |
1268
+ | **학생 자가 한계 4 종 명시 (시간 부족 인정)** | 2+ (#130·#36·#129·#138) | ⭐⭐ — `student-self-limitations-explicit` 신규 |
1269
+ | **페어 학습 + 외부 PR 인용** | 1 (#130) | ⭐ — `peer-learning-cross-pr-reference` 신규 |
1270
+ | **이전 미션 리뷰 재발 (학습 시간성 한계)** | 1 (#130) | ⭐ — `repeated-feedback-across-missions` 신규 |
1271
+ | **production vs test 코드 분리** | 1 (#130) | ⭐ — `production-vs-test-code-separation` 신규 |
1272
+ | **abstract class + abstract 메서드 유무 = open class 동치** | 5+ | ⭐⭐ — `abstract-without-abstract-method` 강화 |
1273
+ | **PR 본문 자가 의문 답변 가능성 낮음 (PR #139)** | 1 (#139) | ⭐ — `pr-body-question-visibility-low` 신규 |
1274
+ | **반환 타입 도메인화 (List<X> → X일급컬렉션)** | 8+ | ⭐⭐ — `return-type-domain-object` 신규 |
1275
+ | **Float vs Double 도메인 정확성** | 1 (#139) | ⭐ — `float-vs-double-domain-precision` 신규 |
1276
+ | **학생 오해 + reviewer 재명시** | 2+ (#117·#139) | ⭐⭐ — `student-misunderstanding-reviewer-restatement` 신규 |
1277
+ | **2 reviewer 의 반대 시점 (ProfitCalculator)** | 2 (#129·#139) | ⭐⭐⭐ — `result-decider-external-object-vs-participant-method` 신규 |
1278
+ | **추상화 활용 점검 + 학습 의도 회수** | 2+ (#129·#139) | ⭐⭐ — `abstraction-purpose-revisit` 신규 |
1279
+ | **CQS 위반 재발 (drawCount)** | 2+ (#117·#139) | ⭐ — `command-query-separation` 강화 |
1280
+ | **부모 추상 메서드 반환 의미 역방향 재발** | 2+ (#117·#139) | ⭐ — `method-return-semantic-asymmetry-between-subclasses` 강화 |
1281
+ | **var betAmount + betting() 호출 강제 X** | 9+ | ⭐⭐ — `lateinit-var-call-order-invariant` 강화 |
1282
+ | **stateless 클래스 매 호출 시 신규 인스턴스** | 2+ (#117·#139) | ⭐ — `stateless-class-vs-companion-object` 강화 |
1283
+
1284
+ ### batch 20 신규 reviewer
1285
+
1286
+ - **@hyemdooly (둘리) — PR #130 — *14번째 reviewer + 학생 → reviewer 진화 (2년)*** — *krrong 결과 같은 메타 케이스 2번째*. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 정점**.
1287
+
1288
+ ### batch 20 학생/reviewer 메타 케이스
1289
+
1290
+ - **2025 코호트 5 PR 코퍼스 형성 (모바일 안드로이드 7기)** — *셀프 체크리스트 + 모든 스레드 commit SHA + 학생 자가 의문 풍부* 일관 패턴 (#117·#129·#138·#126·#130).
1291
+ - **hyemdooly 2년 학생 → reviewer 진화** — *2023 PR #21·#35 학생* → *2025 PR #130 reviewer*. *krrong 1년 진화 + hyemdooly 2년 진화 = 메타 케이스 2건*. **MCP `oh-my-oop` *학습 = 시간 두고 반복* 어휘 정점**.
1292
+ - **reviewer 자가 한계 강한 어휘 인정** — hyemdooly PR #130 *"정말정말 미안해요!!"* + KwonDae PR #126 *"저도 공통로직에만 집중하다보니 외부 입력을 받아야 한다는 것을 놓쳤네요 🫠"*.
1293
+ - **rosemin928 양 단계 완성 (#129 + #138)** — *PR 본문 자가 의문 2개 → 자가 책임 이동 + reviewer 권유 전 선제 적용* + *8 덱 도메인 룰 자가 학습*.
1294
+ - **parkjiminnnn 양 단계 완성 (#117 + #139)** — *진흙탕 코드 자가 인정 + 학생 자가 거절 + 대안 제시*.
1295
+ - **hyemdooly 양 단계 완성 (#21 + #35)** — *PR 본문 자가 의문 3개 + reviewer 라인 인용 답변 (PR #35) → 2년 후 reviewer 진화 (PR #130)*.
1296
+
1297
+ ### 누적 MCP 룰 후보 200+종 (batch 7-20)
1298
+
1299
+ batch 7-20 합계 MCP 룰 후보가 **200종**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 20 강화):
1300
+
1301
+ - **`metaphor-fidelity-locator`** (10+ PR) — *현실 메타포 정합*. 핵심 어휘.
1302
+ - **`model-view-dependency-direction`** (11+ PR) — *MVC 절대 원칙*.
1303
+ - **`blackjack-rule-fidelity-comparison`** (15+ PR) — *블랙잭 룰 정확성*.
1304
+ - **`singleton-deck-via-companion`** (19+ PR) — *Singleton 안티패턴*. 정점.
1305
+ - **`student-to-reviewer-evolution-meta`** (2 사례) — *학생 → reviewer 진화* (krrong + hyemdooly).
1306
+ - **`pr-body-question-explicit-reviewer-quote`** (3+ PR) — *PR 본문 자가 의문 + reviewer 라인 인용 답변*.
1307
+ - **`virtual-object-vs-real-domain`** (6+ PR) — *Picker/Manager 가상 객체 회피*.
1308
+ - **`test-as-design-spec`** (3+ PR) — *Wirfs-Brock RDD 정점*.
1309
+ - **`enum-with-ui-value`** (17+ PR) — *enum UI 어휘 누수*.
1310
+ - **`is-operator-polymorphism-avoidance`** (6+ PR) — *SOLID OCP*.
1311
+
1312
+ ### 최종 정리 진입 시점 — batch 20 완료 후 **여전히 추가 가치 있음**
1313
+
1314
+ | 지표 | batch 18 | batch 19 | batch 20 (현재) |
1315
+ |---|---|---|---|
1316
+ | 총 PR | 86 | 91 | **96** |
1317
+ | reviewer | 12 | 13 | **14** (hyemdooly 합류) |
1318
+ | 양 단계 완성 reviewees | 33 | 35 | **38** |
1319
+ | 1단계만 reviewees | 20 | 21 | **20** (hyemdooly/rosemin928/parkjiminnnn 양 단계 완성으로 이동) |
1320
+ | 코호트 시기 | 2023·2024 | 2023·2024·2025 (2 PR) | **2023·2024·2025 (5 PR)** |
1321
+ | 메타 케이스 | 1 (krrong 1년) | 1 (krrong 1년) | **2 (krrong + hyemdooly 2년)** |
1322
+ | MCP 룰 후보 | 130+ | 160+ | **200+** |
1323
+
1324
+ → **2025 코호트 5 PR 코퍼스 형성 + 학생 → reviewer 진화 메타 케이스 2건 + 200+ MCP 룰 후보**. *사용자 피드백: 적절한 데이터 1개라도 의미 있음 → 계속 진행 권장*.
1325
+
1326
+ ### §18 신규 안티패턴 (batch 19, 5 PR)
1327
+
1328
+ batch 19 (#36, #87, #21, #117, #129) 에서 신규/강화 안티패턴:
1329
+
1330
+ | 패턴 | 등장 PR 수 | MCP 룰 후보 |
1331
+ |---|---|---|
1332
+ | **현실 메타포 정합 (현실에서 누가 이 일을 하는가)** | **9+ (#117·#129·#31·#21·#80·#76·#36·#73·#74)** | ⭐⭐⭐ — `metaphor-fidelity-locator` 정점 |
1333
+ | **추상화 활용 점검 + 학습 의도 회수** | 2+ (#129·#15) | ⭐⭐ — `abstraction-purpose-revisit` 신규 |
1334
+ | **State Context 책임 분석 (Context 객체 명시)** | 4+ (#73·#87·#93·#136) | ⭐⭐ — `state-context-locator` 신규 |
1335
+ | **State ↔ Context 양방향 참조 회피** | 1+ (#87) | ⭐⭐ — `state-context-bidirectional-reference` 신규 |
1336
+ | **테스트 = 객체 설계 명세서 (역할·책임·협력)** | 3+ (#26·#87·#93) | ⭐⭐⭐ — `test-as-design-spec` 강화 |
1337
+ | **`is` 연산자 다형성 회피 (SOLID OCP)** | 6+ (#147·#87·#136·#152·#93·#98) | ⭐⭐⭐ — `is-operator-polymorphism-avoidance` 강화 |
1338
+ | **디미터 법칙 위반 (a.b.c.d 깊이)** | 6+ (#93·#133·#146·#87·#137·#148) | ⭐⭐ — `law-of-demeter-violation-depth` 강화 |
1339
+ | **함수 명명 vs 실제 반환 의미 불일치** | 3+ (#36·#117·#21) | ⭐⭐ — `function-name-vs-return-semantic-mismatch` 강화 |
1340
+ | **property val vs computed property (`get()=`) 트레이드오프** | 1 (#117) | ⭐ — Kotlin 어휘 |
1341
+ | **Kotlin `by` delegation 권유 vs PR #21 위임 = 나쁜 습관 (반대 시점)** | 1 (#117·#21) | ⭐⭐ — `delegation-vs-encapsulation-tradeoff` 신규 |
1342
+ | **반복문 의존 vs 수학적 풀이 (Ace 합산)** | 2+ (#117·#87) | ⭐⭐ — `iterative-loop-vs-math-formula` 강화 |
1343
+ | **함수 합성 동치 = 추상화 의도 X (score - aceCount + aceCount = score)** | 1 (#117) | ⭐ — `function-decomposition-creates-identity` 신규 |
1344
+ | **CQS (Command-Query Separation) 위반 (drawCount 2 역할)** | 1 (#117) | ⭐ — `command-query-separation` 신규 |
1345
+ | **테스트 = 하드코드 검증 (production 코드 의존 X)** | 3+ (#99·#26·#117) | ⭐⭐ — `test-hardcoded-vs-production-derived` 강화 |
1346
+ | **함수형 프로그래밍 학습 미션 어휘 (학습 의도 의식)** | 1 (#117) | (reviewer 어휘) |
1347
+ | **Model → View 의존성 분리 + ViewMapper / 확장함수** | 9+ (#117·#21·#87·#88·#80·#76·#93·#107·#137·#90) | ⭐⭐⭐ — `model-view-dependency-direction` 강화 |
1348
+ | **딜러 여러 명 invariant 강제 시점 (생성자 타입 분리 vs single vs filter)** | 4+ (#129·#79·#92·#48) | ⭐⭐ — `compile-time-singleton-vs-runtime-filter` 신규 |
1349
+ | **sealed interface vs abstract class vs open class 트레이드오프** | 5+ (#129·#98·#36·#147·#93·#136) | ⭐⭐ — `sealed-vs-abstract-vs-open-locator` 신규 |
1350
+ | **abstract class 추상 메서드 없음 = open class 동치** | 5+ (#95·#36·#117·#129·#147) | ⭐⭐ — `abstract-without-abstract-method` 강화 |
1351
+ | **테스트 가능성 = interface 분리 (DIP)** | 4+ (#129·#48·#39·#46) | ⭐⭐ — `interface-for-test-substitution` 신규 |
1352
+ | **검증 코드 함수 분리 vs require inline 트레이드오프** | 1 (#129) | ⭐ — `validation-function-vs-require-inline` 신규 |
1353
+ | **커뮤니케이션 메타 (줄글 vs 핵심 내용)** | 1 (#129) | (reviewer 어휘 — MCP 핵심 가치 합류) |
1354
+ | **Boolean 함수명 = true/false 의미 명시** | 1 (#129) | ⭐ — `boolean-function-name-ambiguity` 신규 |
1355
+ | **Tell-Don't-Ask 부분 적용 = 부분 위반** | 1+ (#36) | ⭐⭐ — `tell-dont-ask-partial-coverage` 신규 |
1356
+ | **Domain/View 비용 메타포 (서버/클라이언트)** | 1 (#36) | ⭐ — 메타포 어휘 |
1357
+ | **callback 람다 = View 호출 비용** | 2+ (#36·#137) | ⭐ — `callback-lambda-view-cost` 신규 |
1358
+ | **nullable enum vs not-nullable enum vs NONE 멤버 3안** | 1 (#36) | ⭐ — `enum-nullability-axis` 신규 |
1359
+ | **Ace bonus 단일 +10 vs Multi-Ace 수학적** | 2+ (#36·#129·#117) | ⭐⭐ — `ace-bonus-single-vs-multi` 강화 |
1360
+ | **operator fun not() 의미 일치 (논리 부정 vs 의미 반전)** | 1 (#36) | ⭐ — `operator-not-semantic-misalign` 신규 |
1361
+ | **Stepdown 원칙 (호출자 먼저, 호출 함수 뒤)** | 1 (#36) | ⭐ — `function-order-stepdown` 신규 |
1362
+ | **request* 함수 폭증 vs Generic read** | 1 (#36) | ⭐ — `input-function-proliferation-vs-generic` 신규 |
1363
+ | **Tuple 누수 (Pair<String, Int>) vs 도메인 DTO** | 3+ (#36·#87·#117) | ⭐⭐ — `tuple-leak-vs-domain-dto` 강화 |
1364
+ | **backing property + data class 양립** | 2+ (#36·#46) | ⭐ — `backing-property-applicability` 신규 |
1365
+ | **가상 객체 vs 실재 도메인 객체 (CardPicker → Player)** | 6+ (#80·#145·#100·#76·#39·#31·#21) | ⭐⭐⭐ — `virtual-object-vs-real-domain` 강화 |
1366
+ | **일급 컬렉션 + 위임 = 나쁜 습관 (PR #21·#117 반대 시점)** | 4+ (#21·#74·#108·#46) | ⭐⭐ — `first-class-collection-delegation-pitfall` 강화 |
1367
+ | **테스트 본문 = 필요한 정보 + factory 함수 (외부글 testing.googleblog)** | 5+ (#99·#26·#21·#87·#93) | ⭐⭐ — `test-fixture-essential-info` 강화 |
1368
+ | **버스트/블랙잭 룰 정확성 (< vs ≤, 16 ≤ stay 등)** | 10+ (누적) | ⭐⭐⭐ — `blackjack-rule-fidelity-comparison` 강화 |
1369
+ | **부모 추상 메서드 반환 의미 자식 별 역방향 (Dealer.turn vs Player.turn)** | 1 (#117) | ⭐ — `method-return-semantic-asymmetry-between-subclasses` 신규 |
1370
+ | **stateless 클래스 인스턴스화 vs companion object 정적** | 1 (#117) | ⭐ — `stateless-class-vs-companion-object` 신규 |
1371
+ | **mutable List public 노출 (val MutableList)** | 5+ | ⭐⭐ — `mutable-list-public-exposure` 강화 |
1372
+ | **추상화 활용 = 공통 사항 → 추상 메서드 발견** | 1 (#129) | ⭐⭐ — `abstraction-as-shared-behavior-discovery` 신규 |
1373
+ | **대칭 getResult vs compareWith (양방향 호출 위험)** | 1 (#129) | ⭐ — `symmetric-getResult-vs-compareWith` 신규 |
1374
+ | **결과 누적 callback vs return** | 1 (#129) | ⭐ — `callback-action-for-result-aggregation` 신규 |
1375
+ | **단순 위임 메서드 = 추가 책임 X (메서드 인공)** | 2+ (#129·#87) | ⭐ — `simple-delegation-method-unnecessary` 신규 |
1376
+ | **모든 N 스레드 학생 자가 답변 + 커밋 SHA 첨부 (2025 코호트 정점)** | 2+ (#117·#129) | (학생 자가 학습 가시화 모범) |
1377
+ | **2025 코호트 셀프 체크리스트 PR 본문 스타일** | 2 (#117·#129) | (2025 코호트 신규 형식) |
1378
+
1379
+ ### batch 19 신규 reviewer
1380
+
1381
+ - **@woowahan-dino (디노) — PR #117 — *13번째 reviewer*** — *2025 코호트 reviewer*. *현실 메타포 + 학습 의도 의식 + 반복문 vs 수학적 풀이* 어휘.
1382
+
1383
+ ### batch 19 학생/reviewer 메타 케이스
1384
+
1385
+ - **2025 코호트 (모바일 안드로이드 7기) 진입** — parkjiminnnn #117 + rosemin928 #129 — *셀프 체크리스트 PR 본문 + 모든 스레드 commit SHA + 학생 자가 한계 인정 + 자가 후속 의문 풍부*. **3 시기 코호트 합류 정점 (2023·2024·2025)**.
1386
+ - **boogi-woogi (우기) 양 단계 완성** — 1단계 #18 (batch 18) + 2단계 #36 (batch 19) — *Tell-Don't-Ask 부분 적용 재발 + sealed class 학습 깊이* — *학생 자가 한계 인정 일관*.
1387
+ - **jaeyeongjo (레오) 양 단계 완성** — 1단계 #73 (batch 18) + 2단계 #87 (batch 19) — *State Context 책임 명시 + 양방향 참조 회피 + 디미터 법칙 + 테스트 = 객체 설계 명세서* — *MCP `oh-my-oop` 핵심 가치 정점 어휘 합류*.
1388
+ - **KwonDae (제이든) 메타 어휘 깊이 정점** — PR #129 — *커뮤니케이션 메타 + 학생 인간적 격려 + 추상화 활용 점검 + 현실 메타포 정공*. 누적 4 PR reviewer (PR #67·#75·#99·#129).
1389
+
1390
+ ### 누적 MCP 룰 후보 160+종 (batch 7-19)
1391
+
1392
+ batch 7-19 합계 MCP 룰 후보가 **160종**을 넘어섰다. ⭐⭐⭐ 강한 후보 (batch 19 강화):
1393
+
1394
+ - **`metaphor-fidelity-locator`** (9+ PR) — *현실 메타포 정합*. 핵심 어휘.
1395
+ - **`model-view-dependency-direction`** (9+ PR) — *MVC 절대 원칙*. MVC/MVP/MVVM 공통.
1396
+ - **`virtual-object-vs-real-domain`** (6+ PR) — *Picker/Manager 가상 객체 회피*.
1397
+ - **`is-operator-polymorphism-avoidance`** (6+ PR) — *SOLID OCP*.
1398
+ - **`test-as-design-spec`** (3+ PR) — *Wirfs-Brock RDD 정점*.
1399
+ - **`blackjack-rule-fidelity-comparison`** (10+ PR) — *블랙잭 룰 정확성 (< vs ≤)*.
1400
+ - **`enum-with-ui-value`** (17+ PR) — *enum UI 어휘 누수*.
1401
+ - **`controller-classification-criteria`** (다수 PR) — *Controller 책임 위치*.
1402
+ - **`callback-naming-view-coupling`** — *View 동사 콜백*.
1403
+ - **`pattern-applied-without-need`** (다수 PR) — *Builder/Strategy/Manager 과적용*.
1404
+
1405
+ ### 최종 정리 진입 시점 — batch 19 완료 후 **매우 강력 권장**
1406
+
1407
+ | 지표 | batch 18 | batch 19 (현재) |
1408
+ |---|---|---|
1409
+ | 총 PR | 86 | **91** |
1410
+ | reviewer | 12 | **13** (woowahan-dino 합류) |
1411
+ | 양 단계 완성 reviewees | 33 | **35** (boogi-woogi/jaeyeongjo 추가) |
1412
+ | 1단계만 reviewees | 20 | **21** (hyemdooly/parkjiminnnn/rosemin928 추가) |
1413
+ | 코호트 시기 | 2023·2024 | **2023·2024·2025** (3 시기 합류) |
1414
+ | MCP 룰 후보 | 130+ | **160+** |
1415
+
1416
+ → **코퍼스 포화 + 메타 어휘 완전 정점 + 3 시기 코호트 합류**. **PROGRESS.md/SUMMARY.md/README.md + MCP 룰화 우선 진입 매우 강력 권장**.
1417
+
1418
+ ### 누적 MCP 룰 후보 100+종 (batch 7-17)
1419
+
1420
+ batch 7-17 합계 MCP 룰 후보가 100종을 넘어섰다. ⭐⭐⭐ 강한 후보:
1421
+
1422
+ - **`pattern-applied-without-need`** (다수 PR: BaseHuman 추상화 #80, Manager 폭증 #145, Wallet 지갑 #100, 팩토리 메서드 #76, 일급 컬렉션 과적용 #39, Builder 패턴 #31)
1423
+ - **`controller-classification-criteria`** (view 의존 + 테스트 가능 2 기준)
1424
+ - **`callback-naming-view-coupling`** (printX/showX = View 동사)
1425
+ - **`dependency-direction-clarification`** (UI→Domain OK / Domain→UI 문제)
1426
+ - **`maintainer-perspective-locator`** (기획자 요구사항 + 동료 개발자 위치)
1427
+ - **`manager-class-proliferation`** (Manager 폭증)
1428
+ - **`kotlin-function-locus-criteria`** (top-level / object / 내부 함수 기준)
1429
+ - **`sealed-class-when-exhaustive`** (누적 8 PR)
1430
+ - **`abstract-without-abstract-method`** (누적 5 PR)
1431
+ - **`blackjack-rule-fidelity`** (누적 7 PR)
1432
+ - **`enum-with-ui-value`** (누적 15+ PR)
1433
+ - **`controller-domain-coupling-depth`**
1434
+
1435
+ ## 8. 중간 그룹 신규 안티패턴 (batch 8·9 누적)
1436
+
1437
+ ≥10~29 그룹의 *2단계 특수 패턴* (베팅/수익률/블랙잭 1.5배):
1438
+
1439
+ | 패턴 | 등장 PR 수 (batch 8·9) | MCP 룰 후보 |
1440
+ |---|---|---|
1441
+ | **`Money 가변 + operator plus Unit 반환`** = 가변 + 연산자 오버로딩 상성 | 3+ (#133·#132·#90) | ⭐⭐ — Kotlin 어휘 |
1442
+ | **3 변수 제약 부산물 인공 객체** (Items / GameInformation / BetStatus / BlackJackPair / UserInfo) | 5+ (#133·#88·#132·#136·#93) | ⭐⭐ |
1443
+ | **수익률 계산 책임 위치 토론** (Player/Participant vs Result 객체) | 모든 2단계 PR | (트레이드오프 — 룰화 어려움) |
1444
+ | **`-0.0` Double IEEE 754 함정 우회** | 1 (#131) | ⭐ — 도메인 특수 |
1445
+ | **`Bust.earningRate` Dead code** (sealed 추상 메서드 통일 부작용) | 1+ (#93) | ⭐ |
1446
+ | **`sealed without differentiation`** (멤버 별 데이터 차이 없는 sealed) | 1 (#93) | ⭐⭐ — Kotlin 어휘 |
1447
+ | **`view-as-raw-input-converter`** (Controller에서 raw String → ActionType 변환) | 2 (#132·#90) | ⭐⭐ |
1448
+ | **`view-by-stage-split`** (View 를 단계별 분리: SettingView/ProgressView) | 2 (#88·#131) | ⭐ |
1449
+ | **`bidirectional-dependency`** (부모-자식 양방향 의존) | 1 (#93) | ⭐ |
1450
+ | **`let-run-elvis-pitfall`** (Kotlin scope function null 함정) | 1 (#93) | ⭐ — Kotlin 한정 |
1451
+ | **State 패턴 정공 vs interface vs enum 트레이드오프** | 모든 2단계 PR | (도메인 정합 룰) |
1452
+ | **`action-and-state-enum-conflation`** (HIT/STAND enum 에 Bust 흡수) | 1 (#90) | ⭐ |
1453
+
1454
+ ### 신규 도메인 특수 (batch 8·9)
1455
+
1456
+ 1. **블랙잭 1.5배 분기**: `BlackjackWin` 별도 결과 멤버 vs *Win + isBlackjack 분기* — 트레이드오프.
1457
+ 2. **딜러 ≠ 플레이어 도메인 차이** = *Dealer 베팅 안 함*. 명시적 멤버 차이로 표현.
1458
+ 3. **`Card private constructor + named factory`** (PR #133, #93, #136 정공) vs *invoke 함정* (PR #108 1단계).
1459
+ 4. **State 객체 = `compareTo(other: State): GameResult`** 다형성 (PR #93·#136·#152) vs *Judge 정적 헬퍼 + difference 변환* (PR #90).
1460
+
1461
+ ## 9. 다음 세션 진입 순서
1462
+
1463
+ 1. `ls /tmp/oop-lessons-cache-blackjack/` — 캐시 확인.
1464
+ 2. 동일 리뷰이 2단계 미분석 9개 우선 (위 §1 표). 배치 5개씩:
1465
+ - **batch 10**: #41 pingu244, #49 inseonyun, #53 whk06061, #58 otter66, #137 HamBeomJoon
1466
+ - **batch 11**: #146 yrsel, #147 donghyun81, #148 etama123, #151 jerry8282 + 1단계 미분석 reviewee 1개
1467
+ 3. 그 뒤 새 1단계/2단계 reviewees (~75개) 진입.
1468
+ 4. *각 배치마다 commit, push 안 함*.
1469
+
1470
+ ### 분량 휴리스틱 (batch 8·9 데이터)
1471
+
1472
+ - 학생 자가 토론 풍부 + State 패턴: **1100~1400줄** (#152, #133, #93, #132, #136)
1473
+ - 학생 자가 답변 + value class 등 Kotlin 어휘 풍부: **1100~1300줄** (#90)
1474
+ - 표준 + 깊은 토론: **800~1000줄** (#85, #131)
1475
+ - 칭찬 위주 + 학생 100% 후속 반영: **400~600줄** (#88, #103)