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,225 @@
|
|
|
1
|
+
# PR #97 — [블랙잭] 올리브 2단계 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@kimhm0728](https://github.com/kimhm0728) (올리브)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/97
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** [@ghojeong](https://github.com/ghojeong) (파이로)
|
|
7
|
+
- **라인 코멘트:** 8 스레드 — *PR 본문 6개 자가 학습 진화 명시 + DM 학습 + 학생 자가 *처음부터 다시 구현 고려* 의문 / 유지보수 > 성능 우선순위 어휘 정점 + static 함수 = 유틸 / 협력 관계 어휘 + public = 메시지 통로 + 분기 N×M = 테스트 부담 = 다형성 도입 시그널 + reviewer 피드백 우선순위 메타 + reviewer 자가 *방향 잡아주지 못한 아쉬움* 어휘*
|
|
8
|
+
- **kimhm0728 양 단계 완성** (1단계 #72 = `controller-classification-criteria` + Jeans 메타 어휘 풍부 PR).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 — 6개 자가 학습 진화 명시 정점
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"## 질문 or 기능 구현 외의 주요한 리팩터링*
|
|
17
|
+
>
|
|
18
|
+
> *1. step1에서 `Lazy Calculation`이라는 키워드를 알려주셨는데요, step2의 수익 계산하는 로직에 적용해보았습니다.*
|
|
19
|
+
>
|
|
20
|
+
> *2. step1 코멘트 중 해당 코멘트는 아직 반영하지 못했습니다 🥲 (...) **초기 설계 자체가 잘못된 것 같아서 미션 끝나면 처음부터 다시 구현할 생각도 하고 있는데요(ㅠㅠ) 이 부분 조언 부탁드릴 수 있을까요?***
|
|
21
|
+
>
|
|
22
|
+
> *3. step1에서 패키지에 대한 얘기를 해주셔서, step2를 진행하면서 적절한 패키지 구조에 대해 고민해보았습니다.*
|
|
23
|
+
>
|
|
24
|
+
> *4. Ace가 11으로 계산되는 경우는 최대 한 번밖에 없더라구요. → `fold` 람다 내에 if 여러개 작성하지 않고 단순화*
|
|
25
|
+
>
|
|
26
|
+
> *5. 테스트 픽스처*
|
|
27
|
+
>
|
|
28
|
+
> *6. step1에 달아둔 질문 링크"*
|
|
29
|
+
|
|
30
|
+
→ **MCP 룰 `pr-body-restart-from-scratch-consideration`** ⭐⭐⭐ **신규** — *학생 자가 *처음부터 다시 구현 고려* 의문 + reviewer 조언 요청*. PR #154 (`pr-body-restart-from-scratch`)·PR #89 (`student-restart-on-reviewer-request`) 결 합류 누적 3 PR → ***갈아엎기 어휘 누적 3 PR 정점*** (자발 vs 요청 vs 고민).
|
|
31
|
+
|
|
32
|
+
### 2. 연속 if 없이 가독성 칭찬 (Thread 0·4)
|
|
33
|
+
|
|
34
|
+
reviewer (Thread 0):
|
|
35
|
+
|
|
36
|
+
> *"블랙잭 미션에서는 가독성을 헤치는 연속된 조건분기를 없애기 위해, 디자인패턴이나 객체 설계를 조언드리게 되는데, **특별한 디자인패턴 키워드 없이도 연속된 if 문들을 무척 잘 없애주신 것 같습니다.** 👍"*
|
|
37
|
+
|
|
38
|
+
reviewer (Thread 4):
|
|
39
|
+
|
|
40
|
+
> *"기존의 연속된 If 문보다 지금이 훨씬 보기편한 것 같습니다. **람다에 집착하지 않고 함수 분리해주셔서 멋집니다.** 👍"*
|
|
41
|
+
|
|
42
|
+
### 3. Role super 칭찬 (Thread 6)
|
|
43
|
+
|
|
44
|
+
reviewer: *"게임의 결과를 분기처리하는 핵심 로직에 대한 책임은 Role 이 가져가게 되었군요! **Role 의 로직을 super 의 형태로 재사용할 수 있도록 해주신 점 기발한 것 같습니다.** 👍"*
|
|
45
|
+
|
|
46
|
+
→ PR #154 (`reviewer-kotlin-tip-vocabulary` final keyword) 결 합류 — Kotlin 어휘.
|
|
47
|
+
|
|
48
|
+
## 못한 점 (설계 관점)
|
|
49
|
+
|
|
50
|
+
### 1. 유지보수 > 성능 우선순위 어휘 (Thread 1) — 정점
|
|
51
|
+
|
|
52
|
+
학생 자가 질문:
|
|
53
|
+
|
|
54
|
+
> *"`Dealer`의 수익을 구할 때는 기존 코드처럼 `Player`의 수익을 구해서 마이너스 연산만 해주면 되는데, **오히려 코드량이나 연산이 더 많아졌다는 느낌이 들었습니다.** 이에 대해 리뷰어님은 어떻게 생각하시나요?"*
|
|
55
|
+
|
|
56
|
+
reviewer 정점:
|
|
57
|
+
|
|
58
|
+
> *"profit, profitByPlayer, gameResult 으로 함수가 쪼개져서, **오히려 각 함수의 역할과 책임이 매우 명확해졌다고 생각합니다.** 각 함수가 무엇을 하고, 무엇을 리턴하고 있는지 올리브도 명확해졌다고 생각하지 않나요? (...) **저는 바뀐 코드가 아름답다는 생각마저 드네요.***
|
|
59
|
+
>
|
|
60
|
+
> *연산이 많아졌다는 의견에 대해서는 저도 동의합니다. **하지만 연산이 많아진 대신 함수의 역할과 책임이 명확해졌고, 이는 더 쉬운 유지보수를 의미합니다. 만약 정 늘어난 연산 때문에 성능 이슈가 생긴다면 캐싱을 하는 객체를 추가하면 됩니다.***
|
|
61
|
+
>
|
|
62
|
+
> *이건 개발팀마다 스타일이 다를 것 같은데, **저는 쉬운 유지보수를 최우선 가치로 개발하고, 성능은 문제가 되었을 경우에만 최적화를 합니다.** 이건 안드로이드 개발자로서의 제 개인 경험인데, **성능이 느려서 문제가 되는 경우보다 유지보수가 어려워서 추가 기능 개발이 느려지는 게 문제가 되는 경우가 훨씬 많았기 때문입니다.**"*
|
|
63
|
+
|
|
64
|
+
reviewer 추가:
|
|
65
|
+
|
|
66
|
+
> *"참고로 무엇이 정답이다! 보다는 **내 코드가 더 테스트하기 쉬워졌는가? 이 함수가 무엇을 하는지 더 명확해졌는가? 에 집중해주세요!** 성능도 물론 고려해야할 요소이지만 지금 성능 말고도 할게 많습니다!"*
|
|
67
|
+
|
|
68
|
+
→ **MCP 룰 `maintainability-over-performance-priority`** ⭐⭐⭐ **신규 정점** — *유지보수 > 성능 우선순위 어휘 + 안드로이드 개발자 경험*. PR #62·#89 (ghojeong reviewer 자가 어휘) 결 합류 누적 3 PR — ***ghojeong reviewer 어휘 정점***.
|
|
69
|
+
|
|
70
|
+
→ **MCP 룰 `code-judgment-criteria-test-fn-clarity`** ⭐⭐⭐ — *판단 기준 = 테스트하기 쉬워졌는가 + 함수가 무엇을 하는지 명확해졌는가*. PR #47 (`coverage-100-vs-test-meaning`)·PR #89 (`state-pattern-2-criteria`) 결 합류 — *판단 기준 어휘 정점*.
|
|
71
|
+
|
|
72
|
+
→ **`reviewer-personal-experience-vocabulary`** ⭐⭐ — *안드로이드 개발자 경험* — PR #62 (`reviewer-personal-episode-vocabulary` 사수 멘붕) 결 합류 누적 2 PR — *ghojeong reviewer 어휘*.
|
|
73
|
+
|
|
74
|
+
### 2. static 함수 = 유틸 / 협력 관계 어휘 (Thread 2) — 정점
|
|
75
|
+
|
|
76
|
+
학생 자가 질문:
|
|
77
|
+
|
|
78
|
+
> *"`CardProvider`를 `Hand`의 생성자 파라미터로 전달하기 위해서는, \"Controller -> Players -> Player -> Role -> Hand\"의 흐름으로 전달해주어야 합니다. (...) 초기 설계 자체가 잘못된 것 같아서 미션 끝나면 처음부터 다시 구현할 생각도 하고 있는데요"*
|
|
79
|
+
|
|
80
|
+
reviewer 정점:
|
|
81
|
+
|
|
82
|
+
> *"지금은 `Player -> Role -> Hand` 대신에, `Player -> Card` 로 CardProvider 를 넘기고 있군요. CardProvider 가 Card 의 리스트를 제공함에도, **다시 또 Card 가 CardProvider 를 호출하는 static 함수를 가지는 것은 쌍방향으로 의존성이 생기는 것 같아서 요상해보입니다.***
|
|
83
|
+
>
|
|
84
|
+
> *처음부터 다시 구현해보시겠다고 하셨는데, 저는 무척 환영합니다. 저도 그럴 필요성을 동의합니다.*
|
|
85
|
+
>
|
|
86
|
+
> *그에 대한 저의 조언은 현재 companion object 안에 있는 static 함수 중, of 나 from 같은 기본적인 팩토리 함수 외에, **모든 static 함수들을 static 이 아니게 될 수 있도록 적절한 객체에게 할당을 해보시라고 조언드리고 싶습니다. static 으로 선언된 함수는 사실 어느 객체에 있어도 상관없는 유틸 함수라고 생각을 해주셔야 합니다.**"*
|
|
87
|
+
|
|
88
|
+
학생 자가 답변:
|
|
89
|
+
|
|
90
|
+
> *"`Card`의 모든 경우의 수를 미리 캐싱해두더라도, `Card`의 생성자는 public으로 열어두어도 괜찮나요? 저는 외부에서 \"캐싱된 Card\"가 아닌 \"별도의 Card 인스턴스\"를 계속 생성하는 것을 막기 위해 private으로 제한해두었는데"*
|
|
91
|
+
|
|
92
|
+
reviewer 정점:
|
|
93
|
+
|
|
94
|
+
> *"Card 의 생성자를 public 으로 열어두어야 하는지에 대한 고민보다도. **Card 와 연관을 맺는 객체들의 \"협력\" 관계가 말이 되는지에 대해 고민해주세요.***
|
|
95
|
+
>
|
|
96
|
+
> ***public 하게 공개된 함수는 생성자를 포함하여, 다른 객체에게 소통의 통로가 되는 메시지 입니다. public 하게 공개된 요소가 어떤 객체와 협력하기 위해 필요한 것인지, 그 객체와 협력이 말이 되는지, 그리고 public 하게 공개된 로직을 테스트 할 수 있는지에 대해 집중해주세요.***
|
|
97
|
+
>
|
|
98
|
+
> *올리브가 굉장히 열심히 해주고 계심에도, 지금 너무 많은 요소를 신경 쓰기 때문에 고민이 점점 많아지게 되는 것 같습니다. 언젠가는 해야할 고민이 맞지만, **한정된 시간내에서 학습해내야할 경험이 있다는 점을 고려해서 우선순위를 말씀드려봅니다.**"*
|
|
99
|
+
|
|
100
|
+
→ **MCP 룰 `static-fn-as-misplaced-utility`** ⭐⭐⭐ **신규 정점** — *static 함수 = 어느 객체에도 무관 유틸 → 객체 할당 권유*. PR #80 (`util-package-definition`) 결 합류 누적 2 PR.
|
|
101
|
+
|
|
102
|
+
→ **MCP 룰 `public-fn-as-message-collaboration-vocabulary`** ⭐⭐⭐ **신규 정점** — *public 함수 (생성자 포함) = 소통 통로 메시지 + 협력 관계 정합 + 테스트 가능성*. PR #42 (`tell-dont-ask-message-vocabulary`)·PR #101 (`message-vocabulary-student-self-narration`) 결 합류 누적 3 PR → ***메시지 어휘 정점*** ⭐⭐⭐.
|
|
103
|
+
|
|
104
|
+
→ **`learning-priority-time-bound`** ⭐⭐⭐ — *한정된 시간 학습 우선순위*. PR #134 (`reviewer-mission-time-bound-conclusion-vocabulary`) 결 합류.
|
|
105
|
+
|
|
106
|
+
### 3. `gameResult` 분기 N×M = 테스트 부담 → 상태 패턴 (Thread 7) — 정점
|
|
107
|
+
|
|
108
|
+
reviewer:
|
|
109
|
+
|
|
110
|
+
> *"현재 Dealer와 Player, Role에서 모두 gameResult() 함수를 구현하고 있습니다. 함수의 중복이 문제가 아니라 **gameResult 로 인해서 분기처리가 점점 많아지는 것이 문제**입니다.*
|
|
111
|
+
>
|
|
112
|
+
> *위의 Dealer 만 보면, DRAW, BLACKJACK_LOSE, WIN, LOSE 4 가지 경우에 대한 분기처리 같지만, super 까지 고려하면 3가지 경우에 대한 분기처리가 추가됩니다. Player 에도 Dealer 와 마찬가지로 4가지에 대한 분기처리가 있으므로, **gameResult 함수를 제대로 검증하려면 (3+4) + (3+4) = 14 개의 테스트를 작성해야합니다.**그리고 이 분기는 혹여나 예외가 추가될 때마다 계속 늘어날 것입니다.*
|
|
113
|
+
>
|
|
114
|
+
> *이를 해결하기 위해서 다형성(Polymorphism) 을 도입해보자고 제안을 해봅니다. **GameResult 를 최종 마지막 결과가 아니라 현재 진행중인 GameState 라 생각**하고, 게임이 진행하면서 GameState 가 수시로 바뀌도록 해주세요. (`var GameState`)*
|
|
115
|
+
>
|
|
116
|
+
> *if 혹은 when 을 통해 분기되어야 하는 로직은 `abstract fun` 에 따라, **State 가 달라지면 알아서 다른 로직이 실행되도록 다형성을 활용**해주시기 바랍니다."*
|
|
117
|
+
|
|
118
|
+
→ **MCP 룰 `branch-multiplication-as-test-burden-signal`** ⭐⭐⭐ **신규 정점** — *분기 N×M = 테스트 N×M 부담 시그널 → 상태 패턴 도입*. PR #154·#42·#89·#134 (`state-pattern-no-if-type-check`/`state-pattern-no-type-casting-hidden-requirement`) 결 합류 누적 **5 PR 정점** ⭐⭐⭐.
|
|
119
|
+
|
|
120
|
+
→ **MCP 룰 `result-as-state-not-final-vocabulary`** ⭐⭐⭐ 신규 — *GameResult = 최종 결과 / GameState = 진행 중 변화 어휘*. PR #89 (`state-pattern-2-criteria`) 결 합류 — *State 패턴 어휘 정점*.
|
|
121
|
+
|
|
122
|
+
### 4. reviewer 피드백 우선순위 메타 (Thread 6)
|
|
123
|
+
|
|
124
|
+
학생 자가:
|
|
125
|
+
|
|
126
|
+
> *"`Dealer`와 `Player`, `Role`에서 모두 `gameResult()` 함수를 구현하고 있다는 점이 마음에 걸렸습니다."*
|
|
127
|
+
|
|
128
|
+
reviewer:
|
|
129
|
+
|
|
130
|
+
> *"크흡... **예리하시군요.** 사실 이 부분 지적할까 하다가, **이 부분에 대한 리팩토링보다는 테스트 코드에 대한 보완이 시급하다고 생각해서 언급하지 않았습니다.***
|
|
131
|
+
>
|
|
132
|
+
> *다만 분기조건을 알기쉽게 함수명을 지어주신 것은 정말 보기좋다고 생각한 칭찬입니다!*
|
|
133
|
+
>
|
|
134
|
+
> *테스트 코드 보완 후에, 이 부분을 갈아엎는데 욕심이 있으시다면 연락주세요. 도와드리겠습니다."*
|
|
135
|
+
|
|
136
|
+
→ **MCP 룰 `reviewer-feedback-prioritization-meta`** ⭐⭐⭐ **신규** — *reviewer 피드백 우선순위 메타 (지적 vs 시급 우선)*. PR #62·#89 (ghojeong 자가 반성) 결 합류 → ***reviewer 자가 결정 어휘***.
|
|
137
|
+
|
|
138
|
+
→ **`student-self-detection-precise`** ⭐⭐ — *학생 자가 *마음에 걸린다* 사전 자각 어휘*.
|
|
139
|
+
|
|
140
|
+
### 5. 패키지 = `common` vs 통합 (Thread 3)
|
|
141
|
+
|
|
142
|
+
reviewer:
|
|
143
|
+
|
|
144
|
+
> *"여러 패키지에서 공통적으로 쓰이는 객체들은 `model.common` 이라고 해서, common 패키지를 만들고는 합니다. 하지만 미션은 요구사항이 많지 않으므로 가능한 common 이 필요없게끔 객체 설계를 해주셨으면 합니다. 저는 혼란이 생길거라면 굳이 card 와 participant 패키지를 나누지 말고, Amount 와 Hand 가 있는 model 패키지로 다같이 묶어버리는게 낫지 않을까 생각이 들었습니다. **블랙잭 미션 완료까지 시간이 얼마 안 남았고 굳이 분류해야할만큼 model 객체가 많지 않으므로, 다 같은 model 패키지로 묶어버리고 차라리 패키지보다는 객체설계 개선에 시간을 더 쓰는게 좋지 않을까 제안해봅니다.**"*
|
|
145
|
+
|
|
146
|
+
→ **`time-bound-priority-package-vs-design`** ⭐⭐ — *시간 한계 + 우선순위 어휘*. PR #115 (laco-dev 시간 지체)·PR #134 (말리빈 미션 마무리) 결 합류 누적 3 PR.
|
|
147
|
+
|
|
148
|
+
### 6. GameResult enum profitRate 우아함 칭찬 (Thread 8)
|
|
149
|
+
|
|
150
|
+
reviewer:
|
|
151
|
+
|
|
152
|
+
> *"GameResult 을 enum 으로 만들어주신 것은 무척 좋습니다! profitRate 를 상수화하는 무척 우아한 방법이라 생각이 됩니다. 👍 💯"*
|
|
153
|
+
|
|
154
|
+
→ **`enum-with-domain-value-as-elegant`** ⭐⭐ — enum + 속성 어휘.
|
|
155
|
+
|
|
156
|
+
### 7. reviewer 마무리 — *방향 잡아주지 못한 아쉬움* (review 마지막)
|
|
157
|
+
|
|
158
|
+
reviewer:
|
|
159
|
+
|
|
160
|
+
> *"DM 을 포함해서 굉장히 많은 이야기를 나누어주셨는데, **제가 더 일찍 방향을 잡아주지 못해서 살짝 아쉬움이 남네요.** 모든 내용을 학습하지 못한 것에 크게 마음 두지 마시고, **다음 미션에 가셔서 다음 미션에서 배울 수 있는 경험에 집중해 주시기 바랍니다!**"*
|
|
161
|
+
|
|
162
|
+
→ **MCP 룰 `reviewer-mid-mission-direction-regret`** ⭐⭐⭐ 신규 — *reviewer 자가 방향 안내 부족 아쉬움 + 학습 분량 안 무거움 격려*. PR #115·#89·#62·#134 결 합류 누적 **7 PR reviewer 자가 반성 어휘** ⭐⭐⭐ 정점.
|
|
163
|
+
|
|
164
|
+
## 대표 인용
|
|
165
|
+
|
|
166
|
+
> [ghojeong Thread 1]
|
|
167
|
+
> *"저는 쉬운 유지보수를 최우선 가치로 개발하고, 성능은 문제가 되었을 경우에만 최적화를 합니다. (...) 성능이 느려서 문제가 되는 경우보다 유지보수가 어려워서 추가 기능 개발이 느려지는 게 문제가 되는 경우가 훨씬 많았기 때문입니다."*
|
|
168
|
+
|
|
169
|
+
→ **유지보수 > 성능 우선순위 + 개인 경험 어휘 정점**.
|
|
170
|
+
|
|
171
|
+
> [ghojeong Thread 1]
|
|
172
|
+
> *"무엇이 정답이다! 보다는 내 코드가 더 테스트하기 쉬워졌는가? 이 함수가 무엇을 하는지 더 명확해졌는가? 에 집중해주세요!"*
|
|
173
|
+
|
|
174
|
+
→ **판단 기준 어휘 정점**.
|
|
175
|
+
|
|
176
|
+
> [ghojeong Thread 2]
|
|
177
|
+
> *"public 하게 공개된 함수는 생성자를 포함하여, 다른 객체에게 소통의 통로가 되는 메시지 입니다. public 하게 공개된 요소가 어떤 객체와 협력하기 위해 필요한 것인지, 그 객체와 협력이 말이 되는지"*
|
|
178
|
+
|
|
179
|
+
→ **public = 메시지 통로 + 협력 관계 어휘 정점**.
|
|
180
|
+
|
|
181
|
+
> [ghojeong Thread 2]
|
|
182
|
+
> *"static 으로 선언된 함수는 사실 어느 객체에 있어도 상관없는 유틸 함수라고 생각을 해주셔야 합니다."*
|
|
183
|
+
|
|
184
|
+
→ **static = 유틸 어휘**.
|
|
185
|
+
|
|
186
|
+
> [ghojeong Thread 7]
|
|
187
|
+
> *"gameResult 함수를 제대로 검증하려면 (3+4) + (3+4) = 14 개의 테스트를 작성해야합니다."*
|
|
188
|
+
|
|
189
|
+
→ **분기 N×M = 테스트 부담 어휘**.
|
|
190
|
+
|
|
191
|
+
> [ghojeong 마지막 review]
|
|
192
|
+
> *"제가 더 일찍 방향을 잡아주지 못해서 살짝 아쉬움이 남네요. 모든 내용을 학습하지 못한 것에 크게 마음 두지 마시고, 다음 미션에 가셔서 다음 미션에서 배울 수 있는 경험에 집중해 주시기 바랍니다!"*
|
|
193
|
+
|
|
194
|
+
→ **reviewer 자가 방향 안내 부족 아쉬움 어휘**.
|
|
195
|
+
|
|
196
|
+
> [kimhm0728 PR 본문]
|
|
197
|
+
> *"초기 설계 자체가 잘못된 것 같아서 미션 끝나면 처음부터 다시 구현할 생각도 하고 있는데요(ㅠㅠ)"*
|
|
198
|
+
|
|
199
|
+
→ **학생 자가 처음부터 다시 구현 고려 어휘**.
|
|
200
|
+
|
|
201
|
+
> [kimhm0728 Thread 6]
|
|
202
|
+
> *"`Dealer`와 `Player`, `Role`에서 모두 `gameResult()` 함수를 구현하고 있다는 점이 마음에 걸렸습니다."*
|
|
203
|
+
|
|
204
|
+
→ **학생 자가 *마음에 걸린다* 사전 자각 어휘**.
|
|
205
|
+
|
|
206
|
+
## 얻은 교훈 (보편)
|
|
207
|
+
|
|
208
|
+
1. **유지보수 > 성능 우선순위 + 개인 경험** — **MCP 룰 `maintainability-over-performance-priority` 후보** ⭐⭐⭐ 정점.
|
|
209
|
+
2. **판단 기준 = 테스트 가능 + 함수 명확** — **MCP 룰 `code-judgment-criteria-test-fn-clarity` 후보** ⭐⭐⭐ 정점.
|
|
210
|
+
3. **public = 메시지 통로 + 협력 관계 어휘** — **MCP 룰 `public-fn-as-message-collaboration-vocabulary` 후보** ⭐⭐⭐ 정점. PR #42·#101 결 누적 3 PR.
|
|
211
|
+
4. **static 함수 = 어느 객체에도 무관 유틸** — **MCP 룰 `static-fn-as-misplaced-utility` 후보** ⭐⭐⭐ 정점.
|
|
212
|
+
5. **분기 N×M = 테스트 부담 시그널 → 상태 패턴** — **MCP 룰 `branch-multiplication-as-test-burden-signal` 후보** ⭐⭐⭐ 정점. 상태 패턴 누적 5 PR.
|
|
213
|
+
6. **GameResult = 진행 중 GameState 어휘** — **MCP 룰 `result-as-state-not-final-vocabulary` 후보** ⭐⭐⭐.
|
|
214
|
+
7. **reviewer 피드백 우선순위 메타** — **MCP 룰 `reviewer-feedback-prioritization-meta` 후보** ⭐⭐⭐.
|
|
215
|
+
8. **reviewer 자가 방향 안내 부족 아쉬움 (누적 7 PR)** — **MCP 룰 `reviewer-mid-mission-direction-regret` 후보** ⭐⭐⭐ 정점.
|
|
216
|
+
9. **학생 자가 처음부터 다시 구현 고려 (누적 3 PR)** — **MCP 룰 `pr-body-restart-from-scratch-consideration` 후보** ⭐⭐⭐.
|
|
217
|
+
10. **시간 한계 우선순위 (패키지 vs 객체 설계)** — **MCP 룰 `time-bound-priority-package-vs-design` 후보** ⭐⭐.
|
|
218
|
+
|
|
219
|
+
## 메타 노트
|
|
220
|
+
|
|
221
|
+
- **kimhm0728 양 단계 완성 (1단계 #72 → 2단계 #97)** — 1단계 *controller-classification-criteria* + 풍부 메타 어휘 → 2단계 *처음부터 다시 구현 고려 학생 자가 의문* + ghojeong reviewer 유지보수/성능/협력/메시지 어휘 정점 + Slack DM 활발 학습 + 6개 자가 학습 진화 명시. **학습 메타 케이스 — 학생 자가 *처음부터 다시* + DM 학습 깊이 정점**.
|
|
222
|
+
- **ghojeong reviewer 어휘 누적 정점** (PR #62 함수형 어휘 → #89 미션 본 목표 복귀 → #97 유지보수/성능/협력/메시지/판단 기준 정점) — *ghojeong 3 PR reviewer 어휘 최정점* ⭐⭐⭐.
|
|
223
|
+
- **메타 케이스 12번째** — *kimhm0728 PR 본문 *처음부터 다시 구현 고려* 학생 자가 의문 + DM 학습 + 학생 자가 *마음에 걸린다* 사전 자각*.
|
|
224
|
+
- **reviewer 자가 반성 어휘 누적 7 PR 정점** (PR #62 + #89 + #115 + #73 + #106 + #54 + #97) — **MCP `oh-my-oop` 핵심 가치 최정점 강화**.
|
|
225
|
+
- **상태 패턴 어휘 누적 5 PR 정점** (PR #154 + #42 + #89 + #134 + #97) — 분기 N×M → 다형성 도입 시그널.
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# PR #68 — [블랙잭 1단계] 꼬상 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@kkosang](https://github.com/kkosang)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/68
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** [@KwonDae](https://github.com/KwonDae) (제이든) — 2024 코호트 reviewer
|
|
7
|
+
- **라인 코멘트:** 22 스레드 — *PR 본문 *클래스 다이어그램 그림 첨부* (페어 학습) + Participant 추상화 + BlackJack 클래스 = 다형성 제기능 X (소프트17 룰 4 라운드 깊은 양방향 토론) + 학생 자가 *개방-폐쇄 원칙 OCP* 어휘 + GameManager 없이 가능 권유 + 고차함수 + 학생 자가 인자 3개 줄이고 싶음 의문*
|
|
8
|
+
- **신규 reviewee** (2024 코호트, 새 1단계 분석).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 클래스 다이어그램 그림 첨부 + 페어 학습
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"블랙잭 미션에 대한 클래스다이어그램을 페어와 함께 간략하게 그려봤습니다 ! 참고해서 봐주시면 감사하겠습니다 🙇🏻♂️"*
|
|
17
|
+
|
|
18
|
+
→ **클래스 다이어그램 그림 첨부 + 페어 학습** = PR #96 (Hogu59 의존성 그래프 시각화) 결 합류. **MCP 룰 `student-self-class-diagram-visualization` 후보** — *학생 자가 클래스 다이어그램 그림*.
|
|
19
|
+
|
|
20
|
+
### 2. Participant 추상화 + reviewer 추가 책임 권유
|
|
21
|
+
|
|
22
|
+
reviewer (Thread 1):
|
|
23
|
+
|
|
24
|
+
> *"딜러와 플레이어들의 공통점을 추상화를 통해 잘 구현해주셨네요 👍*
|
|
25
|
+
> *조금 더 참가자 라는 객체 스스로가 판단하고 행동하게끔 해볼 수 있을까요? draw, checkState 같은 부분들에 이어서 `다른 참가자와의 승패비교`, `게임 참가 시 두장의 카드 뽑는 행동` 등 외부로부터 결정되는 것이 아닌 객체 자체로서 행동하게 할 수 있는 로직들을 추가해도 좋겠네요 👍"*
|
|
26
|
+
|
|
27
|
+
→ **Participant 추상화 + Tell-Don't-Ask 추가 책임** = PR #87·#129·#142·#143·#140 결 합류.
|
|
28
|
+
|
|
29
|
+
### 3. 학생 자가 *개방-폐쇄 원칙 OCP* 어휘 (Thread 11)
|
|
30
|
+
|
|
31
|
+
학생:
|
|
32
|
+
|
|
33
|
+
> *"하지만 소프트17뿐만 아니라 다른 룰이 계속해서 추가되어 게임 본질을 잃어버린다면 기존의 블랙잭게임이 아닌 새로운 게임을 만드는 것이라고 볼수도 있을 것 같은데 혹시 질문하신 부분이 객체지향 설계의 원칙 중 하나인 개방-폐쇄 원칙(Open/Closed Principle)인가요..?!"*
|
|
34
|
+
|
|
35
|
+
→ **학생 자가 *OCP* 어휘** = *SOLID 원칙 자가 학습*. **MCP 룰 `student-self-solid-principle-vocabulary` 후보**.
|
|
36
|
+
|
|
37
|
+
### 4. 소프트17 룰 학생/reviewer 4 라운드 깊은 양방향 토론 (Thread 11)
|
|
38
|
+
|
|
39
|
+
reviewer:
|
|
40
|
+
|
|
41
|
+
> *"만약 블랙잭 내부 룰 중 [소프트17] 이라는 룰 적용이라는 추가 요구사항이 생겼다면 어떻게 해야할까요? 이 규칙은 딜러에게만 적용되는 규칙이기에 Dealer 에서 다르게 처리를 해주어야 할겁니다.*
|
|
42
|
+
>
|
|
43
|
+
> *그렇다면 이 BlackJack 클래스 내부에서 처리를 할 수 있을까요? BlackJack이라는 클래스를 만들면서 Partic[ipant 추상화 제기능 못 함]"*
|
|
44
|
+
|
|
45
|
+
학생 자가 답변 + reviewer 답변 + 학생 자가 답변 + reviewer 답변 = **4 라운드 양방향 토론** + *카지노마다 소프트17 적용 다름 = 본질 다른 게임?* 학생 자가 의문.
|
|
46
|
+
|
|
47
|
+
reviewer:
|
|
48
|
+
|
|
49
|
+
> *"소프트17이 블랙잭 게임의 본질을 잃어버리게 하는 룰일까요? 그렇다면 카지노마다 소프트17이 적용되는 곳이 있고 아닌 곳이 있는데 이들은 본질적으로 다른 블랙잭 게임인걸까요?_?*
|
|
50
|
+
>
|
|
51
|
+
> *Participant 추상화를 통해 딜러와 플레이어간 공통 로직을 모으고, 다형성(확장)에 대해서는 제공을 하지만, BlackJack이라는 객체를 통해 다시 다형성에 대해 제기능을 하지 못하고 있습니다."*
|
|
52
|
+
|
|
53
|
+
→ **외부 룰 추가 요구사항 가정 + 다형성 활용 의식 + 학생 자가 *블랙잭 본질* 의문 + reviewer *카지노마다 다른 룰* 답변** = **MCP 룰 `polymorphism-as-rule-extension-tolerance` 후보**.
|
|
54
|
+
|
|
55
|
+
PR #142 (polymorphism-as-change-tolerance) 결의 *변경 가능성 = 다형성* 어휘 강화.
|
|
56
|
+
|
|
57
|
+
### 5. 고차함수 + 학생 자가 *모듈성 / 객체 일* 학습 (Thread 19)
|
|
58
|
+
|
|
59
|
+
학생:
|
|
60
|
+
|
|
61
|
+
> *"고차함수를 사용하면 모듈성을 높일 수 있는 것 같고, 객체에게 할일을 부여해줄 수 있다는 점이 좋았던 것 같습니다 ! 고차함수를 처음 적용해봐서 익숙하지 않아서 어려웠던 것 같고, drawAdditionalCard메서드에서 현재 인자를 3개 받고 있는데 줄이고 싶었지만 방법이 떠오르지 않았습니다..😅"*
|
|
62
|
+
|
|
63
|
+
reviewer:
|
|
64
|
+
|
|
65
|
+
> *"맞습니다. 고차함수를 통해 가독성 향상 외에도 외부 상태의 변경이나 가변 데이터를 피하고, 불변성을 지향하는 함수형 프로그래밍에 기반을 두고 있기에 순수 함수를 통한 부수효과를 억제하여 오류를 피할 수 있습니다."*
|
|
66
|
+
|
|
67
|
+
→ **고차함수 = 모듈성 + 함수형 프로그래밍 학생 자가 학습 + 학생 자가 인자 폭증 의문** = PR #109·#140·#143·#142 결 합류.
|
|
68
|
+
|
|
69
|
+
### 6. 추가 칭찬
|
|
70
|
+
|
|
71
|
+
- Thread 3: *"도메인의 enum 과 View 역할을 잘 각각 부여해주셨네요 👍"*.
|
|
72
|
+
- Thread 1: *"공통점을 추상화를 통해 잘 구현해주셨네요 👍"*.
|
|
73
|
+
|
|
74
|
+
## 못한 점 (설계 관점)
|
|
75
|
+
|
|
76
|
+
### 1. InputValidator 도메인 vs UI + `println` model 위치 (Thread 2)
|
|
77
|
+
|
|
78
|
+
reviewer: *"InputValidator는 도메인 로직일까요 UI로직일까요? 또한, model에서 view 역할을 하는 `println()` 존재에 대해서 어떻게 생각하시나요?"*
|
|
79
|
+
|
|
80
|
+
→ **Domain ↔ View 분리 + Kotlin 예외 처리 (논리 오류 vs null)** = PR #126·#143·#149·#19·#35 결 합류 누적 14+ PR ⭐⭐⭐.
|
|
81
|
+
|
|
82
|
+
reviewer 가 *로또 미션* 인용 (cross-mission learning).
|
|
83
|
+
|
|
84
|
+
### 2. Ace 'A' 출력 vs 11 (Thread 4) — 블랙잭 룰 출력 정확성
|
|
85
|
+
|
|
86
|
+
reviewer: *"에이스는 11이 아닌 'A'로 출력되어야 합니다"*
|
|
87
|
+
|
|
88
|
+
→ **블랙잭 출력 룰 정확성** = PR #36·#130·#143 (블랙잭 룰 정확성) 결 합류.
|
|
89
|
+
|
|
90
|
+
### 3. 메서드명 vs state update (Thread 5)
|
|
91
|
+
|
|
92
|
+
reviewer: *"메소드명은 현재스코어를 확인하는 함수이지만, 행동은 state를 update 해주고 있습니다"*
|
|
93
|
+
|
|
94
|
+
→ **CQS 위반 + 이름 의미 불일치** = PR #117·#139·#130·#141 결 합류.
|
|
95
|
+
|
|
96
|
+
### 4. Bust 시 Ace 처리 불필요 (Thread 6)
|
|
97
|
+
|
|
98
|
+
reviewer: *"Bust 일 때, 현재 에이스를 갖고 있지 않아도 이 행동을 해야할까요?"*
|
|
99
|
+
|
|
100
|
+
→ **불필요한 조건 분기 = 학생 자가 학습**.
|
|
101
|
+
|
|
102
|
+
### 5. CardDeck 테스트 가능성 + Default arguments (Thread 7·13)
|
|
103
|
+
|
|
104
|
+
reviewer: *"CardDeck을 테스트 가능하게끔 외부에서 카드덱을 받도록 설정할 수 있을까요? 특정 카드덱을 받지 않는다면, [Default arguments] 로 설정해줄 수 있는 옵션도 있으니까요"*
|
|
105
|
+
|
|
106
|
+
학생 자가 적용: `class CardDeck(cards: List<Card> = ...default...)`.
|
|
107
|
+
|
|
108
|
+
→ **DI + Default argument Kotlin 어휘** = PR #138·#113·#118·#141·#149 결 합류 누적 8+ PR.
|
|
109
|
+
|
|
110
|
+
### 6. Test Fixture 외부글 (Thread 8)
|
|
111
|
+
|
|
112
|
+
reviewer: *"테스트 픽스처에 대한 좋은 글을 공유드릴게요 :) https://tjdtls690.github.io/studycontents/java/2022-10-10-test_fixture/"*
|
|
113
|
+
|
|
114
|
+
→ **외부글 (tjdtls690)** = PR #36·#71·#129·#138·#118 결 합류.
|
|
115
|
+
|
|
116
|
+
### 7. 승부 판단 = Participant.judge(other) (Thread 10) — Tell-Don't-Ask
|
|
117
|
+
|
|
118
|
+
학생 자가 의문:
|
|
119
|
+
|
|
120
|
+
> *"Participation에서 승부를 판단하도록 수정하였는데, 제가 생각했을 때는 참가자가 직접 승부를 판단하는 것보다 GameResult라는 객체가 승부를 판단하는게 좀 더 자연스럽다고 생각했는데 혹시 Participant에서 승부를 판단해야 하는 이유가 있을까요?"*
|
|
121
|
+
|
|
122
|
+
→ **외부 객체 vs Participant.judge 학생 자가 의문** = PR #129·#142·#143·#140 결 합류.
|
|
123
|
+
|
|
124
|
+
### 8. BlackJack 클래스 = 다형성 제기능 X (Thread 11) — §3·§4 참조
|
|
125
|
+
|
|
126
|
+
### 9. GameManager 가 draw 수행 vs participant.draw(cardDeck) (Thread 12)
|
|
127
|
+
|
|
128
|
+
reviewer:
|
|
129
|
+
|
|
130
|
+
> *"참가자에게 draw()를 행동하게 위임했다면, cardDeck만 넘겨서 알아서 draw 하도록 하는건 어떨까요?*
|
|
131
|
+
>
|
|
132
|
+
> *그렇다면 GameManager 가 참여자 객체에게 카드를 몇장 뽑을지 매니저에서 결정 하는 것도 플레이어 객체가 몇장 뽑을지 스스로 행동하게끔 할 수 있겠네요!*
|
|
133
|
+
> *`participant.initDrawCard(cardDeck)`*
|
|
134
|
+
>
|
|
135
|
+
> *객체 스스로 행동하게끔 고쳐본다면 GameManager 클래스 없이도 가능할까요? 🧐"*
|
|
136
|
+
|
|
137
|
+
→ **GameManager god-object 회피 + 객체 자가 행동 정공** = PR #142·#129 결 합류.
|
|
138
|
+
|
|
139
|
+
### 10. 사용자 입력 판단 = 도메인 vs UI (Thread 18) — 학생 자가 잘못된 답변 → reviewer 정정
|
|
140
|
+
|
|
141
|
+
학생: *"사용자 입력에 대해 판단하는 로직은 도메인 로직에 해당한다고 생각합니다 ! 입력은 똑같이 들어왔지만, 입력값에 대한 판단만 바뀌는 경우 도메인 로직을 수정해주어야 할 것 같습니다 !"*
|
|
142
|
+
|
|
143
|
+
reviewer:
|
|
144
|
+
|
|
145
|
+
> *"View 는 입력 또는 출력 값에 대해 책임을 갖고 Controller에게 도메인 로직에 활용 될 데이터를 전달하는 것에 역할이 있습니다. 입력값에 대한 요구사항이 변경되었을 때 도메인 로직을 수정하는것이 자연스러운가? 에 대해 고민해보셨으면 좋겠습니다."*
|
|
146
|
+
|
|
147
|
+
→ **학생 자가 잘못된 답변 + reviewer 정정** = *학생 자가 학습 시간성*. 누적 다수 PR.
|
|
148
|
+
|
|
149
|
+
### 11. `getOrElse` 반복 코드 제거 (Thread 15·16)
|
|
150
|
+
|
|
151
|
+
reviewer: *"위와 마찬가지로 getOrElse 로 반복되는 코드를 제거해볼까요?"* + suggestion 블록 활용.
|
|
152
|
+
|
|
153
|
+
→ **Kotlin scope function 활용**.
|
|
154
|
+
|
|
155
|
+
### 12. Controller 가 player 상태 확인 + 비즈니스 로직 (Thread 17)
|
|
156
|
+
|
|
157
|
+
reviewer: *"Controller에서 player의 상태를 확인하고 비즈니스 로직에 관여하는 것에 대해 어떻게 생각하시나요? 위와 비슷한 맥락의 코멘트인거 같습니다. 객체에게 할일을 하라고 메세지를 던지기만 해보는건 어떨까요?"*
|
|
158
|
+
|
|
159
|
+
→ **고차함수 + Tell-Don't-Ask** = 누적 다수 PR.
|
|
160
|
+
|
|
161
|
+
### 13. CardDeck mutable 외부 노출 (Thread 20)
|
|
162
|
+
|
|
163
|
+
reviewer: 코멘트 (Thread 20 - 자동 분류). *CardDeck mutable 관련*.
|
|
164
|
+
|
|
165
|
+
→ **mutable-list-public-exposure** = 누적 6+ PR.
|
|
166
|
+
|
|
167
|
+
### 14. HumanName 생성자 / 팩토리 (Thread 14)
|
|
168
|
+
|
|
169
|
+
reviewer: *"이 함수는 테스트시에만 사용하는 함수인가요?.?"*
|
|
170
|
+
|
|
171
|
+
학생: *"사용을 안하고 있었네요..! 수정해서 사용하도록 변경했습니다"*
|
|
172
|
+
|
|
173
|
+
→ **Dead code** = PR #153 결 합류.
|
|
174
|
+
|
|
175
|
+
### 15. 학생 자가 클래스 다이어그램 (PR 본문) — §1 참조
|
|
176
|
+
|
|
177
|
+
## 대표 인용
|
|
178
|
+
|
|
179
|
+
> [kkosang Thread 11]
|
|
180
|
+
> *"하지만 소프트17뿐만 아니라 다른 룰이 계속해서 추가되어 게임 본질을 잃어버린다면 기존의 블랙잭게임이 아닌 새로운 게임을 만드는 것이라고 볼수도 있을 것 같은데 혹시 질문하신 부분이 객체지향 설계의 원칙 중 하나인 개방-폐쇄 원칙(Open/Closed Principle)인가요..?!"*
|
|
181
|
+
|
|
182
|
+
→ **학생 자가 OCP 어휘** + *블랙잭 본질 의문*.
|
|
183
|
+
|
|
184
|
+
> [KwonDae Thread 11]
|
|
185
|
+
> *"소프트17이 블랙잭 게임의 본질을 잃어버리게 하는 룰일까요? 그렇다면 카지노마다 소프트17이 적용되는 곳이 있고 아닌 곳이 있는데 이들은 본질적으로 다른 블랙잭 게임인걸까요?_?"*
|
|
186
|
+
|
|
187
|
+
→ **카지노마다 다른 룰 어휘** — *도메인 본질 vs 변형 트레이드오프*.
|
|
188
|
+
|
|
189
|
+
> [KwonDae Thread 12]
|
|
190
|
+
> *"객체 스스로 행동하게끔 고쳐본다면 GameManager 클래스 없이도 가능할까요? 🧐"*
|
|
191
|
+
|
|
192
|
+
→ **GameManager god-object 회피 어휘**.
|
|
193
|
+
|
|
194
|
+
## 얻은 교훈 (보편)
|
|
195
|
+
|
|
196
|
+
1. **학생 자가 클래스 다이어그램 시각화** — **MCP 룰 `student-self-class-diagram-visualization` 후보**.
|
|
197
|
+
|
|
198
|
+
2. **학생 자가 *OCP* 어휘** — **MCP 룰 `student-self-solid-principle-vocabulary` 후보**.
|
|
199
|
+
|
|
200
|
+
3. **소프트17 룰 4 라운드 양방향 + 카지노마다 다른 룰** — **MCP 룰 `polymorphism-as-rule-extension-tolerance` 후보**.
|
|
201
|
+
|
|
202
|
+
4. **GameManager god-object 회피 + 객체 자가 행동** = 누적 다수.
|
|
203
|
+
|
|
204
|
+
5. **학생 자가 잘못된 답변 + reviewer 정정 (Thread 18)** — *학습 시간성*.
|
|
205
|
+
|
|
206
|
+
6. **외부글 (tjdtls690 Test Fixture)** = 누적 8+ PR.
|
|
207
|
+
|
|
208
|
+
7. **로또 미션 cross-reference** — *cross-mission learning*.
|
|
209
|
+
|
|
210
|
+
## MCP 룰 후보 신규 + 강화 (PR #68)
|
|
211
|
+
|
|
212
|
+
| 룰 | 신규 / 강화 | 누적 PR |
|
|
213
|
+
|---|---|---|
|
|
214
|
+
| `student-self-class-diagram-visualization` | 신규 | 1 (#68) |
|
|
215
|
+
| `student-self-solid-principle-vocabulary` | 신규 | 1 (#68) |
|
|
216
|
+
| `polymorphism-as-rule-extension-tolerance` | 신규 | 1 (#68) |
|
|
217
|
+
| `model-view-dependency-direction` | 강화 | 14+ ⭐⭐⭐ |
|
|
218
|
+
| `function-name-vs-return-semantic-mismatch` | 강화 | 12+ |
|
|
219
|
+
| `external-resource-reference` | 강화 | 8+ |
|
|
220
|
+
| `mutable-list-public-exposure` | 강화 | 6+ |
|
|
221
|
+
| `dead-code-removal` | 강화 | 2+ |
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# PR #94 — [블랙잭 2단계] 꼬상 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@kkosang](https://github.com/kkosang)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/94
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** [@KwonDae](https://github.com/KwonDae) (제이든) — 1단계 #68 동일 reviewer
|
|
7
|
+
- **라인 코멘트:** 15 스레드 — *PR 본문 자가 의문 (BlackJack 클래스 삭제 가능?) + reviewer *시야 환기 위해 요구사항 없는 룰 가정 의도* 자가 답변 + data class vs class 학생 자가 답변 + State 패턴 abstract fun 미적용 + Controller-View 없이 도메인 + calculateResult + displayResult = 함수 2 역할 (CQS) + 일급 컬렉션 위임 권유 + given-when-then 학생 자가 학습*
|
|
8
|
+
- **양 단계 완성 reviewee** (1단계 #68 batch 23 완료 + 2단계 #94 = batch 24).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 자가 의문 + 인사 (몸 상태)
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"몸 상태가 좋지 않아서 오래걸렸습니다 😥 제이든도 환절기에 감기 조심하세요 ㅠㅠ! 1단계 리뷰 반영 하는 부분에서 아직 BlackJack 클래스에 대해서는 해결하지 못하였는데 BlackJack클래스를 삭제하고 HandCard에서 상태를 관리하면서 Participant에서 HandCard를 사용하면 되는걸까요?"*
|
|
17
|
+
|
|
18
|
+
→ **학생 자가 한계 인정 + reviewer 안부 인사 + 자가 의문** = PR #130·#139·#143·#121·#153 결 합류. 인간적 어휘.
|
|
19
|
+
|
|
20
|
+
### 2. reviewer 의도 명료화 (Thread 9 - PR 본문 자가 의문 답변)
|
|
21
|
+
|
|
22
|
+
reviewer:
|
|
23
|
+
|
|
24
|
+
> *"조금은 시야를 환기시키기 위해 요구사항에는 없었던 룰에 대해서 생각을 해보고 적용을 하게 된다면 현재 구조에서 어떤 문제가 생길 수 있을지에 대해 고민을 유도하는 코멘트였습니다 ㅎㅎ*
|
|
25
|
+
>
|
|
26
|
+
> *지금 BlackJack이라는 클래스를 통해 블랙잭 로직들을 응집함으로써 잘 분리가 되었습니다. BlackJack 클래스가 없다면 Participant 가 지금 보다는 비대해질 가능성이 있겠죠. 다만,..."*
|
|
27
|
+
|
|
28
|
+
→ **reviewer 의도 자가 명료화 + 1단계 #68 소프트17 룰 어휘 명시** = *PR #142 (reviewer-self-clarification-explicit) 결 합류 누적 5+ PR*.
|
|
29
|
+
|
|
30
|
+
### 3. data class vs class 학생 자가 답변
|
|
31
|
+
|
|
32
|
+
학생: *"Card를 data class로 만든 이유는 값에 대한 정보만 들어있고 get메서드를 통해 읽기전용으로만 사용하고 있어서 사용했습니다. 또한CardDeck에서 Card객체의 값 비교를 테스트할 때, equals()와 hashCode() 같은 메서드를 자동으로 생성해주기 때문에 data class로 수정하였습니다 !"*
|
|
33
|
+
|
|
34
|
+
→ **Kotlin 어휘 자가 학습** = PR #117·#138·#143 결 합류.
|
|
35
|
+
|
|
36
|
+
### 4. given-when-then 학생 자가 학습 (Thread 10)
|
|
37
|
+
|
|
38
|
+
reviewer: *"그리고 given-when-then 패턴을 활용해서 보다 가독성이 높은 테스트 코드를 작성해볼까요?"*
|
|
39
|
+
|
|
40
|
+
학생: *"테스트 코드에서도 given-when-then이라는 패턴이 존재했군요 ! 수정하였습니다"*
|
|
41
|
+
|
|
42
|
+
→ **BDD given-when-then 학생 자가 학습** = PR #109·#19 결 합류.
|
|
43
|
+
|
|
44
|
+
### 5. 추가 칭찬
|
|
45
|
+
|
|
46
|
+
- Thread 1: *"runCatching 활용을 잘 해주셨네요 👍"*.
|
|
47
|
+
- Thread 4: *"랜덤 요소가 있는 부분을 추상화를 잘 해주셨네요 👍"*.
|
|
48
|
+
- Thread 11: *"fold 활용 👍 👍"*.
|
|
49
|
+
- Thread 12: *"추상화를 통해 각 상태에 따라 로직을 수행하게 잘 구현해주셨네요 💯"*.
|
|
50
|
+
|
|
51
|
+
## 못한 점 (설계 관점)
|
|
52
|
+
|
|
53
|
+
### 1. UserDecision 패키지 이동 vs 의존성 (Thread 3)
|
|
54
|
+
|
|
55
|
+
reviewer: *"단순 패키지 이동으로 해결될 수 있는 부분일까요? 현재 도메인 모델인 Player 에서 UserDecision을 의존하고 있습니다. 단순 코멘트를 반영하는 목적이 아닌 깊게 고민해보고 이해가 가지 않는 부분은 편하게 DM으로 말씀해주셔도 됩니다."*
|
|
56
|
+
|
|
57
|
+
→ **DM 활용** = PR #129·#138·#142·#121·#153 결 합류.
|
|
58
|
+
|
|
59
|
+
### 2. ShuffleCardDeck interface 테스트 활용 X (Thread 4)
|
|
60
|
+
|
|
61
|
+
reviewer: *"테스트시에는 이 인터페이스가 활용이 안되고 있습니다."*
|
|
62
|
+
|
|
63
|
+
→ **interface-for-test-substitution** = PR #138·#143·#113·#118·#149 결 합류.
|
|
64
|
+
|
|
65
|
+
### 3. 테스트 보장 X (Thread 5) — *예상 하지 못하게* 모호
|
|
66
|
+
|
|
67
|
+
reviewer: *"이 테스트는 과연 결과를 보장할 수 있는 테스트일까요? 🧐 `예상 하지 못하게` 라는 테스트 제목이 이해가 잘 가지 않았어요."*
|
|
68
|
+
|
|
69
|
+
학생: *"만약 생성된 카드에서 모두 expectedCard와 모두 같은 경우가 있을 수 있을 수 있기 때문에, 테스트 결과를 보장할 수 없습니다 ! 해당 테스트를 삭제하도록 하겠습니다 !"*
|
|
70
|
+
|
|
71
|
+
→ **테스트 결과 보장 = 플레이키 테스트 회피** = **MCP 룰 `flaky-test-avoidance` 후보**.
|
|
72
|
+
|
|
73
|
+
### 4. State 패턴 abstract fun 미적용 (Thread 7)
|
|
74
|
+
|
|
75
|
+
reviewer: *"State 패턴의 핵심 중에 abstract fun 추상화 메서드를 활용하여 상태가 변할 때 마다 어떤 상태인지에 따라 다른 로직을 수행하는 것이 기능중에 하나인데요."*
|
|
76
|
+
|
|
77
|
+
→ **State 자식 책임 부여** = PR #93·#136·#152·#98·#36·#87·#142·#143·#138 결 합류 누적 12+ PR.
|
|
78
|
+
|
|
79
|
+
### 5. 수익 = Participant 위임 (Thread 8) — Tell-Don't-Ask
|
|
80
|
+
|
|
81
|
+
reviewer: *"수익을 계산하는 로직도 Participant 에게 위임 해보는건 어떨까요?"*
|
|
82
|
+
|
|
83
|
+
→ **Tell-Don't-Ask** = 누적 다수 PR.
|
|
84
|
+
|
|
85
|
+
### 6. Controller-View 없이 게임 가능 (Thread 13) — 테스터빌리티
|
|
86
|
+
|
|
87
|
+
reviewer:
|
|
88
|
+
|
|
89
|
+
> *"Controller에서 player에 직접 접근해서 무언가를 직접 꺼내고 넣는 작업들을 해주어야 할까요? (...) 이 코멘트의 궁극적 의도는 \"Controller와 View 없이도 블랙잭 게임을 할 수 있는가?\" 에 대해서 도메인 로직이 충분히 Controller로 부터 분리되었나? 를 고민해보시면 좋겠습니다."*
|
|
90
|
+
|
|
91
|
+
→ **Controller/View 없이 도메인 = 테스터빌리티** = PR #99 (chaehyuns) 결 + PR #87 (jaeyeongjo 테스트 = 객체 설계 명세서) 결 합류. **MCP 룰 `controller-view-domain-coupling` 강화** 누적 3+ PR.
|
|
92
|
+
|
|
93
|
+
### 7. `calculateResult` + displayResult = 함수 2 역할 (Thread 13) — CQS
|
|
94
|
+
|
|
95
|
+
reviewer:
|
|
96
|
+
|
|
97
|
+
> *"함수의 이름은 calculateResult() 이기에 함수를 진입하는 의도는 결과를 도출하기 위해서입니다.*
|
|
98
|
+
> *1. 플레이어들의 게임 결과를 가져온다*
|
|
99
|
+
> *2. 가져온 결과를 통해 수익률을 계산하여 출력한다"*
|
|
100
|
+
|
|
101
|
+
→ **CQS 위반 + 함수 분리** = PR #117·#139·#130·#141·#118 결 합류 누적 5+ PR.
|
|
102
|
+
|
|
103
|
+
### 8. 일급 컬렉션 위임 + suggestion 블록 (Thread 15)
|
|
104
|
+
|
|
105
|
+
reviewer:
|
|
106
|
+
|
|
107
|
+
> *"```suggestion*
|
|
108
|
+
> * fun getParticipantProfitResult(): List<Double> {*
|
|
109
|
+
> * val result = players.getProfitResult()*
|
|
110
|
+
> * return result*
|
|
111
|
+
> * }*
|
|
112
|
+
> *```*
|
|
113
|
+
>
|
|
114
|
+
> *와 같이 일급컬렉션을 사용하여 객체에게 도메인 로직을 집중시킬 수 있습니다. 이후 오목 미션 진행하시면서도 객체가 할 수 있는 일을 최대한 위임하는 연습을 하시면 좋을 것 같습니다 👍"*
|
|
115
|
+
|
|
116
|
+
→ **일급 컬렉션 위임 + 다음 미션 (오목) 권유** = **MCP 룰 `cross-mission-learning-bridge` 후보** — *현재 미션 → 다음 미션 학습 권유*.
|
|
117
|
+
|
|
118
|
+
### 9. blackJack.state 의존성 = 테스트 불가 (Thread 14)
|
|
119
|
+
|
|
120
|
+
reviewer:
|
|
121
|
+
|
|
122
|
+
> *"현재 blackJack.state 라는 내부적으로 의존성이 있어 테스트가 불가한 구조네요. 테스트가 불가할때는 지난 로또미션, 블랙잭 미션을 진행하며 경험했던 방법들을 이용할 수 있습니다.*
|
|
123
|
+
> *1. 테스트 불가 요소를 분리한다*
|
|
124
|
+
> *2. 의존성을 갖지 않도록 주입 받는다."*
|
|
125
|
+
|
|
126
|
+
→ **테스트 불가 = 의존성 분리** = PR #87·#129·#142·#109·#140 결 합류.
|
|
127
|
+
|
|
128
|
+
### 10. CardDeckTest fixture (Thread 10) — Test Fixture
|
|
129
|
+
|
|
130
|
+
reviewer: *"이부분은 Test Fixture를 이용해 개선해볼 수 있곘네요!"*
|
|
131
|
+
|
|
132
|
+
→ **Test Fixture** = 누적 다수.
|
|
133
|
+
|
|
134
|
+
## 대표 인용
|
|
135
|
+
|
|
136
|
+
> [kkosang PR 본문]
|
|
137
|
+
> *"제이든도 환절기에 감기 조심하세요 ㅠㅠ!"*
|
|
138
|
+
|
|
139
|
+
→ **학생 인간적 어휘** + 자가 한계 인정.
|
|
140
|
+
|
|
141
|
+
> [KwonDae Thread 9]
|
|
142
|
+
> *"조금은 시야를 환기시키기 위해 요구사항에는 없었던 룰에 대해서 생각을 해보고 적용을 하게 된다면 현재 구조에서 어떤 문제가 생길 수 있을지에 대해 고민을 유도하는 코멘트였습니다 ㅎㅎ"*
|
|
143
|
+
|
|
144
|
+
→ **reviewer 의도 자가 명료화** + *시야 환기 어휘*.
|
|
145
|
+
|
|
146
|
+
> [KwonDae Thread 15]
|
|
147
|
+
> *"이후 오목 미션 진행하시면서도 객체가 할 수 있는 일을 최대한 위임하는 연습을 하시면 좋을 것 같습니다 👍"*
|
|
148
|
+
|
|
149
|
+
→ **cross-mission 학습 권유 어휘**.
|
|
150
|
+
|
|
151
|
+
## 얻은 교훈 (보편)
|
|
152
|
+
|
|
153
|
+
1. **reviewer 의도 자가 명료화** = PR #142·#126·#130·#109 결 강화 누적 5+ PR.
|
|
154
|
+
2. **플레이키 테스트 회피** — **MCP 룰 `flaky-test-avoidance` 후보**.
|
|
155
|
+
3. **Controller/View 없이 도메인 = 테스터빌리티** — **MCP 룰 `controller-view-domain-coupling` 강화** 누적 3+ PR.
|
|
156
|
+
4. **CQS 위반 (calculateResult + displayResult)** = 누적 5+ PR.
|
|
157
|
+
5. **cross-mission 학습 권유 어휘** — **MCP 룰 `cross-mission-learning-bridge` 후보**.
|
|
158
|
+
6. **State 자식 책임 부여** = 누적 12+ PR.
|