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,189 @@
|
|
|
1
|
+
# PR #43 — [블랙잭 2단계] 스캇 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@chws0508](https://github.com/chws0508)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/43
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** @namjackson (잭슨)
|
|
7
|
+
- **라인 코멘트:** 10 스레드 — *학생 자가 책임 위치 매우 깊은 의문* + *1단계 권고 적극 반영 (Score, 상태 패턴, sealed class)*
|
|
8
|
+
- **양 단계 분석 reviewee** (1단계 #26 별도). 학생 자가 진화 모범.
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
- **1단계 권고 적극 반영 + 상태 패턴 자가 도입** — 학생 자가 답변: *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"* (1단계의 Player 스코어 분기 깊이 → 2단계 상태 패턴 자가 적용). 잭슨 칭찬: *"상태 패턴을 활용해주셨네요 👍 👍"* / *"sealed class 👍"*. **PR #39 (rhthrhrl0 상태 패턴 처음 자가 학습) / PR #98 (chaehyuns 상태 패턴 시도) 결**.
|
|
13
|
+
- **학생 자가 책임 위치 매우 깊은 의문** — *"게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."* — **학생이 *4 후보 명시 + reviewer 의 책임 기준 자가 의문* 모범**. PR #128·#135·#108·#133·#136·#137·#148·#151·#98·#95·#99·#23 와 같은 결.
|
|
14
|
+
- **잭슨 자가 한계 인정 + 책임 위치 트레이드오프 명시** — *"GameResultType에게 승패를 결정하는 책임을 주었는데, GameResultType에는 결국 playerScoreState와 dealerScoreState를 모두 알아야한다는 단점또한 생기는것 같아요. 승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"* — **MCP `oop_propose_alternatives` 어휘와 일치**. PR #95 (말리빈 *"옳고 그름 없고 장단점만"*) / PR #23 (말리빈 *"제 개인적인 의견입니다"*) / PR #26 (잭슨 *"개인적인 의견이니 참고만"*) 결.
|
|
15
|
+
- **suggestion 블록 활용 2회** — `cardDeck.shuffled()[0]` → `cardDeck.shuffled().first()` / when 분기 직접 비교 코드 suggestion. PR #26 (잭슨 *given-when-then + expression body*) 결.
|
|
16
|
+
- **학생 자가 잘못된 가정 자가 인정** — *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"* — **학생 자가 잘못된 가정 자가 인정 + Kotlin 어휘 자가 학습**. PR #23 1단계의 *else 지양 극단 적용* / PR #146 *YAGNI 자가 인정* 결.
|
|
17
|
+
- **interface 프로퍼티 자가 학습 권고** — 잭슨: *"코틀린에서 인터페이스에서는 프로퍼티도 선언할수 있어요 😄 필요에 따라서, 함수대신 프로퍼티도 사용할수 있습니당!"*. **Kotlin 어휘 (interface property) 자가 학습** — PR #98·#99·#146·#137 의 *Kotlin 어휘 학습* 결.
|
|
18
|
+
|
|
19
|
+
## 못한 점 (설계 관점)
|
|
20
|
+
|
|
21
|
+
### 1. `compareScoreValue` 점수 차이 계산 → 직접 비교 권고
|
|
22
|
+
|
|
23
|
+
잭슨 suggestion:
|
|
24
|
+
|
|
25
|
+
```kotlin
|
|
26
|
+
fun compareScoreValue(dealerScoreValue: Int, playerScoreValue: Int): GameResultType {
|
|
27
|
+
return when {
|
|
28
|
+
playerScoreValue > dealerScoreValue -> WIN
|
|
29
|
+
dealerScoreValue < playerScoreValue -> LOSE
|
|
30
|
+
else -> DRAW
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
잭슨 진단: *"점수차이를 계산하신 이유가 있나욤? 그냥 크기를 비교해주는게 좀더 직관력이 있지않을까욤?"*
|
|
36
|
+
|
|
37
|
+
학생: *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"*
|
|
38
|
+
|
|
39
|
+
→ **3 가지 학습**:
|
|
40
|
+
|
|
41
|
+
#### 1.1. *`when (값)` vs `when { 조건 }` 두 형태*
|
|
42
|
+
|
|
43
|
+
- *`when (x) { 1 -> ..., 2 -> ... }`* — *값 매칭*. 학생 *잘못된 가정 (소괄호 필수)*.
|
|
44
|
+
- *`when { x > y -> ..., x < y -> ... }`* — *조건 매칭 (if-else-if chain 대체)*. **Kotlin 의 강력한 어휘**.
|
|
45
|
+
|
|
46
|
+
#### 1.2. *점수 차이 vs 직접 비교*
|
|
47
|
+
|
|
48
|
+
- *점수 차이 (`dealer - player`) → 부호 검사* = *우회 + 직관성 ↓*.
|
|
49
|
+
- *직접 비교 (`>`, `<`, `==`) → enum 결과* = *직관 + 단순*.
|
|
50
|
+
|
|
51
|
+
#### 1.3. *학생 자가 잘못된 가정 자가 인정 모범*
|
|
52
|
+
|
|
53
|
+
**Kotlin 어휘 학습 갭 자가 노출 = 학습 가시화 모범**. PR #23 (멘델 *else 지양 극단*) / PR #146 (yrsel *YAGNI 자가 인정*) 결.
|
|
54
|
+
|
|
55
|
+
### 2. `GameResultType` 책임 위치 — 학생 자가 매우 깊은 의문
|
|
56
|
+
|
|
57
|
+
잭슨 메타 진단:
|
|
58
|
+
|
|
59
|
+
> *"GameResultType에게 승패를 결정하는 책임을 주었는데, GameResultType에는 결국 playerScoreState와 dealerScoreState를 모두 알아야한다는 단점또한 생기는것 같아요. 승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"*
|
|
60
|
+
|
|
61
|
+
학생 자가 매우 깊은 의문:
|
|
62
|
+
|
|
63
|
+
> *"이 부분이 상당히 어려운 것 같습니다 ㅠㅠ 게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."*
|
|
64
|
+
|
|
65
|
+
→ **5 가지 학습**:
|
|
66
|
+
|
|
67
|
+
#### 2.1. *책임 위치 = 4 후보*
|
|
68
|
+
|
|
69
|
+
학생 자가 명시:
|
|
70
|
+
- (A) **Player** — 플레이어가 자기 승패 판단.
|
|
71
|
+
- (B) **BlackJackGame** — 게임이 승패 판단 (god-object 위험).
|
|
72
|
+
- (C) **GameResultType (enum)** — *enum 이 행동 가짐 = OOP 함정 (enum 만능)*.
|
|
73
|
+
- (D) **별도 객체 (예: Judge / Referee)** — *심판 객체 분리*.
|
|
74
|
+
- (E, 학생 선택) **State** — *상태가 자기 승패 결정 (다형성)*.
|
|
75
|
+
|
|
76
|
+
PR #74 (송핑크 *Referee 자가 토론*) / PR #23 1단계 (멘델 *3 후보 + 그림*) / PR #70·#98 (chaehyuns *Judge 분리*) 결.
|
|
77
|
+
|
|
78
|
+
#### 2.2. *enum에 행동 부여 = 양가성*
|
|
79
|
+
|
|
80
|
+
- *enum + 행동* = *Kotlin 어휘 풍부 + 멤버별 분기 캡슐화*. PR #137·#148·#90·#146 의 *enum + when exhaustive* 결.
|
|
81
|
+
- *그러나 enum 이 *다른 객체 (Player, Dealer) 의 내부 상태* 까지 알아야 한다면* = *책임 누수*.
|
|
82
|
+
|
|
83
|
+
#### 2.3. *State 패턴 = 다형성 디스패치*
|
|
84
|
+
|
|
85
|
+
- *각 State (BlackJack, Bust, Hit, Stay) 가 자기 승패 결정 메서드*.
|
|
86
|
+
- *외부는 `state.compareTo(other)` 만 호출* → *enum 분기 제거*.
|
|
87
|
+
|
|
88
|
+
PR #93·#136·#152 의 *State.compareTo: GameResult 다형성* 결.
|
|
89
|
+
|
|
90
|
+
#### 2.4. *책임 기준 자가 의문 모범*
|
|
91
|
+
|
|
92
|
+
학생의 *"리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다"* — **reviewer 의 *책임 기준* 자가 의문**. *학생이 *경험/규칙* 을 묻는 것이 아니라 *판단 기준* 을 묻는 것* = **메타 학습 자가 명시**.
|
|
93
|
+
|
|
94
|
+
#### 2.5. *"정답은 없는거니, 고민만해주셔도 좋아요"* — reviewer 메타 어휘
|
|
95
|
+
|
|
96
|
+
잭슨의 *"정답은 없는거니"* — **MCP `oh-my-oop` 의 핵심 가치**. PR #95 (말리빈 *"옳고 그름 없고 장단점만"*) / PR #23·#26 결.
|
|
97
|
+
|
|
98
|
+
### 3. `Player 스코어 분기 깊이` → 상태 패턴 자가 적용
|
|
99
|
+
|
|
100
|
+
잭슨 진단: *"Player의 스코어 별로 분기처리를 해주어서, 각 스코어별 케이스가 나누어졌지만, 반면에, 결국 뎁스가 깊어져서, 한번에 승패로직을 파악하기는 힘들수도 있다고 생각이 들어요!"*
|
|
101
|
+
|
|
102
|
+
학생: *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"*
|
|
103
|
+
|
|
104
|
+
→ **`if-else 분기 깊이 < State 다형성`**:
|
|
105
|
+
- *if-else N 단 분기* = *읽기 힘듦 + 변경 시 N 곳 모두 수정*.
|
|
106
|
+
- *State 객체 N 개* = *각 객체에 분기 책임 분산 + 새 상태 추가 시 새 State 클래스 1개*.
|
|
107
|
+
|
|
108
|
+
PR #98 (chaehyuns 상태 패턴 시도) / PR #39 (rhthrhrl0 상태 패턴 처음) / PR #93·#136·#152·#90 의 *State 정공* 결.
|
|
109
|
+
|
|
110
|
+
### 4. `shuffled()[0]` → `shuffled().first()`
|
|
111
|
+
|
|
112
|
+
잭슨 suggestion: `return cardDeck.shuffled().first()`
|
|
113
|
+
|
|
114
|
+
→ **Kotlin 어휘 (.first())** — *`[0]`* (배열 인덱스) < *`.first()`* (의도 명시). *비어있을 때 `NoSuchElementException` 명시 + 의도 가독성*.
|
|
115
|
+
|
|
116
|
+
### 5. `Controller god-object` — `BlackJack.runGame()` 결과 반환
|
|
117
|
+
|
|
118
|
+
잭슨: *"게임시작시 , 플레이어 턴 -> 딜러턴 의 게임을 통해서 결과를 리턴하는 부분은 BlackJack 클래스내에서 관리하는 책임이 아닐까요? 컨트롤러에서는 blackJackGame 게임을 실행시키고, 결과만 받아오면 어떨까요? `val gameResult = blackJackGame.runGame(`"*
|
|
119
|
+
|
|
120
|
+
→ **Controller 절차 분기 < BlackJack 도메인 응집**:
|
|
121
|
+
- *Controller 가 *플레이어 턴 → 딜러 턴 → 결과* 분기* = *도메인 절차 누수*.
|
|
122
|
+
- *`blackJackGame.runGame()` 단일 진입점* = *도메인 절차 캡슐화 + Controller 는 결과만 출력*.
|
|
123
|
+
|
|
124
|
+
PR #99 (s6m1n *Controller god-object 메타 질문*) / PR #95 (송핑크 *game.start() 결과 반환*) / PR #28·#78·#112·#125·#147 의 *Controller god-object* 결.
|
|
125
|
+
|
|
126
|
+
### 6. `private` 가시성 — 외부 노출 함수만 public
|
|
127
|
+
|
|
128
|
+
잭슨: *"외부에 노출되지않는 함수들은 private으로 관리해주세요!"*
|
|
129
|
+
|
|
130
|
+
→ **Kotlin 가시성 어휘** = *public default 방치 = 불필요 API 노출*. PR #99 (s6m1n *protected 자가 학습*) 결.
|
|
131
|
+
|
|
132
|
+
### 7. `interface 프로퍼티` 자가 학습
|
|
133
|
+
|
|
134
|
+
잭슨: *"코틀린에서 인터페이스에서는 프로퍼티도 선언할수 있어요 😄 필요에 따라서, 함수대신 프로퍼티도 사용할수 있습니당!"*
|
|
135
|
+
|
|
136
|
+
→ **Kotlin interface vs Java interface**:
|
|
137
|
+
- *Java*: 메서드만 (default impl 가능, but no fields).
|
|
138
|
+
- *Kotlin*: *추상 프로퍼티 선언 가능* (`val score: Int`) + *구현체가 백킹 필드 또는 getter 제공*.
|
|
139
|
+
- *학생 코드의 `fun getValue(): Int`* < *`val value: Int`* — *getter 함수 < 프로퍼티 어휘*.
|
|
140
|
+
|
|
141
|
+
PR #98 (chaehyuns *fun interface vs interface*) 결.
|
|
142
|
+
|
|
143
|
+
### 8. `주석 코드 수정`
|
|
144
|
+
|
|
145
|
+
잭슨: *"주석 코드를 수정해주세요!"*
|
|
146
|
+
|
|
147
|
+
→ **주석 정리 = 일상 책임**. PR #28·#79 의 *주석 정리* 결.
|
|
148
|
+
|
|
149
|
+
## 리뷰어 의견 요지 (잭슨 / namjackson)
|
|
150
|
+
|
|
151
|
+
10 코멘트 특징 (PR #26 와 동일 reviewer):
|
|
152
|
+
|
|
153
|
+
- **suggestion 블록 활용 2회** — *when 분기 + `shuffled().first()`*. PR #26 (잭슨 *given-when-then + expression body*) / PR #39 (말리빈 *if return*) 결.
|
|
154
|
+
- **메타 질문 + 책임 기준 자가 토론** — *"승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요!"* — **책임 기준 메타 어휘**.
|
|
155
|
+
- **MCP `oop_propose_alternatives` 어휘 일치** — *"정답은 없는거니, 고민만해주셔도 좋아요!"* / *"이부분도 정답이 없는부분이니 고민만해주셔도 좋을거같아요!"*. PR #26 (잭슨 *"개인적인 의견이니 참고만"*) 결.
|
|
156
|
+
- **칭찬 분포** — *sealed class 👍*, *상태 패턴 👍👍*, *Kotlin 어휘 (interface 프로퍼티) 추가 학습* — *학생 자가 진화 인정*.
|
|
157
|
+
- **머지 시점 학생 자가 회고 권유 없음** — *10 thread = 가벼운 분량 + 1단계 권고 적극 반영* 으로 빠른 머지.
|
|
158
|
+
|
|
159
|
+
## 대표 인용
|
|
160
|
+
|
|
161
|
+
> *"게임의 승패를 결정하는 것이 플레이어의 역할인지, 블랙잭 게임의 역할인지, 아니면 승패를 가지고 있는 GameResultType의 역할인지... 아니면 따로 또 객체를 만들어줘야 하는지... 이번에는 상태패턴을 써서 상태가 승패를 결정하도록 하였지만, 이런식으로 책임을 정하기 애매하거나 어려울 때, 리뷰어님은 어떤 기준으로 부여하시는지 궁금합니다."* — chws0508 (학생 자가 4 후보 + reviewer 책임 기준 자가 의문 모범)
|
|
162
|
+
|
|
163
|
+
> *"승패를 정하는 책임이 어디에 있어야할지 한번 더 생각해보아도 좋을거같아요! 정답은 없는거니, 고민만해주셔도 좋아요!"* — namjackson (책임 기준 + MCP 핵심 어휘)
|
|
164
|
+
|
|
165
|
+
> *"이 부분을 해결하기 위하여 상태패턴을 이용해 보았습니다!"* — chws0508 (1단계 권고 자가 반영 + 상태 패턴 자가 적용)
|
|
166
|
+
|
|
167
|
+
> *"when 을 쓸때 무조건 소괄호안에 값이 있어야 한다고 착각했네요 ㅠㅠ 수정하였습니다!"* — chws0508 (학생 자가 잘못된 가정 자가 인정 + Kotlin 어휘 자가 학습)
|
|
168
|
+
|
|
169
|
+
## 얻은 교훈
|
|
170
|
+
|
|
171
|
+
1. **책임 위치 = *기준 자가 의문 모범*** — *학생이 *4 후보 명시 + reviewer 의 판단 기준 자가 의문*. **메타 학습 자가 명시**. PR #95 (송핑크 *abstract vs open 자가 의문*) / PR #99 (s6m1n *Return enum 자가 의문*) 결.
|
|
172
|
+
|
|
173
|
+
2. **`enum 에 행동 부여` 양가성** — *Kotlin 어휘 풍부 + 멤버별 분기 캡슐화* vs *다른 객체 내부 상태 까지 알아야 함 = 책임 누수*. PR #137·#148·#90·#146 의 *enum + when exhaustive* / PR #93 *sealed without differentiation* 결.
|
|
174
|
+
|
|
175
|
+
3. **`State 다형성` = if-else 분기 깊이 해결** — *각 State 가 자기 승패 결정 메서드 → 외부 분기 제거*. PR #93·#136·#152 의 *State.compareTo* / PR #98·#39·#43 학생 자가 적용 결.
|
|
176
|
+
|
|
177
|
+
4. **잭슨의 *"정답은 없는거니, 고민만해주셔도 좋아요"*** — **MCP `oh-my-oop` 핵심 어휘**. PR #95·#23·#26 와 같은 결. *reviewer 가 *판단 기준 강요 X + 학생 선택지 인정* 메타 어휘*.
|
|
178
|
+
|
|
179
|
+
5. **`when (값)` vs `when { 조건 }` Kotlin 어휘 갭 자가 인정** — *학생이 *잘못된 가정 (소괄호 필수) 자가 명시 + 자가 학습*. **MCP 룰 후보 `when-pattern-vs-condition`** = *Kotlin 어휘 학습 갭 진단*.
|
|
180
|
+
|
|
181
|
+
6. **`interface 프로퍼티` Kotlin 어휘** — *Java interface (메서드만) vs Kotlin interface (추상 프로퍼티 + 메서드)*. *getter 함수 (`fun getValue()`) < 프로퍼티 (`val value`)*.
|
|
182
|
+
|
|
183
|
+
7. **`Controller god-object → BlackJack.runGame()` 결과 반환** — *Controller 절차 분기 < 도메인 응집*. PR #99·#95·#28·#78·#112·#125·#147 결.
|
|
184
|
+
|
|
185
|
+
8. **suggestion 블록 활용 (Kotlin 어휘 + 코드 단순화)** — *when 분기 직접 비교 + `shuffled().first()`*. PR #26·#39 결.
|
|
186
|
+
|
|
187
|
+
9. **1단계 권고 적극 반영 + 상태 패턴 자가 적용** = *학생 자가 진화 모범*. *PR #26 1단계 권고 (Player 스코어 분기) → PR #43 2단계 자가 적용 (State 패턴)* — **양 단계 본 reviewer 만 가능한 진화 가시화**. PR #98·#39·#74·#67 결.
|
|
188
|
+
|
|
189
|
+
10. **수직 책임 분포 (4 후보) + 학생 자가 명시** — *Player / BlackJackGame / GameResultType / 별도 객체* — *학생이 *책임 후보를 명시적으로 나열* + reviewer 가 *기준 자가 토론*. **MCP `oop_propose_responsibilities` 어휘와 일치**.
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# PR #109 — [블랙잭 1단계] 오이 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@cucumber99](https://github.com/cucumber99)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/109
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** [@hyemdooly](https://github.com/hyemdooly) (둘리) — 2025 코호트 신규 reviewer (PR #130·#143·#109 분석 reviewer)
|
|
7
|
+
- **라인 코멘트:** 25 스레드 — *PR 본문 자가 의문 3개 (생성자 vs Deck interface + UI 모델 도메인 분리 + Person 추상 클래스) + 학생/reviewer 5 라운드 양방향 토론 (Game 책임 + Deck 외부 주입 vs 딜러 보유) + reviewer 자가 정정 + 학생 자가 의문 + 테스트 = 도메인 설계 개선 어휘 + State 별 카드 장수 책임 + State 가 객체 vs 값 받기 + 상수 도메인 위치 + assertAll vs 여러 assertThat + Deck 생성 자연스러운가?*
|
|
8
|
+
- **신규 reviewee** (2025년 코호트 — 모바일 안드로이드 7기, PR #117·#129·#130·#126·#138·#142·#143·#109 = **2025 코호트 8 PR 코퍼스 성장**).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 자가 의문 3개 + 페어 학습 + 자가 입장 명시
|
|
13
|
+
|
|
14
|
+
PR 본문 (Thread 1·3 인용):
|
|
15
|
+
- *Hand 일급 컬렉션 + Person 추상 → Hand 생성자 받음 vs Deck interface 추상화 학생 자가 의문*.
|
|
16
|
+
- *UI 모델 분리 (PersonUiModel) + 도메인 vs View 책임 학생 자가 의문*.
|
|
17
|
+
- *Person 추상 클래스로 Dealer/Player 구현 자가 적용*.
|
|
18
|
+
|
|
19
|
+
→ **학생 자가 의문 3개 + 자가 입장 + 페어 학습** = PR #21·#35·#126 결의 *PR 본문 자가 의문 3개* 어휘 합류. 2025 코호트 정점 유지.
|
|
20
|
+
|
|
21
|
+
### 2. `Deck` 생성 책임 학생 ↔ reviewer 5 라운드 양방향 토론
|
|
22
|
+
|
|
23
|
+
reviewer (Thread 13): *"`Deck`에서 카드를 생성하는 것은 자연스러운 액션일까요?"*
|
|
24
|
+
|
|
25
|
+
학생:
|
|
26
|
+
|
|
27
|
+
> *"저는 `Deck`이 게임에서 사용될 카드들을 관리하므로, 생성에 대한 책임 또한 가지고 있어도 된다고 생각했습니다! (...) 둘리의 생각은 어떠신가요?🤔"*
|
|
28
|
+
|
|
29
|
+
reviewer:
|
|
30
|
+
|
|
31
|
+
> *"저는 카드들을 외부에서 주입받는 형태를 사용할 것 같아요. 🤔 덱은 누군가가 카드를 뽑을 수 있도록 관리하는 역할은 맞지만, 생성을 한다고 생각하지는 않아요. 카드가 비었다고 해서 새로운 덱을 생성해주는 것도 어색해요. (...) 처음부터 빈 값을 세팅할 수 있다면 더 자연스럽지 않을까요?"*
|
|
32
|
+
|
|
33
|
+
→ **5 라운드 양방향 + DI vs 자가 생성 트레이드오프** = PR #143 (medAndro 결의 *Deck 외부 주입 vs 내부 생성*) 합류. **MCP `oop_propose_alternatives` 핵심 가치 합류**.
|
|
34
|
+
|
|
35
|
+
### 3. State 별 카드 장수 책임 + State 객체 vs 값 받기
|
|
36
|
+
|
|
37
|
+
reviewer (Thread 5·6): *"`State`들이 객체를 받기 보다는 실제 값들(카드 개수, 스코어)을 받아서 판단하면 어떨까요? 여기서 관심사는 사람보다는 사람이 가지고 있는 것들이라고 생각해요!"* + *"`State`에 따른 뽑을 수 있는 카드 장수를 선언하면 어떨까요?"*
|
|
38
|
+
|
|
39
|
+
→ **State 책임 분리 + 관심사 = 카드 (사람 X)** = PR #87·#142·#138 (state pattern + abstract method) 결의 *State 자식 책임* 어휘 강화.
|
|
40
|
+
|
|
41
|
+
**MCP 룰 `state-receives-value-vs-object` 후보** — *State 가 객체 받기 vs 값 받기 (관심사)*.
|
|
42
|
+
|
|
43
|
+
### 4. Game 책임 5 라운드 양방향 토론 + reviewer 자가 정정 + 학생 자가 결정
|
|
44
|
+
|
|
45
|
+
reviewer (Thread 19): *"사실 저는 지금 구조에서 Game 존재의 이유를 잘 모르겠어요. (...) 오히려 분리해서 더 가독성이 떨어지는 것 같아요. 🤔"*
|
|
46
|
+
|
|
47
|
+
학생 자가 의문 + 자가 결정:
|
|
48
|
+
|
|
49
|
+
> *"`Game` 객체를 사용하지 않고, 컨트롤러에 도메인 로직이 노출되어도 괜찮을까요? 혹은 컨트롤러에 도메인 로직이 노출될 수 밖에 없는 상황이라면, 설계가 잘못된 것인가요?"*
|
|
50
|
+
|
|
51
|
+
학생 자가 결정: *"지금 당장은 Game의 문제를 해결할 방법이 떠오르지 않아서, 우선은 Game 객체를 사용하지 않게끔 하겠습니다."*
|
|
52
|
+
|
|
53
|
+
reviewer 자가 정정:
|
|
54
|
+
|
|
55
|
+
> *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏 **람다 함수로 전달하는 것은 도메인이 뷰에 의존하지 않는 것이 맞습니다. 뷰의 함수를 참조하는 것이 아니라서요!** 저도 이 이후로 조금 더 생각을 해봤는데, 오이 의견대로 우선 Game을 사용하되 함수를 너무 타고 들어가지 않게끔 단순하게 만들면 좋아지지 않을까 싶어요!!"*
|
|
56
|
+
|
|
57
|
+
→ **5 라운드 양방향 + 학생 자가 결정 → reviewer 자가 정정 + 변경 인정** = PR #126·#130·#142 (reviewer 자가 한계 인정) 결 정점 강화. **MCP 룰 `reviewer-self-position-revision` 후보** — *reviewer 가 자가 의견 변경 + 학생 의견 인정*.
|
|
58
|
+
|
|
59
|
+
### 5. 학생 자가 *현실 메타포 (딜러가 카드 분배)*
|
|
60
|
+
|
|
61
|
+
학생 자가 답변 (Thread 17):
|
|
62
|
+
|
|
63
|
+
> *"현실에서의 블랙잭 게임을 생각해보면, 딜러가 정확히 하나의 덱을 가지고 있으면서 각 플레이어와 자신에게 카드를 분배하는 것이 적절하다고 생각했습니다."*
|
|
64
|
+
|
|
65
|
+
→ **학생 자가 현실 메타포 어휘** = PR #117·#129·#130 결의 *현실 메타포 정합* 학생 자가 합류. **MCP 룰 `metaphor-fidelity-locator` 강화** 누적 11+ PR ⭐⭐⭐.
|
|
66
|
+
|
|
67
|
+
다만 *PR #117 reviewer 의 *카드뭉치에서 꺼내서 플레이어 받는다* 메타포* vs *PR #109 학생 자가 *딜러가 분배* 메타포* = **현실 메타포 양가성 (분배자 = 딜러 vs 카드뭉치)**.
|
|
68
|
+
|
|
69
|
+
### 6. 학생 자가 *factory 함수 vs 생성자 동일 역할* 인지
|
|
70
|
+
|
|
71
|
+
reviewer (Thread 2): *"팩토리 함수가 생성자랑 동일한 역할을 하는 것으로 보여요!"*
|
|
72
|
+
|
|
73
|
+
→ **팩토리 함수 무의미 = 생성자 활용** = PR #21·#142 결의 *불필요한 추상화* 변형. **MCP 룰 `factory-function-vs-constructor-redundancy` 후보**.
|
|
74
|
+
|
|
75
|
+
### 7. UI 모델 분리 (PersonUiModel) + 안드로이드 어휘
|
|
76
|
+
|
|
77
|
+
reviewer (Thread 3):
|
|
78
|
+
|
|
79
|
+
> *"사실 UiModel을 사용하는 경우는 실제 안드로이드 개발에서 자주 사용되긴 합니다. Data - Domain - Presentation 계층으로 나누게 되면서 각 계층의 모델들을 만들 수 있어요. (지금 당장 몰라도 되는 내용이니 그렇구나 하고 넘어가주세요.ㅎㅎ) 우선 저는 Ui Model이 도메인이 아니라고 생각해요. 지금 구조에서는 View의 역할에 가깝다고 생각합니다."*
|
|
80
|
+
|
|
81
|
+
→ **3 계층 (Data/Domain/Presentation) 분리 + 학생 부담 최소화 어휘** = PR #21·#35 (galcyurio SuitModel 미래 학습) 결 + PR #130 (hyemdooly RankModel 자가 적용) 결의 **학생 → reviewer 진화 어휘 일관**.
|
|
82
|
+
|
|
83
|
+
### 8. 추가 칭찬
|
|
84
|
+
|
|
85
|
+
- Thread 7: *"확장 함수 사용 👍"*.
|
|
86
|
+
- Thread 9: *"테스트 코드에 kotest의 DSL을 활용해주셨군요 👍"*.
|
|
87
|
+
- 학생 자가 답변 풍부 + 학생 자가 코드 예시 (PR 본문) + 학생/reviewer 5 라운드 양방향 토론 4 자리 (Thread 13·15·17·19).
|
|
88
|
+
|
|
89
|
+
## 못한 점 (설계 관점)
|
|
90
|
+
|
|
91
|
+
### 1. 부생성자 vs Default value (Kotlin 어휘)
|
|
92
|
+
|
|
93
|
+
reviewer (Thread 4): *"여기서 부생성자가 필요할까요?"* + *"아하 Default value를 사용할 수 있을 것 같아서 드린 리뷰였어요!"* + 외부글 (kotlinlang.org/docs/classes.html#constructors).
|
|
94
|
+
|
|
95
|
+
학생 자가 답변:
|
|
96
|
+
|
|
97
|
+
> *"특정 카드들을 플레이어나 딜러가 가지고 있을 때의 상황을 테스트하기 위해서 `Hand`를 생성자로 전달하거나, 전달하지 않을 경우 내부에서 기본으로 생성하게 됩니다. 때문에 외부에서 부 생성자로 `Hand`를 받아올 경우 외부와의 참조를 끊기 위해 `Hand`에 `copy`를 선언하고 그대로 사용했습니다."*
|
|
98
|
+
|
|
99
|
+
→ **부생성자 vs Kotlin default value 트레이드오프** = PR #126·#130 결의 *test-fixture-secondary-constructor* 어휘 + Kotlin default value 어휘 비교.
|
|
100
|
+
|
|
101
|
+
### 2. `setName` 이름 vs 출력 동작 — 이름 의미 불일치
|
|
102
|
+
|
|
103
|
+
reviewer (Thread 12): *"이름은 `setName`이지만 하는 일은 출력이군요 🤔"*
|
|
104
|
+
|
|
105
|
+
→ **이름 의미 정확성** = PR #36·#117·#129·#130·#139 (`function-name-vs-return-semantic-mismatch`) 결 누적 5+ PR.
|
|
106
|
+
|
|
107
|
+
### 3. flag → 명시적 이름
|
|
108
|
+
|
|
109
|
+
reviewer (Thread 14): *"flag말고 더 명시적인 이름이 있을까요?"* — *Boolean 변수 명명 정확성*.
|
|
110
|
+
|
|
111
|
+
**MCP 룰 `boolean-variable-naming` 후보**.
|
|
112
|
+
|
|
113
|
+
### 4. `dealer.draw()` = `deck.draw()` 위임만 — 책임 모호
|
|
114
|
+
|
|
115
|
+
reviewer (Thread 15·17): *"이게 무슨 로직일까 생각했는데 딜러가 뽑아서 플레이어에게 주고있는 것이군요. 결국 플레이어가 카드를 뽑고 있는 것이니, 각자 덱에서 카드를 뽑는다 생각하면 더 단순해지지 않을까요?"*
|
|
116
|
+
|
|
117
|
+
학생: *"`dealer.draw()`는 결국 `deck.draw()`를 반환할 뿐, 추가적인 동작은 하지 않는데요. 이렇게 되면 카드를 드로우하는 책임은 최종적으로 `Deck`에게 있는건가요?"*
|
|
118
|
+
|
|
119
|
+
reviewer 자가 답변:
|
|
120
|
+
|
|
121
|
+
> *"카드를 뽑아서 리턴하고 있는건 deck이고 뽑은 카드를 리턴하고 있는 것도 dealer인데, deck에서 뽑은 카드를 그대로 dealer가 던져준다고 해서 dealer에게는 책임이 없다고 할 수 있을까요? 크루들과 함께 대화해보면 좋을 것 같네요!"*
|
|
122
|
+
|
|
123
|
+
→ **단순 위임 메서드 = 책임 모호** = PR #129·#87·#138 (`simple-delegation-method-unnecessary`) 결 강화 누적 5+ PR.
|
|
124
|
+
|
|
125
|
+
### 5. Player 의 람다 인자 (decideHit, onHit) - View 의존
|
|
126
|
+
|
|
127
|
+
reviewer (Thread 11): *"출력 때문에 String에 이름을 넣기 위해 이렇게 된 람다식으로 보입니다. 뷰를 제외하고 봤을 때, 이런 구조는 자연스러운 구조일까요? 🤔"*
|
|
128
|
+
|
|
129
|
+
학생: *"근데 둘리가 말한 몇 가지 버그 중 하나가 해당 구조때문에 발생한다는걸 알아버렸어요..🥲 또한 플레이어 객체가 `View`의 메소드에 의존하고 있기 때문에 문제가 될 수 있을 것 같아요. 해당 부분은 개선하겠습니다!"*
|
|
130
|
+
|
|
131
|
+
→ **람다 = View 결합 + 버그 발생 자가 학습** = PR #36·#129·#138·#142 결 합류.
|
|
132
|
+
|
|
133
|
+
### 6. 상수 도메인 위치 (`GameRule` → 관련 모델 분산)
|
|
134
|
+
|
|
135
|
+
reviewer (Thread 20): *"이 상수들을 관련된 도메인 모델로 옮겨볼 수 있지 않을까요?"*
|
|
136
|
+
|
|
137
|
+
학생: *"하나의 상수가 여러 곳에서 사용되는 경우가 있어서 우선 `GameRule`에 모아놨습니다."*
|
|
138
|
+
|
|
139
|
+
→ **`GameRule` 상수 모음 vs 각 도메인 모델 분산** = PR #130 (domain-constant-locator) 결의 *반대 시점*.
|
|
140
|
+
|
|
141
|
+
#### 6.1. *2 가지 트레이드오프*
|
|
142
|
+
|
|
143
|
+
| 안 | 장점 | 단점 |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| GameRule 상수 모음 (학생) | *상수 한 자리 + 여러 곳 공유 간결* | *도메인 의미 분산 + 한 클래스 비대* |
|
|
146
|
+
| 각 도메인 모델 분산 (reviewer) | *각 모델 자가 상수 + 도메인 의미 명확* | *상수 ↑ + 공유 시 모델 ↔ 모델 의존* |
|
|
147
|
+
|
|
148
|
+
**MCP 룰 `constant-aggregation-vs-domain-distribution` 후보**.
|
|
149
|
+
|
|
150
|
+
### 7. `assertAll` vs 여러 assertThat
|
|
151
|
+
|
|
152
|
+
reviewer (Thread 10): *"`assert`를 한 함수에 여러번 쓰면 어떤 불편함이 생길 수 있을까요?"*
|
|
153
|
+
|
|
154
|
+
학생: *"`assertThat`중 하나라도 검증에 실패하면 이후 `assertThat`이 실행되지 않는 문제가 있었네요. `kotest`나, `assertAll`을 활용해보겠습니다!"*
|
|
155
|
+
|
|
156
|
+
→ **테스트 fail-fast vs fail-all** = *학생 자가 학습*. **MCP 룰 `assert-all-vs-multiple-assertions` 후보**.
|
|
157
|
+
|
|
158
|
+
### 8. 테스트 = 도메인 설계 개선 어휘 (학생 자가 의문 + reviewer 답변)
|
|
159
|
+
|
|
160
|
+
학생 자가 의문 (Thread 25):
|
|
161
|
+
|
|
162
|
+
> *"테스트 코드에서 카드를 직접 추가하지 않고 생성자로 주입하기 위해서는 도메인의 코드가 바뀌어야 하는데요. 테스트를 위해 도메인을 변경하는 것은 바람직한가요?"*
|
|
163
|
+
|
|
164
|
+
reviewer:
|
|
165
|
+
|
|
166
|
+
> *"테스트가 용이하도록 설계를 개선하는 것은 도메인을 변경하는 것일까요?"*
|
|
167
|
+
|
|
168
|
+
→ **테스트 = 도메인 설계 개선 어휘** = PR #87 (jaeyeongjo *테스트 = 객체 설계 명세서*) + PR #129·#142 (테스트 가능성 = 객체 설계 지표) 결 강화 정점. 누적 4+ PR.
|
|
169
|
+
|
|
170
|
+
**MCP 룰 `test-driven-domain-improvement` 강화** — *테스트 용이 = 설계 개선 어휘*.
|
|
171
|
+
|
|
172
|
+
### 9. `given/when/then` 표준 vs 학생 코드 양가
|
|
173
|
+
|
|
174
|
+
reviewer (Thread 18):
|
|
175
|
+
|
|
176
|
+
> *"given/when/then에 어떤 행위를 하는지 다시 한번 살펴보면 좋겠어요. 제가 보기에 여기서 when은, given에 가까워보여요. 빈 덱을 만들기 위함이니까요!"*
|
|
177
|
+
|
|
178
|
+
→ **테스트 BDD 어휘 (given/when/then) 정확성** — *학생 자가 학습*. **MCP 룰 `bdd-given-when-then-fidelity` 후보**.
|
|
179
|
+
|
|
180
|
+
### 10. Participant 0 리턴 vs 예외
|
|
181
|
+
|
|
182
|
+
reviewer (Thread 22): *"더 뽑을 수 없다면 0을 리턴하는 것이 자연스럽지 않을까요?"*
|
|
183
|
+
|
|
184
|
+
학생: *"예외를 발생시키는 것보다 둘리가 말한 방식이 더 자연스러울 것 같아요😊"*
|
|
185
|
+
|
|
186
|
+
→ **예외 vs 0 리턴** = PR #35 (galcyurio Kotlin 예외 처리 4 원칙) 결 합류.
|
|
187
|
+
|
|
188
|
+
### 11. 테스트 함수 이름 vs 결과 불일치
|
|
189
|
+
|
|
190
|
+
reviewer (Thread 23): *"테스트함수 이름과 결과가 일치하지 않는 것 같아요. 🤔"* — *PR #36·#117 (`function-name-vs-return-semantic-mismatch`) 결 합류*.
|
|
191
|
+
|
|
192
|
+
### 12. `Game(dealer, players)` init 블록에서 카드 분배 — 생성 시 부작용
|
|
193
|
+
|
|
194
|
+
```kotlin
|
|
195
|
+
class Game(val dealer: Dealer, val players: List<Player>) {
|
|
196
|
+
init {
|
|
197
|
+
players.forEach { player -> handOutCard(player) }
|
|
198
|
+
handOutCard(dealer)
|
|
199
|
+
}
|
|
200
|
+
...
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
→ **생성자 init 블록 부작용** = *Game 생성 시 자동 카드 분배* = *학생 자가 의문 (Thread 24) reviewer 답변*. **MCP 룰 `init-block-side-effect` 후보**.
|
|
205
|
+
|
|
206
|
+
### 13. 학생 자가 *Game 사용 X 결정* → reviewer 자가 정정 (Game 유지)
|
|
207
|
+
|
|
208
|
+
§4 참조. **학생 자가 결정의 한계 + reviewer 자가 정정** = *학생/reviewer 양방향 토론 정점*.
|
|
209
|
+
|
|
210
|
+
### 14. `processTurn` `processDealerHit` `askHit` Game 메서드 4개 + 람다 인자
|
|
211
|
+
|
|
212
|
+
```kotlin
|
|
213
|
+
fun askHit(decideHit: (String) -> Boolean, onHit: (Player) -> Unit) { ... }
|
|
214
|
+
fun processDealerHit(): Boolean { ... }
|
|
215
|
+
private fun askHitForEachPlayer(player: Player, decideHit: ..., onHit: ...) { ... }
|
|
216
|
+
private fun processTurn(player: Player, decideHit: ..., onHit: ...) { ... }
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
→ **Game 의 람다 인자 4개 메서드** = *PR #36 (callback-lambda-explosion) 결 합류*. *PR #142 결의 *Game 분리 + 책임 응집* 어휘 합류*.
|
|
220
|
+
|
|
221
|
+
### 15. `dealer.canHit()` Tell-Don't-Ask + Dealer 자가 판단
|
|
222
|
+
|
|
223
|
+
```kotlin
|
|
224
|
+
fun processDealerHit(): Boolean {
|
|
225
|
+
if (dealer.canHit()) { handOutCard(dealer); return true }
|
|
226
|
+
return false
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
→ **Dealer.canHit() 호출 = Tell-Don't-Ask 부분 정공**. 다만 *Game 이 분기 처리* = *완전 Tell-Don't-Ask X*.
|
|
231
|
+
|
|
232
|
+
대안: `dealer.processHit(): Boolean` (Dealer 자가 처리). **MCP 룰 `external-flow-control-vs-internal` 후보**.
|
|
233
|
+
|
|
234
|
+
## 리뷰어 의견 요지
|
|
235
|
+
|
|
236
|
+
- **PR 본문 자가 의문 3개에 답변 (Thread 1·3 + 인용)**.
|
|
237
|
+
- **부생성자 vs Kotlin default value + 외부글**.
|
|
238
|
+
- **State 가 객체 vs 값 받기 (관심사)** + **State 별 카드 장수 책임**.
|
|
239
|
+
- **UI Model = View 역할 + 3 계층 (Data/Domain/Presentation) + 학생 부담 최소화**.
|
|
240
|
+
- **`setName` 이름 vs 출력 동작 = 이름 의미 불일치**.
|
|
241
|
+
- **`flag` 명시적 이름**.
|
|
242
|
+
- **dealer.draw() = deck.draw() 위임 = 책임 모호**.
|
|
243
|
+
- **Player 의 람다 인자 = View 의존 + 버그 발생**.
|
|
244
|
+
- **Deck 생성 책임 5 라운드 양방향 + 외부 주입 권유**.
|
|
245
|
+
- **상수 도메인 분산 vs `GameRule` 모음**.
|
|
246
|
+
- **assertAll vs 여러 assertThat**.
|
|
247
|
+
- **테스트 = 도메인 설계 개선 어휘 (학생 자가 의문 + reviewer 답변)**.
|
|
248
|
+
- **given/when/then BDD 어휘 정확성**.
|
|
249
|
+
- **Participant 0 리턴 vs 예외**.
|
|
250
|
+
- **테스트 함수 이름 vs 결과 불일치**.
|
|
251
|
+
- **Game 책임 5 라운드 양방향 + reviewer 자가 정정 (Game 유지 권유)**.
|
|
252
|
+
- **딜러 Deck 보유 vs 외부 주입 (학생 자가 현실 메타포 + reviewer 람다 외부 주입)**.
|
|
253
|
+
- **kotest DSL 칭찬 + 확장 함수 사용 칭찬**.
|
|
254
|
+
|
|
255
|
+
## 대표 인용
|
|
256
|
+
|
|
257
|
+
> [hyemdooly Thread 13]
|
|
258
|
+
> *"저는 카드들을 외부에서 주입받는 형태를 사용할 것 같아요. 🤔 덱은 누군가가 카드를 뽑을 수 있도록 관리하는 역할은 맞지만, 생성을 한다고 생각하지는 않아요. 카드가 비었다고 해서 새로운 덱을 생성해주는 것도 어색해요."*
|
|
259
|
+
|
|
260
|
+
→ **Deck 생성 = 자연스럽지 않음 어휘**.
|
|
261
|
+
|
|
262
|
+
> [cucumber99 Thread 17]
|
|
263
|
+
> *"현실에서의 블랙잭 게임을 생각해보면, 딜러가 정확히 하나의 덱을 가지고 있으면서 각 플레이어와 자신에게 카드를 분배하는 것이 적절하다고 생각했습니다."*
|
|
264
|
+
|
|
265
|
+
→ **학생 자가 현실 메타포** — *PR #117·#129·#130 결의 *현실 메타포 정합* 학생 자가 합류*.
|
|
266
|
+
|
|
267
|
+
> [hyemdooly Thread 19]
|
|
268
|
+
> *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏 **람다 함수로 전달하는 것은 도메인이 뷰에 의존하지 않는 것이 맞습니다.** (...) 오이 의견대로 우선 Game을 사용하되 함수를 너무 타고 들어가지 않게끔 단순하게 만들면 좋아지지 않을까 싶어요!!"*
|
|
269
|
+
|
|
270
|
+
→ **reviewer 자가 의견 변경 + 학생 의견 인정** — *PR #126·#130·#142 결의 *reviewer 자가 한계 인정* 어휘 정점 강화*.
|
|
271
|
+
|
|
272
|
+
> [cucumber99 Thread 25]
|
|
273
|
+
> *"테스트 코드에서 카드를 직접 추가하지 않고 생성자로 주입하기 위해서는 도메인의 코드가 바뀌어야 하는데요. 테스트를 위해 도메인을 변경하는 것은 바람직한가요?"*
|
|
274
|
+
|
|
275
|
+
→ **학생 자가 *테스트 vs 도메인 변경* 자가 의문**.
|
|
276
|
+
|
|
277
|
+
> [hyemdooly Thread 25]
|
|
278
|
+
> *"테스트가 용이하도록 설계를 개선하는 것은 도메인을 변경하는 것일까요?"*
|
|
279
|
+
|
|
280
|
+
→ **테스트 = 도메인 설계 개선 어휘** — *PR #87·#129·#142 결 강화 정점*.
|
|
281
|
+
|
|
282
|
+
## 얻은 교훈 (보편)
|
|
283
|
+
|
|
284
|
+
1. **PR 본문 자가 의문 3개 + reviewer 인용 답변** — *2025 코호트 정점 유지*.
|
|
285
|
+
|
|
286
|
+
2. **Deck 외부 주입 vs 내부 생성 (5 라운드 양방향)** — **MCP 룰 `dependency-injection-vs-internal-creation` 강화** 누적 2+ PR (#143·#109).
|
|
287
|
+
|
|
288
|
+
3. **State 가 객체 vs 값 받기 (관심사)** — **MCP 룰 `state-receives-value-vs-object` 후보**.
|
|
289
|
+
|
|
290
|
+
4. **Game 책임 5 라운드 + reviewer 자가 정정** — **MCP 룰 `reviewer-self-position-revision` 후보**. PR #126·#130·#142 결 강화.
|
|
291
|
+
|
|
292
|
+
5. **현실 메타포 학생 자가 사용** — **MCP 룰 `metaphor-fidelity-locator` 강화** 누적 11+ PR ⭐⭐⭐.
|
|
293
|
+
|
|
294
|
+
6. **테스트 = 도메인 설계 개선 어휘** — **MCP 룰 `test-driven-domain-improvement` 후보** + PR #87·#129·#142 강화. 누적 4+ PR.
|
|
295
|
+
|
|
296
|
+
7. **factory 함수 vs 생성자 동일 역할 = 무의미 추상화** — **MCP 룰 `factory-function-vs-constructor-redundancy` 후보**.
|
|
297
|
+
|
|
298
|
+
8. **UI Model = View 역할 + 3 계층 + 학생 부담 최소화** — *PR #21·#35·#130 결 합류*.
|
|
299
|
+
|
|
300
|
+
9. **상수 도메인 분산 vs 모음 트레이드오프** — **MCP 룰 `constant-aggregation-vs-domain-distribution` 후보**.
|
|
301
|
+
|
|
302
|
+
10. **assertAll vs 여러 assertThat (테스트 fail-fast vs fail-all)** — **MCP 룰 `assert-all-vs-multiple-assertions` 후보**.
|
|
303
|
+
|
|
304
|
+
11. **BDD given/when/then 어휘 정확성** — **MCP 룰 `bdd-given-when-then-fidelity` 후보**.
|
|
305
|
+
|
|
306
|
+
12. **init 블록 부작용 (Game 생성 시 자동 카드 분배)** — **MCP 룰 `init-block-side-effect` 후보**.
|
|
307
|
+
|
|
308
|
+
13. **외부 흐름 제어 vs 객체 내부 (`dealer.canHit()` 외부 분기 vs `dealer.processHit()` 자가)** — **MCP 룰 `external-flow-control-vs-internal` 후보**.
|
|
309
|
+
|
|
310
|
+
14. **Boolean 변수 명명 (flag → 명시적)** — **MCP 룰 `boolean-variable-naming` 후보**.
|
|
311
|
+
|
|
312
|
+
15. **부생성자 vs Kotlin default value + 외부글** — **MCP 룰 `secondary-constructor-vs-default-value` 후보**.
|
|
313
|
+
|
|
314
|
+
16. **모든 25 스레드 학생 자가 답변 + 학생/reviewer 5 라운드 양방향 토론 4 자리** — *2025 코호트 정점 유지*.
|
|
315
|
+
|
|
316
|
+
## 얻은 교훈 (도메인)
|
|
317
|
+
|
|
318
|
+
1. **딜러 = 카드 분배자 (학생 자가 현실 메타포)** — *PR #117 (카드뭉치에서 꺼내서 플레이어 받는다) 와 반대 시점 양가*.
|
|
319
|
+
|
|
320
|
+
2. **State 별 카드 장수 (Dealer 1장 / Player 2장)** — *State 책임 분리*.
|
|
321
|
+
|
|
322
|
+
3. **블랙잭 룰 정확성 = 학생 자가 적용** (코드에 명시 없으니 추가 검증 필요).
|
|
323
|
+
|
|
324
|
+
## MCP 룰 후보 신규 + 강화 (PR #109)
|
|
325
|
+
|
|
326
|
+
| 룰 | 신규 / 강화 | 누적 PR |
|
|
327
|
+
|---|---|---|
|
|
328
|
+
| `state-receives-value-vs-object` | 신규 | 1 (#109) |
|
|
329
|
+
| `reviewer-self-position-revision` | 신규 | 1 (#109) |
|
|
330
|
+
| `metaphor-fidelity-locator` | 강화 | 11+ ⭐⭐⭐ |
|
|
331
|
+
| `test-driven-domain-improvement` | 강화 | 4+ (#87·#129·#142·#109) |
|
|
332
|
+
| `factory-function-vs-constructor-redundancy` | 신규 | 1 (#109) |
|
|
333
|
+
| `dependency-injection-vs-internal-creation` | 강화 | 2+ (#143·#109) |
|
|
334
|
+
| `constant-aggregation-vs-domain-distribution` | 신규 | 1 (#109) |
|
|
335
|
+
| `assert-all-vs-multiple-assertions` | 신규 | 1 (#109) |
|
|
336
|
+
| `bdd-given-when-then-fidelity` | 신규 | 1 (#109) |
|
|
337
|
+
| `init-block-side-effect` | 신규 | 1 (#109) |
|
|
338
|
+
| `external-flow-control-vs-internal` | 신규 | 1 (#109) |
|
|
339
|
+
| `boolean-variable-naming` | 신규 | 1 (#109) |
|
|
340
|
+
| `secondary-constructor-vs-default-value` | 신규 | 1 (#109) |
|
|
341
|
+
| `simple-delegation-method-unnecessary` | 강화 | 5+ |
|
|
342
|
+
| `function-name-vs-return-semantic-mismatch` | 강화 | 5+ |
|
|
343
|
+
|
|
344
|
+
## 메타 어휘 (14 reviewer + MCP 핵심 가치 합류 정점 유지)
|
|
345
|
+
|
|
346
|
+
- ***5 라운드 양방향 토론 + reviewer 자가 정정 4 자리 (Thread 13·15·17·19)*** — hyemdooly PR #109 — *학생 자가 결정 → reviewer 자가 정정 (학생 의견 인정)*.
|
|
347
|
+
- ***테스트 = 도메인 설계 개선 어휘*** — hyemdooly PR #109 — *PR #87·#129·#142 결 정점 강화*.
|
|
348
|
+
- ***학생 자가 현실 메타포*** — cucumber99 PR #109 — *학생이 reviewer 전에 자가 사용*.
|
|
349
|
+
- ***reviewer 자가 모호 어휘 인정 + 학생 의견 인정 (Thread 19)*** — hyemdooly PR #109 — *"오 제 의견이 잘못 전달이 된 것 같은데요! 제가 모호하게 말씀을 드린 것 같네요 🙏"*. **MCP 핵심 가치 합류 정점**.
|
|
350
|
+
|
|
351
|
+
→ **14 reviewer + MCP 핵심 가치 어휘 합류 정점 유지**. **2025 코호트 8 PR 코퍼스 성장**.
|