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.
- package/MCP_STRUCTURE.md +301 -0
- package/README.md +167 -0
- package/SCOPE.md +27 -0
- package/dist/application/discovery.d.ts +133 -0
- package/dist/application/discovery.js +62 -0
- package/dist/application/discovery.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/collaborators.d.ts +2 -0
- package/dist/domain/collaborators.js +26 -0
- package/dist/domain/collaborators.js.map +1 -0
- package/dist/domain/ids.d.ts +4 -0
- package/dist/domain/ids.js +23 -0
- package/dist/domain/ids.js.map +1 -0
- package/dist/domain/model.d.ts +71 -0
- package/dist/domain/model.js +2 -0
- package/dist/domain/model.js.map +1 -0
- package/dist/domain/schemas.d.ts +213 -0
- package/dist/domain/schemas.js +79 -0
- package/dist/domain/schemas.js.map +1 -0
- package/dist/domain/stereotypes.d.ts +7 -0
- package/dist/domain/stereotypes.js +65 -0
- package/dist/domain/stereotypes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/io/classStore.d.ts +9 -0
- package/dist/io/classStore.js +39 -0
- package/dist/io/classStore.js.map +1 -0
- package/dist/io/collaborationStore.d.ts +7 -0
- package/dist/io/collaborationStore.js +32 -0
- package/dist/io/collaborationStore.js.map +1 -0
- package/dist/io/design.d.ts +3 -0
- package/dist/io/design.js +22 -0
- package/dist/io/design.js.map +1 -0
- package/dist/io/designIndex.d.ts +6 -0
- package/dist/io/designIndex.js +49 -0
- package/dist/io/designIndex.js.map +1 -0
- package/dist/io/frontmatter.d.ts +8 -0
- package/dist/io/frontmatter.js +31 -0
- package/dist/io/frontmatter.js.map +1 -0
- package/dist/io/history.d.ts +10 -0
- package/dist/io/history.js +38 -0
- package/dist/io/history.js.map +1 -0
- package/dist/io/useCaseStore.d.ts +8 -0
- package/dist/io/useCaseStore.js +36 -0
- package/dist/io/useCaseStore.js.map +1 -0
- package/dist/io/workspace.d.ts +14 -0
- package/dist/io/workspace.js +82 -0
- package/dist/io/workspace.js.map +1 -0
- package/dist/oop/commands.d.ts +446 -0
- package/dist/oop/commands.js +319 -0
- package/dist/oop/commands.js.map +1 -0
- package/dist/oop/conformance.d.ts +16 -0
- package/dist/oop/conformance.js +30 -0
- package/dist/oop/conformance.js.map +1 -0
- package/dist/prompts/discovery.d.ts +2 -0
- package/dist/prompts/discovery.js +41 -0
- package/dist/prompts/discovery.js.map +1 -0
- package/dist/prompts/imagineWithoutController.d.ts +2 -0
- package/dist/prompts/imagineWithoutController.js +75 -0
- package/dist/prompts/imagineWithoutController.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.js +17 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/phasePressureTest.d.ts +2 -0
- package/dist/prompts/phasePressureTest.js +69 -0
- package/dist/prompts/phasePressureTest.js.map +1 -0
- package/dist/prompts/rddIntro.d.ts +2 -0
- package/dist/prompts/rddIntro.js +53 -0
- package/dist/prompts/rddIntro.js.map +1 -0
- package/dist/prompts/review.d.ts +2 -0
- package/dist/prompts/review.js +45 -0
- package/dist/prompts/review.js.map +1 -0
- package/dist/prompts/stateMachineIntrospect.d.ts +2 -0
- package/dist/prompts/stateMachineIntrospect.js +80 -0
- package/dist/prompts/stateMachineIntrospect.js.map +1 -0
- package/dist/prompts/tellDontAskRephrase.d.ts +2 -0
- package/dist/prompts/tellDontAskRephrase.js +66 -0
- package/dist/prompts/tellDontAskRephrase.js.map +1 -0
- package/dist/render/diff.d.ts +21 -0
- package/dist/render/diff.js +84 -0
- package/dist/render/diff.js.map +1 -0
- package/dist/render/mermaid.d.ts +24 -0
- package/dist/render/mermaid.js +53 -0
- package/dist/render/mermaid.js.map +1 -0
- package/dist/render/sideBySide.d.ts +14 -0
- package/dist/render/sideBySide.js +91 -0
- package/dist/render/sideBySide.js.map +1 -0
- package/dist/resources/index.d.ts +2 -0
- package/dist/resources/index.js +349 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/alternatives.d.ts +2 -0
- package/dist/tools/alternatives.js +9 -0
- package/dist/tools/alternatives.js.map +1 -0
- package/dist/tools/classes.d.ts +2 -0
- package/dist/tools/classes.js +13 -0
- package/dist/tools/classes.js.map +1 -0
- package/dist/tools/collaborations.d.ts +2 -0
- package/dist/tools/collaborations.js +8 -0
- package/dist/tools/collaborations.js.map +1 -0
- package/dist/tools/compare.d.ts +2 -0
- package/dist/tools/compare.js +9 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/conformance.d.ts +3 -0
- package/dist/tools/conformance.js +11 -0
- package/dist/tools/conformance.js.map +1 -0
- package/dist/tools/diagram.d.ts +2 -0
- package/dist/tools/diagram.js +9 -0
- package/dist/tools/diagram.js.map +1 -0
- package/dist/tools/discovery.d.ts +2 -0
- package/dist/tools/discovery.js +23 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/init.d.ts +2 -0
- package/dist/tools/init.js +9 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/oop.d.ts +9 -0
- package/dist/tools/oop.js +26 -0
- package/dist/tools/oop.js.map +1 -0
- package/dist/tools/responsibilities.d.ts +2 -0
- package/dist/tools/responsibilities.js +13 -0
- package/dist/tools/responsibilities.js.map +1 -0
- package/dist/tools/state.d.ts +2 -0
- package/dist/tools/state.js +8 -0
- package/dist/tools/state.js.map +1 -0
- package/dist/tools/useCases.d.ts +2 -0
- package/dist/tools/useCases.js +18 -0
- package/dist/tools/useCases.js.map +1 -0
- package/dist/tools/validate.d.ts +2 -0
- package/dist/tools/validate.js +9 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tradeoff/engine.d.ts +61 -0
- package/dist/tradeoff/engine.js +171 -0
- package/dist/tradeoff/engine.js.map +1 -0
- package/dist/tradeoff/heuristics/classSplit.d.ts +3 -0
- package/dist/tradeoff/heuristics/classSplit.js +94 -0
- package/dist/tradeoff/heuristics/classSplit.js.map +1 -0
- package/dist/tradeoff/heuristics/collaborationShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collaborationShape.js +82 -0
- package/dist/tradeoff/heuristics/collaborationShape.js.map +1 -0
- package/dist/tradeoff/heuristics/collectionShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collectionShape.js +113 -0
- package/dist/tradeoff/heuristics/collectionShape.js.map +1 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.d.ts +2 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js +114 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js.map +1 -0
- package/dist/tradeoff/heuristics/errorHandling.d.ts +2 -0
- package/dist/tradeoff/heuristics/errorHandling.js +110 -0
- package/dist/tradeoff/heuristics/errorHandling.js.map +1 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.d.ts +23 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js +183 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js.map +1 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.d.ts +2 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js +23 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js.map +1 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.d.ts +2 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js +110 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js.map +1 -0
- package/dist/tradeoff/heuristics/valueObjectShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js +111 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js.map +1 -0
- package/dist/tradeoff/templates.d.ts +2 -0
- package/dist/tradeoff/templates.js +33 -0
- package/dist/tradeoff/templates.js.map +1 -0
- package/dist/util/log.d.ts +1 -0
- package/dist/util/log.js +7 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/mcp.d.ts +4 -0
- package/dist/util/mcp.js +18 -0
- package/dist/util/mcp.js.map +1 -0
- package/dist/validate/cohesion.d.ts +3 -0
- package/dist/validate/cohesion.js +88 -0
- package/dist/validate/cohesion.js.map +1 -0
- package/dist/validate/collectionWrapper.d.ts +3 -0
- package/dist/validate/collectionWrapper.js +131 -0
- package/dist/validate/collectionWrapper.js.map +1 -0
- package/dist/validate/coupling.d.ts +3 -0
- package/dist/validate/coupling.js +47 -0
- package/dist/validate/coupling.js.map +1 -0
- package/dist/validate/cycle.d.ts +3 -0
- package/dist/validate/cycle.js +101 -0
- package/dist/validate/cycle.js.map +1 -0
- package/dist/validate/dataDuplication.d.ts +3 -0
- package/dist/validate/dataDuplication.js +150 -0
- package/dist/validate/dataDuplication.js.map +1 -0
- package/dist/validate/dependencyDirection.d.ts +3 -0
- package/dist/validate/dependencyDirection.js +106 -0
- package/dist/validate/dependencyDirection.js.map +1 -0
- package/dist/validate/dualUseKnowing.d.ts +3 -0
- package/dist/validate/dualUseKnowing.js +137 -0
- package/dist/validate/dualUseKnowing.js.map +1 -0
- package/dist/validate/emptyObjectFill.d.ts +3 -0
- package/dist/validate/emptyObjectFill.js +119 -0
- package/dist/validate/emptyObjectFill.js.map +1 -0
- package/dist/validate/findings.d.ts +22 -0
- package/dist/validate/findings.js +12 -0
- package/dist/validate/findings.js.map +1 -0
- package/dist/validate/functionDecompositionExcess.d.ts +3 -0
- package/dist/validate/functionDecompositionExcess.js +120 -0
- package/dist/validate/functionDecompositionExcess.js.map +1 -0
- package/dist/validate/functionNotObject.d.ts +3 -0
- package/dist/validate/functionNotObject.js +80 -0
- package/dist/validate/functionNotObject.js.map +1 -0
- package/dist/validate/godObject.d.ts +6 -0
- package/dist/validate/godObject.js +76 -0
- package/dist/validate/godObject.js.map +1 -0
- package/dist/validate/presentationInDomain.d.ts +3 -0
- package/dist/validate/presentationInDomain.js +57 -0
- package/dist/validate/presentationInDomain.js.map +1 -0
- package/dist/validate/primitiveWrapper.d.ts +3 -0
- package/dist/validate/primitiveWrapper.js +106 -0
- package/dist/validate/primitiveWrapper.js.map +1 -0
- package/dist/validate/rules.d.ts +24 -0
- package/dist/validate/rules.js +269 -0
- package/dist/validate/rules.js.map +1 -0
- package/dist/validate/singletonStatefulHolder.d.ts +3 -0
- package/dist/validate/singletonStatefulHolder.js +128 -0
- package/dist/validate/singletonStatefulHolder.js.map +1 -0
- package/dist/validate/strategyAsymmetry.d.ts +3 -0
- package/dist/validate/strategyAsymmetry.js +131 -0
- package/dist/validate/strategyAsymmetry.js.map +1 -0
- package/dist/validate/testability.d.ts +5 -0
- package/dist/validate/testability.js +157 -0
- package/dist/validate/testability.js.map +1 -0
- package/dist/validate/vagueName.d.ts +3 -0
- package/dist/validate/vagueName.js +136 -0
- package/dist/validate/vagueName.js.map +1 -0
- package/dist/validate/validationLocation.d.ts +3 -0
- package/dist/validate/validationLocation.js +120 -0
- package/dist/validate/validationLocation.js.map +1 -0
- package/lessons/STYLE_GUIDE.md +304 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-kotlin-blackjack/HANDOVER.md +1475 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-kotlin-lotto/2chang5/27-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/2chang5/52-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +187 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/14-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +206 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/47-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/2-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/34-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +88 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/12-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/40-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +135 -0
- package/lessons/woowacourse-kotlin-lotto/HANDOVER.md +217 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/121-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/139-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +75 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/76-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/92-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +122 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/100-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +110 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/68-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +84 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/60-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/96-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/61-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/93-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +16 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/109-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +57 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/135-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/PROGRESS.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/README.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/32-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/5-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/SUMMARY.md +369 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/25-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/37-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +27 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/72-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +137 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +17 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/102-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +62 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/64-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/11-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/29-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/26-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/51-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +123 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/71-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/97-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/124-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/129-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/24-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +117 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/50-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +167 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/116-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/147-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +223 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/125-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/153-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/119-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/138-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/111-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/152-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/80-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/87-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +134 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/112-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +170 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/148-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +183 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/101-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/78-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/107-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/136-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/106-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/137-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +111 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/67-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/95-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/113-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +235 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/132-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/77-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/98-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +162 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/17-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/28-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +23 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/15-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/48-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/62-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/88-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/122-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/133-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/3-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +222 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/49-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +166 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/16-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +154 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/55-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/59-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/83-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +53 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/115-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/134-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/63-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +144 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/89-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/128-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/144-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/58-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/81-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/120-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/131-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +188 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/43-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +24 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/8-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +159 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/74-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +50 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/94-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/kkosang/85-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/70-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/82-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/19-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +161 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/41-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +73 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/105-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/151-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/127-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +186 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/130-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +132 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/110-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/141-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/69-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/90-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +177 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/20-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +69 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/46-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/13-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/53-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/126-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/149-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +56 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/117-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/146-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +173 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/33-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/54-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/7-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/31-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/4-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/23-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/38-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/21-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/36-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/123-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/140-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +126 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/103-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/66-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +118 -0
- package/lessons/woowacourse-kotlin-lotto/s9hn/18-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +112 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/75-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/91-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +140 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/65-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +96 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/99-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +64 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/10-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/35-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/22-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/30-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/114-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/145-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +120 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/42-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/9-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +89 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/118-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +100 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/150-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +142 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/108-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/143-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +108 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/Hevton/118-/353/246/254/355/214/251/355/204/260/353/247/201.md +51 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/PROGRESS.md +94 -0
- package/lessons/woowacourse-racingcar/README.md +69 -0
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/SUMMARY.md +339 -0
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/aprilgom/130-/353/246/254/355/214/251/355/204/260/353/247/201.md +52 -0
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/chaehyuns/131-/353/246/254/355/214/251/355/204/260/353/247/201.md +49 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/gaeun5744/124-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/haeum808/129-/353/246/254/355/214/251/355/204/260/353/247/201.md +46 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lessons/woowacourse-racingcar/kimhm0728/116-/353/246/254/355/214/251/355/204/260/353/247/201.md +54 -0
- 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
- package/lessons/woowacourse-racingcar/kkosang/126-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/package.json +46 -0
- package/skills/oh-my-oop/SKILL.md +39 -0
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
# PR #118 — [블랙잭 1단계] 조이 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@gahyunkim](https://github.com/gahyunkim)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/118
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** [@malibinYun](https://github.com/malibinYun) (말리빈) — 2025 코호트 신규 reviewer 등장 (말리빈 = 2024 PR 들 reviewer = krrong (PR #32) 의 reviewer 였음; 2024 → 2025 reviewer 활동 유지)
|
|
7
|
+
- **라인 코멘트:** 18 스레드 — *PR 본문 자가 한계 인정 + 시간 부족 + 페어 학습 + 모든 18 스레드 학생 자가 답변 + commit SHA + Ace 1 vs 11 기본 학생 자가 의견 vs reviewer 수학적 비교 어휘 (4*11-3*10 vs 4*1+10) + Flyweight 패턴 학생 자가 학습 + `cards.allCards.clear()` 코드 예시 시나리오 + 「객체지향의 사실과 오해」 학생 자가 인용 + MVC 패턴 매몰 vs 객체 이름 집중 reviewer 메타 어휘 + data class copy 비활성화 (Kotlin 2.0) 학생 자가 학습 + 카드 부족 시 새 덱 vs 게임 종료 (카지노 메타포)*
|
|
8
|
+
- **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, 누적 9 PR + #118 = **2025 코호트 10 PR 코퍼스 정점**).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 자가 한계 인정 + *많이 혼내주세요* 어휘
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"안녕하세요 말리빈! 이번 블랙잭 미션을 리뷰 받게 된 조이입니다. 블랙잭 미션을 진행하다보니 시간이 부족해 좀 더 꼼꼼히 확인하지 못한 부분들이 많은 것 같습니다.. 리팩토링을 하면서 조금 더 좋은 코드를 만들기 위해 노력해보겠습니다! 많이 많이 혼내주세요!"*
|
|
17
|
+
|
|
18
|
+
→ **학생 자가 시간 부족 인정 + 적극 학습 어휘 (*많이 혼내주세요*)** = PR #130·#139·#143 (학생 자가 한계 인정) 결 합류.
|
|
19
|
+
|
|
20
|
+
### 2. 말리빈 (2024 reviewer) → 2025 reviewer 활동 유지 메타 케이스
|
|
21
|
+
|
|
22
|
+
말리빈 (`@malibinYun`) = 2024년 PR 들 (PR #32 krrong 등) 의 reviewer + 2025년 PR #118 의 reviewer.
|
|
23
|
+
|
|
24
|
+
→ **reviewer 의 다년 활동 = 학생/reviewer 진화 메타 케이스 변형** — 학생 → reviewer 진화 (krrong/hyemdooly) 와 *반대 시점 (reviewer → reviewer 다년 활동)*.
|
|
25
|
+
|
|
26
|
+
**MCP 룰 `multi-year-reviewer-activity` 후보** — *reviewer 의 코호트 간 활동 유지*.
|
|
27
|
+
|
|
28
|
+
### 3. 학생 「객체지향의 사실과 오해」 자가 인용 + *역할·책임·협력* 어휘
|
|
29
|
+
|
|
30
|
+
학생 자가 답변 (Thread 8):
|
|
31
|
+
|
|
32
|
+
> *"객체지향의 사실과 오해를 읽으면서, 객체를 단순히 현실의 사물을 모방하는 존재가 아니라 명확한 역할과 책임을 가진 독립적인 행위자로 바라보게 되었습니다. 현실에서는 말리빈이 해준 피드백처럼 카지노 딜러가 점수를 계산하는 모습을 볼 수 있지만, 소프트웨어 설계에서는 딜러에게 모든 계산과 승패 판정 책임을 부여하기보다는, 각 객체가 단일 책임을 갖도록 역할을 분리하는 것이 바람직하다고 생각했습니다."*
|
|
33
|
+
|
|
34
|
+
→ **학생 자가 「객체지향의 사실과 오해」 인용 + *역할·책임·협력* 어휘 자가 사용** = **MCP `oh-my-oop` 핵심 가치 정점**.
|
|
35
|
+
|
|
36
|
+
#### 3.1. *현실 메타포 vs 객체 분리 트레이드오프*
|
|
37
|
+
|
|
38
|
+
학생 자가 입장 — *현실 메타포 (딜러 = 점수 계산) vs 단일 책임 (GameResultDecider 분리)*. PR #117·#129·#130·#143·#109·#113 결의 *현실 메타포 정합* 어휘 와 *학생 자가 *현실 메타포 비판***.
|
|
39
|
+
|
|
40
|
+
**MCP 룰 `metaphor-fidelity-vs-srp-tradeoff` 후보** — *현실 메타포 정합 vs 단일 책임 트레이드오프*.
|
|
41
|
+
|
|
42
|
+
### 4. Ace 1 vs 11 기본 + 수학적 비교 어휘 (말리빈)
|
|
43
|
+
|
|
44
|
+
학생 자가 의견 (Thread 2):
|
|
45
|
+
|
|
46
|
+
> *"저는 값을 계산하는 로직에서 ACE를 기본적으로 11로 판단하는 것이 더 옳다고 생각했습니다. 만약 여러 장의 카드를 받았을 때, 그 카드들 안에 ACE가 존재한다면 기본적으로 11점으로 계산하고, 총합이 21을 초과하는 경우에만 1점으로 변경하는 것이 블랙잭 규칙에 더 적절하다고 생각했습니다!"*
|
|
47
|
+
|
|
48
|
+
reviewer (수학적 비교 어휘):
|
|
49
|
+
|
|
50
|
+
> *"글쎄요, ACE 카드가 10점이 추가되는 경우가 있는 것이지, 11점에서 출발해서 10점씩 깎이는 것이 더 어색하다 생각해요. ACE 카드가 4장인 경우, `4 * 11 - 3 * 10` 로직을 작성하는 게 적절해보이시나요? 아니면, `4 * 1 + 10` 로직을 작성하는 게 적절해보이시나요?*
|
|
51
|
+
>
|
|
52
|
+
> *일반적으로 ACE는 어떤 게임에서든 1로 계산하기도 하니까요. 다각도로 볼 수 있는 시각을 연습해보세요."*
|
|
53
|
+
|
|
54
|
+
학생 자가 적용:
|
|
55
|
+
|
|
56
|
+
> *"ACE를 1로 계산하는 게 더 일반적이겠네요! 말리빈의 피드백대로 기본적으로는 1로 계산하고 특정 상황에 따라 10을 추가해주는 방식으로 재 구현해보았습니다!"*
|
|
57
|
+
|
|
58
|
+
→ **reviewer 수학적 비교 어휘 (4*11-3*10 vs 4*1+10)** = *추상화의 자연스러움 = 수학식의 단순성*. **MCP 핵심 가치 정점**.
|
|
59
|
+
|
|
60
|
+
PR #117 (수학적 풀이 외부글) 결 합류 + *수학적 직관성 = 모델 자연스러움* 어휘.
|
|
61
|
+
|
|
62
|
+
**MCP 룰 `mathematical-naturalness-as-model-criterion` 후보** — *수학식 단순성 = 모델 자연스러움 지표*.
|
|
63
|
+
|
|
64
|
+
### 5. Flyweight 패턴 학생 자가 학습
|
|
65
|
+
|
|
66
|
+
학생 자가 답변 (Thread 4):
|
|
67
|
+
|
|
68
|
+
> *"52장의 카드를 모두 생성한 후, 이미 생성된 동일한 카드 객체가 존재한다면 해당 객체를 재사용하는 방식은 메모리 측면에서 효율적이라고 생각했습니다. (...) 블랙잭의 경우 가능한 카드 조합이 52가지로 제한되어 있으므로, Flyweight 패턴을 적용해 52장의 카드에 대해 캐싱을 구현한다면, 이미 생성된 카드 객체를 재사용하여 메모리 사용량을 크게 줄일 수 있을 것 같았습니다."*
|
|
69
|
+
|
|
70
|
+
→ **GoF 디자인 패턴 (Flyweight) 학생 자가 학습 + 자가 적용** = PR #138·#142 (companion lazy 캐싱) 결의 *학생 자가 패턴 어휘 사용*. **MCP 룰 `flyweight-pattern-card-caching` 후보**.
|
|
71
|
+
|
|
72
|
+
### 6. `Card private constructor + 팩토리 메서드` 자가 적용 — 중복 인스턴스 회피
|
|
73
|
+
|
|
74
|
+
reviewer (Thread 11): *"여전히 동일한 값을 가지는 중복 인스턴스를 생성할 수 있겠어요."*
|
|
75
|
+
|
|
76
|
+
학생 자가 적용:
|
|
77
|
+
|
|
78
|
+
```kotlin
|
|
79
|
+
class Card private constructor(val cardRank: CardRank, val shape: Shape)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
→ **private constructor + 팩토리 메서드** = PR #35 결의 *private constructor + companion factory*. 누적 2+ PR.
|
|
83
|
+
|
|
84
|
+
### 7. data class copy 비활성화 (Kotlin 2.0) — 학생 자가 학습
|
|
85
|
+
|
|
86
|
+
reviewer (Thread 11): *"data class 도 이제는 copy의 영향을 받지 않도록 구성해볼 수 있지요."* + 외부글 (kotlinlang.org/docs/whatsnew2020.html).
|
|
87
|
+
|
|
88
|
+
학생 자가 답변: *"@Deprecated(DeprecationLevel.ERROR)를 이용하면 copy()를 비활성화 하는 것이 가능하다고 하네요!"*
|
|
89
|
+
|
|
90
|
+
→ **Kotlin 2.0 + 신규 어휘 자가 학습** = *Kotlin 어휘 깊은 자가 학습*. **MCP 룰 `kotlin-version-feature-learning` 후보**.
|
|
91
|
+
|
|
92
|
+
### 8. 추가 칭찬 + 모든 18 스레드 학생 자가 답변 + commit SHA
|
|
93
|
+
|
|
94
|
+
## 못한 점 (설계 관점)
|
|
95
|
+
|
|
96
|
+
### 1. `cards.allCards.clear()` 코드 예시 시나리오 — reviewer 가 *문제 시나리오*
|
|
97
|
+
|
|
98
|
+
reviewer (Thread 5):
|
|
99
|
+
|
|
100
|
+
> *"아래 코드를 실행시킨다면 어떤 문제가 생길 수 있을까요?*
|
|
101
|
+
> ```kotlin
|
|
102
|
+
> val cards = Cards(listOf(.....))
|
|
103
|
+
> cards.allCards.clear()
|
|
104
|
+
> ```"
|
|
105
|
+
|
|
106
|
+
학생 자가 답변:
|
|
107
|
+
|
|
108
|
+
> *"위의 코드를 실행하게 되면, allCards는 MutableList로 구현되어있기 때문에 외부에서 조작이 가능하게 됩니다. clear()를 통해서 모든 카드를 삭제하게 될 수 있을 것 같습니다."*
|
|
109
|
+
|
|
110
|
+
→ **reviewer 가 *문제 시나리오 코드 예시* + 학생 자가 답변 모범** = *Tell-Don't-Ask + mutable list 외부 노출 위험 자가 학습*. PR #21·#117·#138·#143 결 강화.
|
|
111
|
+
|
|
112
|
+
**MCP 룰 `reviewer-scenario-code-example` 후보** — *reviewer 가 *문제 발생 시나리오 코드 예시* = 학생 자가 답변 유도*.
|
|
113
|
+
|
|
114
|
+
### 2. *MVC 패턴 매몰되지 않기* reviewer 메타 어휘
|
|
115
|
+
|
|
116
|
+
reviewer (Thread 10·13):
|
|
117
|
+
|
|
118
|
+
> *"MVC 패턴이라 Service 라는 이름을 붙이신거라면, 거기에 벗어나서 객체의 이름을 짓는 데 집중해보세요."*
|
|
119
|
+
|
|
120
|
+
> *"이전에 언급했던 것 처럼, MVC 패턴에 매몰되지 않고 생각해보시면 좋겠어요 :)"*
|
|
121
|
+
|
|
122
|
+
학생: *"MVC 패턴에 매몰되지 않게 일단은 각 클래스들에 맞는 책임과 역할을 가지고 있는지를 판단하면서 구현해보겠습니다!"*
|
|
123
|
+
|
|
124
|
+
→ **패턴 매몰 vs 객체 이름 집중** = *MCP `oh-my-oop` 핵심 가치 (패턴 적용 X = 책임 우선)*. PR #126 (KwonDae *MVC 절대 원칙*) 결의 *반대 시점 (MVC 매몰 회피)* 트레이드오프.
|
|
125
|
+
|
|
126
|
+
**MCP 룰 `pattern-applied-without-need` 강화** 누적 7+ PR (#80·#145·#100·#76·#39·#31·#118). **MCP 룰 `pattern-vs-object-naming-priority` 후보** — *패턴 (Service, Manager) vs 객체 이름 (역할 명시) 우선순위*.
|
|
127
|
+
|
|
128
|
+
### 3. CardsGenerator 테스트 가능성 + Shuffler interface
|
|
129
|
+
|
|
130
|
+
reviewer (Thread 6): *"이 카드 생성기는 랜덤의 요소때문에 테스트가 불가능한 구조이네요."*
|
|
131
|
+
|
|
132
|
+
학생 자가 적용: `Shuffler interface` 분리 + `TestShuffler` (test util).
|
|
133
|
+
|
|
134
|
+
→ **DIP 정공 + production vs test 분리** = PR #138·#143·#113·#109 결의 *interface-for-test-substitution* 누적 7+ PR.
|
|
135
|
+
|
|
136
|
+
### 4. `turn`/`isHit` 이름 의미 모호
|
|
137
|
+
|
|
138
|
+
reviewer (Thread 7): *"turn 이라는 메서드명은 다른 개발자들이 보았을 때 어떤 역할을 할지 바로 유추해낼 수 있을까요?"*
|
|
139
|
+
|
|
140
|
+
학생 자가 적용: `performTurn` + `decideToHit`.
|
|
141
|
+
|
|
142
|
+
→ **이름 의미 정확성** = PR #36·#117·#129·#130·#139·#109·#113 결 합류 누적 7+ PR.
|
|
143
|
+
|
|
144
|
+
### 5. GameResultDecider 외부 객체 vs Dealer 내부 위치
|
|
145
|
+
|
|
146
|
+
reviewer (Thread 8) 후속:
|
|
147
|
+
|
|
148
|
+
> *"객체 분리하는 것은 공감하지만, 매번 결과를 알아야할 때마다 이 객체를 생성해야겠네요. 생성이 꼭 필요한 것일지 고민해보시면 좋겠어요. 또, 객체 분리했다 해도, 여전히 딜러 내부에 위치하는 건 어떨지 고민해보세요. 다른 개발자들이 점수 계산 로직을 찾을 때 어디부터 찾아볼지 상상해보면서요!"*
|
|
149
|
+
|
|
150
|
+
→ **동료 개발자 시점 어휘 (maintainer perspective locator)** = PR #87·#76·#80·#107·#82 결 + **객체 생성 비용 + 객체 위치 (Dealer 내부 vs 외부 객체) 트레이드오프**. PR #129·#138·#142 (외부 장치 X = 참가자 자가) 결의 *반대 시점*.
|
|
151
|
+
|
|
152
|
+
### 6. Shape/Rank enum 텍스트 정보 = 도메인 vs 뷰
|
|
153
|
+
|
|
154
|
+
reviewer (Thread 9): *"이 블랙잭 게임 도메인을 똑 떼어다가 안드로이드에 이식한다면, 이 텍스트 값은 유효한가요?"*
|
|
155
|
+
|
|
156
|
+
학생 자가 답변:
|
|
157
|
+
|
|
158
|
+
> *"안드로이드에서 텍스트 정보는 주로 리소스 파일(strings.xml)에 저장하여 다국어 지원 및 유지보수를 용이하게 하는 것으로 알고 있습니다."*
|
|
159
|
+
|
|
160
|
+
학생 자가 적용: `Card.displayName()` 확장 함수.
|
|
161
|
+
|
|
162
|
+
→ **다국어/이식성 의식 + 확장 함수 정공** = PR #117·#126·#143 결 합류. **MCP 룰 `model-view-dependency-direction` 강화** 누적 12+ PR ⭐⭐⭐.
|
|
163
|
+
|
|
164
|
+
### 7. `Cards.drawCards()` 역할 추가 — 카드 뭉치 자가 행동
|
|
165
|
+
|
|
166
|
+
reviewer (Thread 12):
|
|
167
|
+
|
|
168
|
+
> *"이 객체는 값을 갖고있기만 하고 맡고 있는 역할이 없네요. 여기에 할 수 있는 역할을 어디에서 하고 있는 것은 아닐지, 혹은 다른 곳에서 적절히 하고 있기에 이 객체가 필요 없는 것은 아닐지 고민해보세요."*
|
|
169
|
+
|
|
170
|
+
학생 자가 적용: `Cards.drawCards()` 메서드 추가.
|
|
171
|
+
|
|
172
|
+
→ **객체 책임 X = 객체 불필요 vs 책임 추가**. PR #142 (Game/Scoreboard 분리) 결의 *책임 응집*.
|
|
173
|
+
|
|
174
|
+
### 8. 패키지 구조 model/view/service → model/view/controller
|
|
175
|
+
|
|
176
|
+
reviewer (Thread 13): *"이 질문 이전에 패키지 구조를 model, view, service 로 구성하는 것은 적절한 것인지부터 고민해보시면 좋겠네요 :)"*
|
|
177
|
+
|
|
178
|
+
학생 자가 적용 → controller (MVC).
|
|
179
|
+
|
|
180
|
+
→ **패키지 구조 의식**. PR #142 (package-by-domain) 결 합류.
|
|
181
|
+
|
|
182
|
+
### 9. `dealer.dealerPlay` 함수 분리 — CQS 위반 자가 정정
|
|
183
|
+
|
|
184
|
+
reviewer (Thread 14): *"이친구를 호출하면 딜러가 몇번 카드를 뽑았을지 횟수를 가져올 것 같이 생겼는데, 안에서는 뽑는 일까지 해버리고있네요."*
|
|
185
|
+
|
|
186
|
+
학생 자가 적용 → `dealerPlay()` + `getDrawCount()` 분리.
|
|
187
|
+
|
|
188
|
+
→ **CQS 정공** = PR #117·#139·#130 (CQS 위반) 결의 *학생 자가 정정* 누적 3+ PR.
|
|
189
|
+
|
|
190
|
+
### 10. `determineGameResult` 명명 정확성
|
|
191
|
+
|
|
192
|
+
reviewer (Thread 15): *"이 메서드는 정말 게임의 결과를 줄 거라 생각했는데, 뭔가 결과가 아니라 다른 걸 주고 있네요."*
|
|
193
|
+
|
|
194
|
+
학생 자가 적용 → `determineGameResult()` 명명.
|
|
195
|
+
|
|
196
|
+
→ **함수 이름 vs 반환 의미 일치** = PR #36·#117·#130 결 합류.
|
|
197
|
+
|
|
198
|
+
### 11. 템플릿 패턴 vs 단순 List 섞기
|
|
199
|
+
|
|
200
|
+
reviewer (Thread 16): *"템플릿을 쓸 필요까지 있었을지 고민해보시면 좋겠네요!"*
|
|
201
|
+
|
|
202
|
+
→ **`pattern-applied-without-need`** 누적 7+ PR 강화. 단순 List 섞기 = 템플릿 패턴 무의미.
|
|
203
|
+
|
|
204
|
+
### 12. 카드 부족 시 새 덱 vs 게임 종료 (카지노 메타포)
|
|
205
|
+
|
|
206
|
+
reviewer (Thread 18):
|
|
207
|
+
|
|
208
|
+
> *"더이상 뽑을 카드가 없다면 에러가 발생하겠어요. 카지노에서 나눠줄 카드가 없다면, 바로 게임장 문 닫고 사람들 내쫓는 것은 자연스러운 일일까요?"*
|
|
209
|
+
|
|
210
|
+
학생 자가 답변 + 적용:
|
|
211
|
+
|
|
212
|
+
> *"더이상 뽑을 카드가 없다면, 게임을 끝내는 것보다 새로운 카드덱을 섞어서 다시 게임을 시작하는게 더좋을 것 같다는 생각이 듭니다."*
|
|
213
|
+
|
|
214
|
+
→ **카지노 메타포 + 우아한 처리** = PR #129·#138 (블랙잭 8 덱 도메인 룰) 결 합류 + *graceful shutdown vs auto-refill* 트레이드오프.
|
|
215
|
+
|
|
216
|
+
**MCP 룰 `card-shortage-handling-strategy` 후보** — *카드 부족 시 처리 (에러 vs 새 덱 vs 종료) 트레이드오프*.
|
|
217
|
+
|
|
218
|
+
### 13. Ace 11 기본 시 4 ace 처리 자가 의문 + 학생 자가 변경
|
|
219
|
+
|
|
220
|
+
§4 인용. 학생 자가 *11 기본 → 1 기본 + 10 추가* 자가 변경 + while 적용:
|
|
221
|
+
|
|
222
|
+
```kotlin
|
|
223
|
+
fun calculateTotalCardScore(): Int {
|
|
224
|
+
var score = hand.getScore()
|
|
225
|
+
var aceCount = countAce()
|
|
226
|
+
while (score + ACE_PLUS_VALUE <= GameResultDecider.BLACKJACK_SCORE && countAce() > DEFAULT_ZERO) {
|
|
227
|
+
score += ACE_PLUS_VALUE
|
|
228
|
+
aceCount--
|
|
229
|
+
}
|
|
230
|
+
return score
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
→ **Ace 1 기본 + while + 10 추가** = PR #20·#64·#110·#28·#125·#147·#82 의 *Ace 11 기본 + while 차감* 안티패턴과 *반대 시점 정공*.
|
|
235
|
+
|
|
236
|
+
다만 *while 사용* — PR #117 (수학적 풀이) / PR #138·#142 (재귀 + tailrec) 와 *반대 시점*. **MCP 룰 `ace-bonus-while-vs-math-vs-recursion` 후보** — *Ace 처리 3 방식 트레이드오프*.
|
|
237
|
+
|
|
238
|
+
### 14. GameResult enum 도메인 vs 메시지 함수 자가 적용
|
|
239
|
+
|
|
240
|
+
reviewer (Thread 17): *"게임 결과를 enum으로 나타내보는 건 어떨까요?"*
|
|
241
|
+
|
|
242
|
+
학생 자가 적용:
|
|
243
|
+
|
|
244
|
+
```kotlin
|
|
245
|
+
enum class GameResult { WIN, LOSE, DRAW }
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
→ **enum 변환 정공** = PR #117·#126·#130·#113·#143 결 합류.
|
|
249
|
+
|
|
250
|
+
### 15. Hand 클래스 자가 추가 — 카드 뭉치 vs 손 카드 분리
|
|
251
|
+
|
|
252
|
+
학생 자가 답변 (Thread 2):
|
|
253
|
+
|
|
254
|
+
> *"Hand라는 클래스를 생성하면서, 결국 ScoreCalculator도 플레이어나 딜러가 손에 들고 있는 카드들의 수를 바탕으로 점수를 계산하기 때문에 생성자를 hand로 변경해주었습니다!"*
|
|
255
|
+
|
|
256
|
+
→ **Hand 분리 (god-object 회피)** = PR #117·#126·#129·#138·#143 결 합류.
|
|
257
|
+
|
|
258
|
+
### 16. CardDistributor 추가 — 카드 분배자 분리
|
|
259
|
+
|
|
260
|
+
학생 자가 적용 — *CardDistributor 객체 추가* (카드 분배 책임).
|
|
261
|
+
|
|
262
|
+
→ **분배자 객체 분리** = *PR #21 (CardPicker 가상 객체) 결의 *반대 시점***. CardDistributor 도 *가상 객체* 위험 (PR #21·#80·#145·#100 결).
|
|
263
|
+
|
|
264
|
+
**MCP 룰 `virtual-object-vs-real-domain` 강화** 누적 8+ PR ⭐⭐⭐.
|
|
265
|
+
|
|
266
|
+
### 17. 모든 18 스레드 학생 자가 답변 + commit SHA + 학생 자가 의견 명시 풍부
|
|
267
|
+
|
|
268
|
+
## 리뷰어 의견 요지
|
|
269
|
+
|
|
270
|
+
- **게임 규칙 = 도메인 vs 컨트롤러**.
|
|
271
|
+
- **Ace 1 기본 + 10 추가 (4 ace 수학적 비교)**.
|
|
272
|
+
- **CardRank.ACE enum 비교 (문자열 비교 X)**.
|
|
273
|
+
- **Card 중복 인스턴스 회피 (Flyweight + private constructor)**.
|
|
274
|
+
- **`cards.allCards.clear()` 코드 예시 시나리오**.
|
|
275
|
+
- **CardsGenerator 테스트 가능성 + Shuffler interface**.
|
|
276
|
+
- **`turn`/`isHit` 이름 의미 모호**.
|
|
277
|
+
- **GameResultDecider 외부 객체 vs Dealer 내부 위치 + 동료 개발자 시점**.
|
|
278
|
+
- **Shape/Rank enum 텍스트 = 도메인 vs 뷰 + 안드로이드 이식**.
|
|
279
|
+
- **MVC 패턴 매몰 vs 객체 이름 집중**.
|
|
280
|
+
- **data class copy 비활성화 (Kotlin 2.0) 외부글**.
|
|
281
|
+
- **Cards 역할 추가 vs 객체 불필요**.
|
|
282
|
+
- **패키지 구조 의식 (model/view/service)**.
|
|
283
|
+
- **`dealerPlay` 함수 분리 (CQS 위반)**.
|
|
284
|
+
- **`determineGameResult` 명명 정확성**.
|
|
285
|
+
- **템플릿 패턴 vs 단순 List 섞기 + Test 코드 위치**.
|
|
286
|
+
- **enum 변환 (GameResult)**.
|
|
287
|
+
- **카드 부족 = 카지노 메타포 (새 덱 vs 종료)**.
|
|
288
|
+
|
|
289
|
+
## 대표 인용
|
|
290
|
+
|
|
291
|
+
> [malibinYun Thread 2]
|
|
292
|
+
> *"ACE 카드가 4장인 경우, `4 * 11 - 3 * 10` 로직을 작성하는 게 적절해보이시나요? 아니면, `4 * 1 + 10` 로직을 작성하는 게 적절해보이시나요?*
|
|
293
|
+
>
|
|
294
|
+
> *일반적으로 ACE는 어떤 게임에서든 1로 계산하기도 하니까요. 다각도로 볼 수 있는 시각을 연습해보세요."*
|
|
295
|
+
|
|
296
|
+
→ **수학적 비교 어휘 + 일반화 어휘** — *모델 자연스러움 = 수학식 단순성*.
|
|
297
|
+
|
|
298
|
+
> [gahyunkim Thread 8]
|
|
299
|
+
> *"객체지향의 사실과 오해를 읽으면서, 객체를 단순히 현실의 사물을 모방하는 존재가 아니라 명확한 역할과 책임을 가진 독립적인 행위자로 바라보게 되었습니다."*
|
|
300
|
+
|
|
301
|
+
→ **학생 「객체지향의 사실과 오해」 자가 인용 + 역할·책임 어휘** — *MCP `oh-my-oop` 핵심 가치 정점*.
|
|
302
|
+
|
|
303
|
+
> [malibinYun Thread 10]
|
|
304
|
+
> *"MVC 패턴이라 Service 라는 이름을 붙이신거라면, 거기에 벗어나서 객체의 이름을 짓는 데 집중해보세요."*
|
|
305
|
+
|
|
306
|
+
→ **패턴 매몰 vs 객체 이름 집중** — *MCP `pattern-applied-without-need` 강화*.
|
|
307
|
+
|
|
308
|
+
> [malibinYun Thread 11]
|
|
309
|
+
> *"글쎄요~ data class 도 이제는 copy의 영향을 받지 않도록 구성해볼 수 있지요. 코틀린 언어의 버전 업데이트가 있을 떄 어떤 변화점이 생겼는지 관심을 가져보셔도 좋겠어요 :)"*
|
|
310
|
+
|
|
311
|
+
→ **Kotlin 버전 업데이트 학습 권유** — *Kotlin 어휘 깊이 권유*.
|
|
312
|
+
|
|
313
|
+
> [malibinYun Thread 18]
|
|
314
|
+
> *"더이상 뽑을 카드가 없다면 에러가 발생하겠어요. 카지노에서 나눠줄 카드가 없다면, 바로 게임장 문 닫고 사람들 내쫓는 것은 자연스러운 일일까요?"*
|
|
315
|
+
|
|
316
|
+
→ **카지노 메타포 + graceful shutdown 어휘**.
|
|
317
|
+
|
|
318
|
+
## 얻은 교훈 (보편)
|
|
319
|
+
|
|
320
|
+
1. **수학적 비교 어휘 (4*11-3*10 vs 4*1+10)** — *모델 자연스러움 = 수학식 단순성*. **MCP 룰 `mathematical-naturalness-as-model-criterion` 후보**.
|
|
321
|
+
|
|
322
|
+
2. **「객체지향의 사실과 오해」 학생 자가 인용** — *MCP `oh-my-oop` 핵심 가치 정점*.
|
|
323
|
+
|
|
324
|
+
3. **Flyweight 패턴 학생 자가 학습** — **MCP 룰 `flyweight-pattern-card-caching` 후보**.
|
|
325
|
+
|
|
326
|
+
4. **reviewer 문제 시나리오 코드 예시** — **MCP 룰 `reviewer-scenario-code-example` 후보**.
|
|
327
|
+
|
|
328
|
+
5. **MVC 패턴 매몰 vs 객체 이름 집중** — *PR #126 (MVC 원칙) 반대 시점*. **MCP 룰 `pattern-vs-object-naming-priority` 후보**.
|
|
329
|
+
|
|
330
|
+
6. **Kotlin 버전 업데이트 자가 학습 + data class copy 비활성화** — **MCP 룰 `kotlin-version-feature-learning` 후보**.
|
|
331
|
+
|
|
332
|
+
7. **카드 부족 카지노 메타포 (graceful vs 종료)** — **MCP 룰 `card-shortage-handling-strategy` 후보**.
|
|
333
|
+
|
|
334
|
+
8. **현실 메타포 vs SRP 트레이드오프** — **MCP 룰 `metaphor-fidelity-vs-srp-tradeoff` 후보**.
|
|
335
|
+
|
|
336
|
+
9. **reviewer 다년 활동 (말리빈 2024 → 2025)** — **MCP 룰 `multi-year-reviewer-activity` 후보**.
|
|
337
|
+
|
|
338
|
+
10. **Ace 처리 3 방식 (while vs math vs recursion)** — **MCP 룰 `ace-bonus-while-vs-math-vs-recursion` 후보**.
|
|
339
|
+
|
|
340
|
+
11. **CQS 위반 자가 정정** — *PR #117·#139 결의 *재발* → PR #118 *자가 정정**.
|
|
341
|
+
|
|
342
|
+
12. **함수 이름 vs 반환 의미 일치** — 누적 7+ PR.
|
|
343
|
+
|
|
344
|
+
13. **interface-for-test-substitution** — 누적 7+ PR.
|
|
345
|
+
|
|
346
|
+
14. **virtual-object-vs-real-domain (CardDistributor)** — 누적 8+ PR.
|
|
347
|
+
|
|
348
|
+
15. **모든 18 스레드 학생 자가 답변 + commit SHA + 자가 의견 명시** — *2025 코호트 10 PR 정점 유지*.
|
|
349
|
+
|
|
350
|
+
## 얻은 교훈 (도메인)
|
|
351
|
+
|
|
352
|
+
1. **Ace 1 기본 + while + 10 추가** — *Ace 1 기본 모델 정공* (PR #36 결).
|
|
353
|
+
|
|
354
|
+
2. **카드 부족 = 새 덱 추가 (graceful)** — *카지노 메타포 정합*.
|
|
355
|
+
|
|
356
|
+
3. **블랙잭 결과 enum (WIN/LOSE/DRAW)** — *기본 3 멤버*. PR #129·#126·#113 결.
|
|
357
|
+
|
|
358
|
+
4. **52 카드 캐싱 (Flyweight)** — *학생 자가 학습*.
|
|
359
|
+
|
|
360
|
+
## MCP 룰 후보 신규 + 강화 (PR #118)
|
|
361
|
+
|
|
362
|
+
| 룰 | 신규 / 강화 | 누적 PR |
|
|
363
|
+
|---|---|---|
|
|
364
|
+
| `mathematical-naturalness-as-model-criterion` | 신규 | 1 (#118) |
|
|
365
|
+
| `flyweight-pattern-card-caching` | 신규 | 1 (#118) |
|
|
366
|
+
| `reviewer-scenario-code-example` | 신규 | 1 (#118) |
|
|
367
|
+
| `pattern-vs-object-naming-priority` | 신규 | 1 (#118) |
|
|
368
|
+
| `kotlin-version-feature-learning` | 신규 | 1 (#118) |
|
|
369
|
+
| `card-shortage-handling-strategy` | 신규 | 1 (#118) |
|
|
370
|
+
| `metaphor-fidelity-vs-srp-tradeoff` | 신규 | 1 (#118) |
|
|
371
|
+
| `multi-year-reviewer-activity` | 신규 | 1 (#118) |
|
|
372
|
+
| `ace-bonus-while-vs-math-vs-recursion` | 신규 | 1 (#118) |
|
|
373
|
+
| `pattern-applied-without-need` | 강화 | 7+ |
|
|
374
|
+
| `virtual-object-vs-real-domain` | 강화 | 8+ ⭐⭐⭐ |
|
|
375
|
+
| `interface-for-test-substitution` | 강화 | 7+ |
|
|
376
|
+
| `model-view-dependency-direction` | 강화 | 12+ ⭐⭐⭐ |
|
|
377
|
+
| `command-query-separation` | 강화 | 3+ |
|
|
378
|
+
| `function-name-vs-return-semantic-mismatch` | 강화 | 7+ |
|
|
379
|
+
|
|
380
|
+
## 메타 어휘 (15 reviewer? + MCP 핵심 가치 합류 정점)
|
|
381
|
+
|
|
382
|
+
- ***말리빈 (malibinYun) 2024 → 2025 reviewer 다년 활동*** — **MCP `multi-year-reviewer-activity` 신규 메타 케이스**.
|
|
383
|
+
- ***수학적 비교 어휘 (4*11-3*10 vs 4*1+10)*** — malibinYun PR #118 — *모델 자연스러움 = 수학식 단순성*.
|
|
384
|
+
- ***학생 「객체지향의 사실과 오해」 자가 인용*** — gahyunkim PR #118 — *MCP `oh-my-oop` 핵심 가치 정점 학생 자가 인용*.
|
|
385
|
+
- ***MVC 패턴 매몰 vs 객체 이름 집중*** — malibinYun PR #118 — *PR #126 (MVC 원칙) 반대 시점*.
|
|
386
|
+
- ***reviewer 문제 시나리오 코드 예시*** — malibinYun PR #118 — *학생 자가 답변 유도*.
|
|
387
|
+
- ***Kotlin 버전 업데이트 학습 권유*** — malibinYun PR #118.
|
|
388
|
+
- ***카지노 메타포 (graceful shutdown)*** — malibinYun PR #118.
|
|
389
|
+
|
|
390
|
+
→ **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지** (말리빈 = 기존 reviewer 다년 활동). **2025 코호트 10 PR 코퍼스 정점 도달**.
|
|
391
|
+
|
|
392
|
+
## 비교 (말리빈 2024 reviewer 시기 vs 2025 reviewer 시기)
|
|
393
|
+
|
|
394
|
+
- **2024 reviewer (PR #32 krrong 학생 시기 등)**: *"개발에 옳고 그름은 없고, 장단점만이 있는 세계"* + *재구현 권유* + *외부 글*. PR #95·#23·#26 등.
|
|
395
|
+
- **2025 reviewer (PR #118 gahyunkim)**: *수학적 비교 어휘 (4*11-3*10)* + *MVC 패턴 매몰 회피* + *Kotlin 2.0 학습 권유* + *카지노 메타포*.
|
|
396
|
+
|
|
397
|
+
→ **말리빈 어휘 진화** — *2024 어휘 (트레이드오프) + 2025 어휘 (수학적 비교 + 메타 학습)*. **MCP 핵심 가치 정점 어휘 유지 + Kotlin 어휘 진화**.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# PR #141 — [블랙잭 2단계] 조이 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@gahyunkim](https://github.com/gahyunkim)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/141
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** [@malibinYun](https://github.com/malibinYun) (말리빈) — 1단계 #118 동일 reviewer (2024→2025 다년 활동)
|
|
7
|
+
- **라인 코멘트:** 21 스레드 — *PR 본문 *MVC보다 객체 어떤 내용* 학생 자가 학습 의식 + 학생 자가 답변 + commit SHA + 자가 의견 명시 풍부 + tailrec 자가 적용 + 테스트 카드 스텁 (`SPADE_ACE`) + ScoreCalculator → Hand 응집 + GameResultDecider → GameResult.companion 이동 (PR #142 결) + 일급 컬렉션 (GameResults, ProfitResult, PlayersResult) + var decisionMaker 람다 분리 학생/reviewer 양방향*
|
|
8
|
+
- **양 단계 완성 reviewee** (1단계 #118 batch 21 분석 완료 + 2단계 #141 = batch 22 추가).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 자가 학습 의식 + *MVC 보다 객체 어떤 내용*
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"말리빈! 2단계 미션도 열심히 구현해봤습니다! 아직 많이 부족한 부분도 많지만, 일단은 2단계 리뷰를 통해서 더 많은 리뷰를 받고싶어서 보냅니다! MVC보다는 각 객체에 어떤 내용이 들어가는 게 좋을 지 고민을 해보았습니다."*
|
|
17
|
+
|
|
18
|
+
→ **PR #118 reviewer 어휘 자가 적용** = *말리빈 1단계 *MVC 패턴 매몰 X* 어휘 → 학생 자가 학습 시점 정공*. **MCP `pattern-vs-object-naming-priority` 강화** 누적 2+ PR (#118·#141).
|
|
19
|
+
|
|
20
|
+
### 2. tailrec 학생 자가 적용 + while → 재귀 변경
|
|
21
|
+
|
|
22
|
+
reviewer (Thread 3):
|
|
23
|
+
|
|
24
|
+
> *"또, 어려운 내용일 수 있지만 재귀함수를 활용해서 게임을 실행시켜보셔도 좋겠어요. tailrec 키워드를 함께 알아보세요!*
|
|
25
|
+
>
|
|
26
|
+
> *어딘가에 while문으로 동작하고 있는 부분들이 보이는데, 그 조건대로 무언가를 행동하는건 그 객체의 역할일지, 게임 룰의 역할일지도 고민해보세요!"*
|
|
27
|
+
|
|
28
|
+
학생 자가 적용. → **tailrec 자가 학습** 누적 4+ PR (#138·#142·#140·#141) ⭐⭐.
|
|
29
|
+
|
|
30
|
+
### 3. 테스트 카드 스텁 (`SPADE_ACE = Card.of(...)`)
|
|
31
|
+
|
|
32
|
+
reviewer (Thread 8):
|
|
33
|
+
|
|
34
|
+
> *"테스트에 필요한 카드를 매번 만들어내는 건 매우 귀찮은 일이지요. 미리 카드 스텁을 테스트 패키지에 만들어 두고 재활용해보는건 어떨까요?*
|
|
35
|
+
> ```kotlin
|
|
36
|
+
> val SPADE_ACE = Card.of(...)
|
|
37
|
+
> ```"
|
|
38
|
+
|
|
39
|
+
학생 자가 적용 — *카드 스텁을 테스트 패키지에 구현 + 적용 commit*.
|
|
40
|
+
|
|
41
|
+
→ **테스트 fixture 재사용** = PR #21 (test-fixture-essential-info), PR #126·#130 (test-fixture-secondary-constructor) 결 합류. **MCP 룰 `test-fixture-stub-reuse` 후보** — *카드 스텁 = 테스트 패키지 재사용*.
|
|
42
|
+
|
|
43
|
+
### 4. ScoreCalculator → Hand 응집 + 객체 책임 분리
|
|
44
|
+
|
|
45
|
+
reviewer (Thread 12):
|
|
46
|
+
|
|
47
|
+
> *"ScoreCalculator 이 객체가 하는 일을 여기에 결합시키지 않고, 응집시켜보는 건 어떨까요?"*
|
|
48
|
+
|
|
49
|
+
학생 자가 적용:
|
|
50
|
+
|
|
51
|
+
> *"Hand 자체가 Player나 Dealer가 뽑은 카드를 가지고 있기 때문에 여기서 계산해주는 것이 오히려 더 좋을 것 같습니다! ScoreCalculator를 없애고 Hand 내에서 Ace가 포함되었을때까지의 값을 모두 계산할 수 있도록 구현해주었습니다."*
|
|
52
|
+
|
|
53
|
+
→ **god-object 회피 + Hand 책임 응집** = PR #117 (stateless-class-vs-companion-object) + PR #142 결의 *반대 시점 (외부 객체 vs 응집)*. **MCP 룰 `cohesion-vs-separation-tradeoff` 후보**.
|
|
54
|
+
|
|
55
|
+
### 5. GameResultDecider → GameResult.companion 이동 (PR #142 결)
|
|
56
|
+
|
|
57
|
+
reviewer (Thread 5):
|
|
58
|
+
|
|
59
|
+
> *"이 객체가 하는 일은 GameResult 에 옮겨볼 수도 있겠다는 생각이 드네요. 로또 결과를 계산했듯이요!"*
|
|
60
|
+
|
|
61
|
+
학생 자가 적용: `GameResultDecider` 삭제 + `GameResult.companion object` 함수 이동.
|
|
62
|
+
|
|
63
|
+
→ **enum 책임 강화 + 외부 객체 제거** = PR #142 (GameResult.cashOut) + PR #143 (ProfitRate.calculateProfitRate) 결 합류.
|
|
64
|
+
|
|
65
|
+
### 6. 일급 컬렉션 (GameResults, PlayersResult, ProfitResult)
|
|
66
|
+
|
|
67
|
+
reviewer (Thread 13):
|
|
68
|
+
|
|
69
|
+
> *"게임의 결과를 나타내는 일급 컬렉션을 만들고, 그 객체에 어울리는 역할을 부여해보는 건 어떨까요? 또, 그 게임의 결과를 담는 객체는 어느 객체에서 반환하면 좋을지 충분히 고민해보세요."*
|
|
70
|
+
|
|
71
|
+
학생 자가 적용:
|
|
72
|
+
|
|
73
|
+
> *"전체 플레이어와 딜러의 수익을 담은 ProfitResult 클래스, 플레이어들의 모든 수익을 담은 PlayersResult를 만들어서 해당하는 클래스를 이용할 수 있도록 구현해주었습니다!*
|
|
74
|
+
> *- PlayersResult: Map<Player, Money>를 만들어서 플레이어들의 수익을 담아주는 클래스*
|
|
75
|
+
> *- ProfitResult: 전체 플레이어들의 수익과 딜러의 수익을 담은 클래스 구현"*
|
|
76
|
+
|
|
77
|
+
→ **일급 컬렉션 + 책임 명확** = PR #142 (Scoreboard), PR #143 (ProfitInfo) 결 합류.
|
|
78
|
+
|
|
79
|
+
### 7. ACE 카드 존재 파악 Hand.isAceExist() 자가 적용
|
|
80
|
+
|
|
81
|
+
reviewer (Thread 2):
|
|
82
|
+
|
|
83
|
+
> *"Hand 객체의 값을 꺼내 비교하기보다, Hand에게 메시지를 던져 물어보도록 구성해보는 건 어떨까요?"*
|
|
84
|
+
|
|
85
|
+
학생 자가 적용:
|
|
86
|
+
|
|
87
|
+
> *"hand 객체 내에서 값을 확인해서 메시지를 던질 수 있도록 isAceExist()를 hand 객체 내에서 관리할 수 있도록 해주었습니다!"*
|
|
88
|
+
|
|
89
|
+
→ **Tell-Don't-Ask 정공** = PR #87·#129·#138 결.
|
|
90
|
+
|
|
91
|
+
### 8. 추가 칭찬 + 모든 21 스레드 학생 자가 답변 + commit SHA
|
|
92
|
+
|
|
93
|
+
## 못한 점 (설계 관점)
|
|
94
|
+
|
|
95
|
+
### 1. 카드 부족 시 예외 처리 + 랜덤 분리 (PR #118 1단계 결 진화)
|
|
96
|
+
|
|
97
|
+
reviewer (Thread 1):
|
|
98
|
+
|
|
99
|
+
> *"남아있는 카드가 1장일 때 2장을 뽑으면 어떤 일이 발생할까요? 또, 랜덤에 대한 테스트가 불가능한 구조가 되었어요. 어떻게하면 랜덤에 대한 요소를 분리해서 테스트 가능하도록 만들 수 있을까요?"*
|
|
100
|
+
|
|
101
|
+
학생 자가 적용: *TestCardGenerator 분리 + 카드 부족 예외 처리*.
|
|
102
|
+
|
|
103
|
+
→ **카드 부족 시 graceful 처리** = PR #118 (1단계 카지노 메타포 새 덱) 와 *반대 시점 (예외 처리)*. **MCP 룰 `card-shortage-handling-strategy` 강화** 누적 2+ PR (#118·#141).
|
|
104
|
+
|
|
105
|
+
### 2. var decisionMaker 람다 분리 — 학생/reviewer 양방향 (Thread 7·9)
|
|
106
|
+
|
|
107
|
+
reviewer (Thread 7): *"플레이어까지 람다로 전달할 필요는 없다고 생각해요. 여기에는 람다로 전달하지 않고 구성해보는 건 어떨까요?"*
|
|
108
|
+
|
|
109
|
+
학생 자가 적용 (`var decisionMaker`):
|
|
110
|
+
|
|
111
|
+
```kotlin
|
|
112
|
+
class Player {
|
|
113
|
+
var decisionMaker: ... // ← var + 외부 할당
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
reviewer 자가 후속 (Thread 9):
|
|
118
|
+
|
|
119
|
+
> *"다른 개발자들은 이 변수를 외부에서 꼭 할당해야한다는 사실을 바로 알 수 있을까요? (...) 플레이어에게 람다를 전달하고 있는 것은 달라지지 않았어요. 플레이어 객체 안에서 람다를 사용하지 않도록 구현해보시면 좋겠어요 :)"*
|
|
120
|
+
|
|
121
|
+
→ **var + 외부 할당 = 호출 순서 invariant 부재** = PR #139·#142·#118 (lateinit/var) 결 합류. **MCP 룰 `lateinit-var-call-order-invariant` 강화** 누적 11+ PR.
|
|
122
|
+
|
|
123
|
+
reviewer 후속 = *학생 자가 적용이 *본질적 변경 X (람다만 var 로 옮김)* 명시*. **MCP 룰 `superficial-refactoring-vs-essential-change` 후보** — *표면 리팩토링 vs 본질 변경*.
|
|
124
|
+
|
|
125
|
+
### 3. ProfitCalculator → 매핑 중복 제거 (Thread 10)
|
|
126
|
+
|
|
127
|
+
reviewer: *"playerResult.result.profitRate로 접근 하는 것과 어떤 차이가 있었나요?"*
|
|
128
|
+
|
|
129
|
+
학생: *"playerResult.result.profitRate로 바로 접근할 수 있었는데 불필요하게 중복된 매핑을 하고 있었던 것 같습니다!"*
|
|
130
|
+
|
|
131
|
+
→ **불필요한 추상화 자가 인지** = PR #117 (function-decomposition-creates-identity) 결 합류.
|
|
132
|
+
|
|
133
|
+
### 4. Money.toInt() 불필요 - 직접 amount 접근
|
|
134
|
+
|
|
135
|
+
reviewer (Thread 11): *"money 의 amount를 접근하지 않고 이 함수를 만든 이유는 무엇인가요?"*
|
|
136
|
+
|
|
137
|
+
학생 자가 적용: *toInt() 제거*.
|
|
138
|
+
|
|
139
|
+
→ **불필요한 함수 = 직접 접근** 학생 자가 학습.
|
|
140
|
+
|
|
141
|
+
### 5. Players 객체 메시지 전달 (Thread 3)
|
|
142
|
+
|
|
143
|
+
reviewer: *"foreach를 써볼 수도 있지만, players 객체에게 모든 플레이어 플레이하라는 메시지를 던져보는 건 어떨까요?"*
|
|
144
|
+
|
|
145
|
+
→ **Tell-Don't-Ask + 일급 컬렉션 자가 행동** = PR #129·#138·#142·#140 결 합류.
|
|
146
|
+
|
|
147
|
+
### 6. 게임 룰 위치 자가 의문 (Thread 3 reviewer 메타 어휘)
|
|
148
|
+
|
|
149
|
+
reviewer:
|
|
150
|
+
|
|
151
|
+
> *"어딘가에 while문으로 동작하고 있는 부분들이 보이는데, 그 조건대로 무언가를 행동하는건 그 객체의 역할일지, 게임 룰의 역할일지도 고민해보세요!"*
|
|
152
|
+
|
|
153
|
+
→ **객체 역할 vs 게임 룰 위치 어휘** = PR #126·#129·#143 (business-logic-vs-controller-logic) 결 합류.
|
|
154
|
+
|
|
155
|
+
## 대표 인용
|
|
156
|
+
|
|
157
|
+
> [gahyunkim PR 본문]
|
|
158
|
+
> *"MVC보다는 각 객체에 어떤 내용이 들어가는 게 좋을 지 고민을 해보았습니다."*
|
|
159
|
+
|
|
160
|
+
→ **PR #118 reviewer 어휘 학생 자가 적용** — *말리빈 *MVC 매몰 X* → 학생 자가 학습*.
|
|
161
|
+
|
|
162
|
+
> [malibinYun Thread 9]
|
|
163
|
+
> *"플레이어에게 람다를 전달하고 있는 것은 달라지지 않았어요. 플레이어 객체 안에서 람다를 사용하지 않도록 구현해보시면 좋겠어요 :)"*
|
|
164
|
+
|
|
165
|
+
→ **표면 리팩토링 vs 본질 변경 어휘**.
|
|
166
|
+
|
|
167
|
+
> [malibinYun Thread 8]
|
|
168
|
+
> *"테스트에 필요한 카드를 매번 만들어내는 건 매우 귀찮은 일이지요. 미리 카드 스텁을 테스트 패키지에 만들어 두고 재활용해보는건 어떨까요?"*
|
|
169
|
+
|
|
170
|
+
→ **테스트 카드 스텁 재사용 어휘**.
|
|
171
|
+
|
|
172
|
+
## 얻은 교훈 (보편)
|
|
173
|
+
|
|
174
|
+
1. **MVC 매몰 X 학생 자가 학습 (PR #118 reviewer 어휘 적용)** — **MCP 룰 `pattern-vs-object-naming-priority` 강화** 누적 2+ PR.
|
|
175
|
+
|
|
176
|
+
2. **tailrec 자가 학습 + while → 재귀** — 누적 4+ PR.
|
|
177
|
+
|
|
178
|
+
3. **테스트 카드 스텁 재사용** — **MCP 룰 `test-fixture-stub-reuse` 후보**.
|
|
179
|
+
|
|
180
|
+
4. **god-object 회피 + Hand 응집 (ScoreCalculator 제거)** — **MCP 룰 `cohesion-vs-separation-tradeoff` 후보**.
|
|
181
|
+
|
|
182
|
+
5. **외부 객체 제거 + enum 책임 강화 (GameResultDecider → GameResult.companion)** = PR #142·#143 결 합류.
|
|
183
|
+
|
|
184
|
+
6. **일급 컬렉션 (PlayersResult, ProfitResult, GameResults)** = PR #142·#143 결.
|
|
185
|
+
|
|
186
|
+
7. **`var decisionMaker` 표면 리팩토링 자가 적용 + reviewer 자가 정정 (본질 변경 X)** — **MCP 룰 `superficial-refactoring-vs-essential-change` 후보**.
|
|
187
|
+
|
|
188
|
+
8. **객체 역할 vs 게임 룰 위치** — PR #126·#129·#143 결.
|
|
189
|
+
|
|
190
|
+
9. **불필요한 추상화 자가 인지** (PR #117 결 합류).
|
|
191
|
+
|
|
192
|
+
10. **모든 21 스레드 학생 자가 답변 + commit SHA** — 2025 코호트 정점 유지.
|
|
193
|
+
|
|
194
|
+
## MCP 룰 후보 신규 + 강화 (PR #141)
|
|
195
|
+
|
|
196
|
+
| 룰 | 신규 / 강화 | 누적 PR |
|
|
197
|
+
|---|---|---|
|
|
198
|
+
| `pattern-vs-object-naming-priority` | 강화 | 2+ (#118·#141) |
|
|
199
|
+
| `tailrec-optimization-applicability` | 강화 | 4+ |
|
|
200
|
+
| `test-fixture-stub-reuse` | 신규 | 1 (#141) |
|
|
201
|
+
| `cohesion-vs-separation-tradeoff` | 신규 | 1 (#141) |
|
|
202
|
+
| `superficial-refactoring-vs-essential-change` | 신규 | 1 (#141) |
|
|
203
|
+
| `card-shortage-handling-strategy` | 강화 | 2+ (#118·#141) |
|
|
204
|
+
| `lateinit-var-call-order-invariant` | 강화 | 11+ |
|
|
205
|
+
| `result-aggregation-locator` | 강화 | 4+ |
|
|
206
|
+
|
|
207
|
+
## 비교 (PR #118 → #141)
|
|
208
|
+
|
|
209
|
+
- **1단계 #118 18 thread → 2단계 #141 21 thread**.
|
|
210
|
+
- **1단계 #118 *MVC 매몰 X* 어휘 → 2단계 #141 PR 본문 학생 자가 *MVC 보다 객체 내용 고민***.
|
|
211
|
+
- **1단계 #118 Flyweight 패턴 자가 학습 → 2단계 #141 Hand 응집 + ScoreCalculator 제거**.
|
|
212
|
+
- **1단계 #118 GameResultDecider → 2단계 #141 GameResult.companion 이동**.
|
|
213
|
+
- **2단계 #141 var decisionMaker 표면 리팩토링 → reviewer 자가 정정 (본질 변경 X)**.
|
|
214
|
+
|
|
215
|
+
→ *진화 = 학생 자가 학습 시간성 + reviewer 어휘 자가 흡수 + 표면 vs 본질 차이 학습*.
|