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,391 @@
|
|
|
1
|
+
# PR #58 — [블랙잭 2단계] 수달 미션
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@otter66](https://github.com/otter66)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/58
|
|
5
|
+
- **단계:** 2단계 (베팅 / 수익률 / 블랙잭 1.5배)
|
|
6
|
+
- **리뷰어:** @laco-dev (페로로)
|
|
7
|
+
- **라인 코멘트:** 18 스레드 / 22 코멘트 — *6덱 카지노 메타포 + MatchResult getResult naming + Participant 가변 betting 노출* 토론
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **`MultiDeck` 6덱 도입 — 카지노 룰 메타포** — `private const val DECK_COUNT = 6` + `List(6) { createCardPack() }.flatten().shuffled()`. 학생 자가 인용: *"앗... 이 부분은 카지노에서의 블랙잭 게임 규칙을 반영시켰습니다! 블랙잭 게임을 할 때에는 카드 카운팅을 어렵게 하기 위해 여러개의 덱을 사용하는 멀티덱 방식을 사용하는데, 그 중에서도 6개의 덱을 사용하는 것이 일반적이라고 하여 그 부분을 적용시켜보았습니다..!"*. **현실 메타포 자가 학습 모범**. 다만 *요구사항과 동떨어짐* 진단도 동반 (못한 점 §1).
|
|
12
|
+
- **State 학습 테스트 자가 작성** — 페로로 자가 칭찬: *"여러가지 도전을 위한 학습 테스트 좋습니다. 👍🏻"*. `src/test/kotlin/study/blackjack/state/State.kt` 위치 — *production code 외 학습 테스트* 분리. **학습 가시화 모범**.
|
|
13
|
+
- **`Card data class private constructor + Card.from(rank, shape)` factory** — *호출 모호함 회피*. PR #133·#93·#136 와 같은 결.
|
|
14
|
+
- **`Cards.sum()` Ace 보정 — *`sum + 10 <= 21` 정확 조건*** — *PR #128·#114·#125·#108·#131·#132·#41·#49 와 같은 결의 표준 패턴*.
|
|
15
|
+
- **`Player abstract class + Participant / Dealer 다형성 (`canHit`)`** — 1단계 *open class* 진단 후속. *Player abstract = 공통, Participant = 베팅 보유 플레이어, Dealer = 16점 이하 hit*. PR #132·#136·#108·#133 와 같은 결의 *Participant 다형성*.
|
|
16
|
+
- **`GameResult enum + ratio: Float (WIN 1.0, BLACKJACK 0.5, DRAW 0.0, LOSE -1.0)`** — *BLACKJACK ratio = 0.5* = *보너스 비율* (1.5배 = WIN ratio 1.0 + BLACKJACK ratio 0.5). 다만 *룰 정확성 문제* 동반 (못한 점 §5).
|
|
17
|
+
- **`Dealer.getPayout(participants, results) = sum * -1`** — *딜러 수익 = 플레이어 합 × -1*. PR #131·#132·#133·#136·#49 와 같은 결.
|
|
18
|
+
- **카드 부족 룰 자가 학습 — 6덱 사용으로 카지노 표준 반영** — *학생 자가 학습 + 메타포 명시*.
|
|
19
|
+
- **BettingAmount 외부 변경 가능성 자가 해소 (커밋 진행)** — 페로로 진단 *"배팅금액이 위처럼 노출된 이유는 무엇일까요?"* + 학생 자가 답변: *"이전에 코틀린 프로퍼티에 대해 알아보았고, 코틀린에서는 기본 접근자를 메서드로 만들면 안된다는 것을 알았습니다. ... 또한, 이렇게 바꾸고 생각해보니 외부에서 자유자재로 변경이 가능한 상태이기에 값에 문제가 생길 수 있을 것이라 생각했습니다. 따라서 언제든지 외부에서 변경이 가능한 값이 아니라, 생성시 생성자로 받아 읽기전용 값으로 만들어 가지고있도록 변경하였습니다!"*. **Kotlin property 어휘 + 캡슐화 자가 학습 모범**.
|
|
20
|
+
|
|
21
|
+
## 못한 점 (설계 관점)
|
|
22
|
+
|
|
23
|
+
### 1. `MultiDeck(6덱)` 적용 — *요구사항과 동떨어짐 진단*
|
|
24
|
+
|
|
25
|
+
```kotlin
|
|
26
|
+
class MultiDeck private constructor(
|
|
27
|
+
cards: List<Card> = listOf()
|
|
28
|
+
) {
|
|
29
|
+
...
|
|
30
|
+
private val _cards: MutableList<Card> =
|
|
31
|
+
if (cards.isEmpty()) List(DECK_COUNT) { createCardPack() }.flatten().shuffled().toMutableList()
|
|
32
|
+
else cards.toMutableList()
|
|
33
|
+
|
|
34
|
+
fun draw(): Card = _cards.removeAt(0)
|
|
35
|
+
...
|
|
36
|
+
companion object {
|
|
37
|
+
private const val DECK_COUNT = 6
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
페로로 (MultiDeck.kt:22 — 미해결): *"6개의 덱을 준비시키는 이유는 무엇인가요? 요구사항과 많이 동떨어진 느낌이라 이유가 궁금합니다"*
|
|
43
|
+
|
|
44
|
+
학생 자가 답변: *"앗... 이 부분은 카지노에서의 블랙잭 게임 규칙을 반영시켰습니다!"*
|
|
45
|
+
|
|
46
|
+
→ **현실 메타포 vs 요구사항 트레이드오프**. *카지노 표준 = 6덱* 학습 가치 ↑. 다만 *우아한테크코스 블랙잭 룰* 가정 (PR #85 페로로 진단: *"커스텀 룰에서 뽑을 수 있으니까 라는 답 대신, 연습을 위해 해보시면 좋겠습니다. 지금은 우아한테크코스 블랙잭 룰을 구현하고 있으니까요"*) 와 *부분 충돌*. *현실 메타포 = 학습 가치 ↑ + 요구사항 일치 ↓*. PR #108·#133 (시아) 의 *6덱 + 카지노 무한 게임 메타포* 와 같은 결.
|
|
47
|
+
|
|
48
|
+
### 2. `MatchResult.getUniqueCountResult()` — *count == 1 인 결과 첫 번째 = naming 모호 + 부정확*
|
|
49
|
+
|
|
50
|
+
```kotlin
|
|
51
|
+
class MatchResult {
|
|
52
|
+
private val countBy: MutableMap<GameResult, Int> = ...
|
|
53
|
+
|
|
54
|
+
fun getUniqueCountResult(): GameResult =
|
|
55
|
+
this.countBy.filter { it.value == 1 }.keys.first()
|
|
56
|
+
...
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
페로로 (MatchResult.kt — 미해결): *"`getResult()`가 무엇을 반환하는 것인지 사용하는 측이 알 수 있을까요?"*
|
|
61
|
+
|
|
62
|
+
페로로 추가 (MatchResultTest.kt:13 — 미해결): *"MatchResult에 승리, 패배, 무승부 횟수를 가지고 있기 때문에 MatchResult에게 각 결과에 따른 갯수를 얻도록 하는 방법이 좋겠습니다. > 게임의 결과를 스스로 판단해서 반환하도록 만들어야 한다 `matchResult.count(GameResult.WIN); val actual = matchResult.getCountBy(GameResult.WIN)`"*
|
|
63
|
+
|
|
64
|
+
→ **`getUniqueCountResult` = *count == 1 인 결과의 첫 번째***. *플레이어 매치 1회 가정* — *count 1 인 결과 = 그 플레이어 결과*. *논리는 정합* 이지만 *naming 모호 + 사용 의도 미명료*. *`getCountBy(GameResult)` 같은 *명시적 메시지*가 정공. *MatchResult 가 자기 정보 알리는 방식*.
|
|
65
|
+
|
|
66
|
+
또한 `getUniqueCountResult` 가 *match 가 여러 번 일어났을 때 잘못 동작* — *count == 1 결과 여러 개일 수 있음 (예: WIN 1번 + LOSE 1번)*. *현재 사용처 = match 1회 가정* — *우회*. *멀티 매치 도메인 확장 시 깨짐*.
|
|
67
|
+
|
|
68
|
+
### 3. `MatchResult.reversGameResult()` — *오타 + 가변 변경 + 사용 의도 부재*
|
|
69
|
+
|
|
70
|
+
```kotlin
|
|
71
|
+
fun reversGameResult() {
|
|
72
|
+
val winTmp = this.countBy[GameResult.WIN]
|
|
73
|
+
this.countBy[GameResult.WIN] = this.countBy[GameResult.LOSE] ?: throw IllegalArgumentException()
|
|
74
|
+
this.countBy[GameResult.LOSE] = winTmp ?: throw IllegalArgumentException()
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
페로로 (MatchResult.kt — 미해결): *"키값이 없는 경우는 논리적인 오류로 보이지 않습니다. 예외를 발생시키지 않도록 만들어주세요"*
|
|
79
|
+
|
|
80
|
+
→ **`reversGameResult()` 오타 (`Revers` → `Reverse`) + Win/Lose 키 swap + ?: throw**. *Map 키 존재 보장 (countBy 초기화 시 모든 enum 포함)* 이지만 *?: throw* 우회. *논리 오류 아님* — *예외 던질 필요 없음*. 페로로 진단.
|
|
81
|
+
|
|
82
|
+
또한 *Win/Lose swap = 딜러 입장 결과*. *Dealer.matchResult.reverse() → Player 결과 도출* 의도. *명시적 메서드 명 = `asDealerResult()` / `mirrorAsDealer()`* 가 자연. *현재 reverse 는 모호*.
|
|
83
|
+
|
|
84
|
+
### 4. `Player.matchGameResult(otherPlayer)` — *분기 순서 오류 (Blackjack 분기 누락 신호)*
|
|
85
|
+
|
|
86
|
+
```kotlin
|
|
87
|
+
fun matchGameResult(otherPlayer: Player): GameResult {
|
|
88
|
+
val otherPlayerCardsSum: Int = otherPlayer.cards.sum()
|
|
89
|
+
val cardsSum = cards.sum()
|
|
90
|
+
|
|
91
|
+
return when {
|
|
92
|
+
cardsSum > MAX_SUM_NUMBER -> GameResult.LOSE
|
|
93
|
+
otherPlayerCardsSum > MAX_SUM_NUMBER -> GameResult.WIN
|
|
94
|
+
otherPlayerCardsSum > cardsSum -> GameResult.LOSE
|
|
95
|
+
otherPlayerCardsSum == cardsSum -> GameResult.DRAW
|
|
96
|
+
cards.isBlackjack() -> GameResult.BLACKJACK // ⚠ 점수 비교 후에 도달
|
|
97
|
+
else -> GameResult.WIN
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
→ **분기 순서 = Bust → 점수 비교 → 동점 → Blackjack → else Win**. *내 점수 > 상대 점수 분기가 *Blackjack 분기 위*에 있어 *블랙잭 우선순위 사라짐**. *예: 내 카드 2장 21 (블랙잭) + 상대 카드 3장 20 → matchGameResult = WIN (Blackjack 분기 도달 X)*. *블랙잭 룰 = 1.5배 보너스 사라짐*. **룰 정확성 오류**.
|
|
103
|
+
|
|
104
|
+
페로로 (GameResult.kt:7 — 미해결): *"수익금에 관한 배율은, 단순히 자신의 결과로 결정이 되지 않습니다. 가령, 플레이어가 블랙잭일때 상대의 상태에 따라 이길수도있고 비길수도있고 블랙잭일수도있습니다. 즉, 게임의 결과 != 배율이라고 정의할 수 없다는 의미라고 생각됩니다."*
|
|
105
|
+
|
|
106
|
+
학생 자가 답변: *"자신이 블랙잭임에도 상대 또한 블랙잭일 경우는 결국 무승부라고 생각하여 이 경우에는 무승부라는 GameResult를 가지도록 하였습니다!"*
|
|
107
|
+
|
|
108
|
+
→ **학생 자가 답변 = *블랙잭 vs 블랙잭 → DRAW* 정확**. 다만 *블랙잭 분기 자체가 점수 비교 후*에 있어 *대부분의 블랙잭 케이스가 WIN 흡수*. **분기 순서 + GameResult 가 배율 == 결과 = 룰 부정확**.
|
|
109
|
+
|
|
110
|
+
페로로 후속 (GameResult.kt:7 추가 진단): *"수익금에 대한 배율은 단순히 결과로 계산되지 않고, 비교하는 상대방의 카드 상태를 이용해 같이 계산이 됩니다."* PR #49 (써니 2단계) 와 같은 결 — *수익률 = 결과 + 상대 상태 결합*.
|
|
111
|
+
|
|
112
|
+
### 5. `GameResult.BLACKJACK(0.5f)` — *룰 misleading + 배율 표현 부정확*
|
|
113
|
+
|
|
114
|
+
```kotlin
|
|
115
|
+
enum class GameResult(val ratio: Float) {
|
|
116
|
+
WIN(1.0f),
|
|
117
|
+
BLACKJACK(0.5f),
|
|
118
|
+
DRAW(0.0f),
|
|
119
|
+
LOSE(-1.0f),
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
→ **`BLACKJACK.ratio = 0.5f` = *보너스 비율*** (전체 = WIN 1.0 + BLACKJACK 0.5 = 1.5). 다만 *호출자가 BLACKJACK 만 받으면 *0.5 배율* 이해 어려움*. *PR #132·#108·#136·#90 의 BLACKJACK_PROFIT = 1.5f* (전체 배율) 와 *반대 트레이드오프*.
|
|
124
|
+
|
|
125
|
+
**BLACKJACK 결과는 *WIN 의 변형* — 단독 적용 시 의미 부정확**. *호출자가 BLACKJACK → WIN ratio + BLACKJACK ratio 두 단계 합산* 강제. *PR #132·#108·#136 의 1.5 직접 표현* 이 *호출자 친화*.
|
|
126
|
+
|
|
127
|
+
### 6. `Participant.bettingAmount` 외부 노출 — *@JvmField 사용 흔적 + 자가 학습*
|
|
128
|
+
|
|
129
|
+
학생 자가 답변 (Participant.kt — 미해결): *"해당 어노테이션이 없을 때 아래의 오류가 발생하여 추가하였습니다. `fun <set-bettingAmount>(<set-?>: BettingAmount): Unit defined in blackjack.domain.player.Participant; fun setBettingAmount(newBettingAmount: BettingAmount): Unit defined in blackjack.domain.player.Participant`. 하지만 이전에 코틀린 프로퍼티에 대해 알아보았고, 코틀린에서는 기본 접근자를 메서드로 만들면 안된다는 것을 알았습니다. 따라서 다시 코드를 봤을때 기본 접근자를 사용하는 것이 문제라는 것을 알았고, 기본 접근자를 만들지 않고 변수의 값을 수정하도록 하였습니다!"*
|
|
130
|
+
|
|
131
|
+
→ **`@JvmField` 어노테이션 사용 흔적 = Kotlin property accessor 우회**. *Java interop 의도* 가능성 + *Kotlin 어휘 미숙 신호*. 학생 자가 학습 + 후속 반영 = *생성자 val + 읽기 전용*. **Kotlin property accessor 어휘 학습 모범**.
|
|
132
|
+
|
|
133
|
+
### 7. `Card.from(number, shape).find` 매번 순회 — *52장 lookup 비용*
|
|
134
|
+
|
|
135
|
+
```kotlin
|
|
136
|
+
data class Card private constructor(...) {
|
|
137
|
+
companion object {
|
|
138
|
+
private val CARDS: List<Card> = createCards()
|
|
139
|
+
|
|
140
|
+
fun from(cardNumber: CardNumber, cardShape: CardShape): Card {
|
|
141
|
+
return CARDS.find { cardNumber == it.number && cardShape == it.shape } ?: throw IllegalArgumentException()
|
|
142
|
+
}
|
|
143
|
+
...
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
페로로 (Card.kt:12 — 미해결): *"재사용의 이점을 가져갔지만, 생성을 할때마다 불필요한 순회가 많이 발생합니다. 만약 카드 52번째의 카드를 계속해서 요청한다면 매번 52번의 코드가 반복됩니다. 적절한 자료구조를 이용해서 해결해보세요"*
|
|
149
|
+
|
|
150
|
+
→ **`List.find` = O(N)**. *Map<(rank, shape), Card>* = *O(1)*. *Kotlin Pair 키 또는 nested map*. 미세 성능. *학습 가치*. PR #108·#133 의 *findLast naming 부조화* 와 같은 결.
|
|
151
|
+
|
|
152
|
+
### 8. `data class private constructor` — *data class 의 copy + private 충돌*
|
|
153
|
+
|
|
154
|
+
```kotlin
|
|
155
|
+
data class Card private constructor(...)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
페로로 (Card.kt:3 — 미해결): *"data class를 사용하면 private 생성자를 이용하는 장점이 가려집니다. 관련해서 검색을 해보시면 재미있는 내용이 많이 있습니다"*
|
|
159
|
+
|
|
160
|
+
→ **data class 의 `copy()` 가 자동 생성 + private constructor 우회**. *`card.copy(number = ACE)` 호출 시 private constructor 호출* — *외부에서 임의 Card 생성 가능성*. **data class + private constructor = 모순**. *Kotlin 어휘 함정*.
|
|
161
|
+
|
|
162
|
+
해결: *`copy` 명시적 override + private* 또는 *non-data class*. PR #136·#133 의 *non-data class + factory* 와 같은 결.
|
|
163
|
+
|
|
164
|
+
### 9. `Cards.MAX_SUM_NUMBER` 위치 모순 — *플레이어 점수 상수가 Player.companion*
|
|
165
|
+
|
|
166
|
+
페로로 (Cards.kt:26 — 미해결): *"21점이라는 상수값이 플레이어에 정의되어 MAX_SUM_NUMBER라는 의미를 가지는게 맞을까요?"*
|
|
167
|
+
|
|
168
|
+
```kotlin
|
|
169
|
+
// Player
|
|
170
|
+
companion object {
|
|
171
|
+
const val CARD_SETTING_COUNT = 2
|
|
172
|
+
const val MAX_SUM_NUMBER = 21
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Cards
|
|
176
|
+
fun isBlackjack() =
|
|
177
|
+
(_cards.size == Player.CARD_SETTING_COUNT) && (sum() == MAX_SUM_NUMBER)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
→ **`MAX_SUM_NUMBER = 21` 이 Player companion**. *Cards 가 자기 점수 룰 (21 초과 = Bust)* 알아야 함 → *Cards.MAX_SUM_NUMBER* 가 자연. *현재 Cards 가 Player.MAX_SUM_NUMBER 의존* = *Player → Cards 단방향이어야 하는데 Cards → Player 역의존*. PR #131·#136 와 같은 결의 *Score 룰 위치*.
|
|
181
|
+
|
|
182
|
+
### 10. `Cards.containsCardNumber(CardNumber.ONE)` — *Ace = ONE 표현*
|
|
183
|
+
|
|
184
|
+
```kotlin
|
|
185
|
+
if (containsCardNumber(CardNumber.ONE) && sum + ACE_BONUS <= MAX_SUM_NUMBER) return sum + ACE_BONUS
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
→ **`CardNumber.ONE` = *Ace 표현***. *블랙잭 도메인에서 Ace 의 가치 = 1 또는 11*. *CardNumber.ONE = Ace ratio 1* 의미라면 *naming = ACE / CardNumber.ACE* 가 정공. *현재 ONE = 1 점수 + Ace 의미* 가 *어휘 부정확*. PR #128·#131·#136·#90 의 *Rank.ACE / CardNumber.ACE* 와 *반대 트레이드오프*.
|
|
189
|
+
|
|
190
|
+
### 11. `Player.setFirstTurnCards(multiDeck)` — *플레이어가 deck 의존*
|
|
191
|
+
|
|
192
|
+
```kotlin
|
|
193
|
+
fun setFirstTurnCards(multiDeck: MultiDeck) =
|
|
194
|
+
repeat(CARD_SETTING_COUNT) { cards.add(multiDeck.draw()) }
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
페로로 (Dealer.kt — 미해결): *"`participants.getPayout(this)` 기능을 만들어도 되지 않을까요?"* (관련 토론)
|
|
198
|
+
|
|
199
|
+
페로로 (Player.kt 직접 진단 — 미해결): *"이 기능은 Cards가 하도록 만들어주세요"*
|
|
200
|
+
|
|
201
|
+
→ **`setFirstTurnCards` 가 Player 메서드 + deck 의존**. *Cards 가 자기 카드 채움*이 *Cards 자기 책임*. *Player → Cards 메시지* 위임. PR #133·#108 (시아) 의 *Participant.draw(card)* 와 *반대 트레이드오프* (시아는 카드 한 장 인자).
|
|
202
|
+
|
|
203
|
+
### 12. `Dealer.getPayout(participants, results)` — *복잡한 인자 + Tell-Don't-Ask 미달*
|
|
204
|
+
|
|
205
|
+
```kotlin
|
|
206
|
+
fun getPayout(participants: Participants, participantsResults: List<MatchResult>): Int {
|
|
207
|
+
var sum = 0
|
|
208
|
+
participants.values.forEachIndexed { index, it ->
|
|
209
|
+
sum += it.bettingAmount.getPayout(participantsResults[index].getUniqueCountResult())
|
|
210
|
+
}
|
|
211
|
+
return sum * (-1)
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
페로로 (BlackjackGame.kt — 미해결): *"마찬가지로 participants.values를 꺼내서 사용하지 않고 participants가 스스로 하도록 만들어주세요. 다른 코드도 모두 동일한 의견입니다"*
|
|
216
|
+
|
|
217
|
+
→ **`participants.values.forEachIndexed` = *participants 정보 빼서 외부 순회***. *Participants.getDealerPayout(): Int* 메시지가 *Participants 자기 책임*. *현재 Dealer 가 participants + results 두 인자 + 인덱스 매칭* = *복잡도 ↑ + Demeter 위반*.
|
|
218
|
+
|
|
219
|
+
또한 *`participantsResults[index]`* 가 *List + index 의존* — *Map<Participant, MatchResult>* 가 *id 안전*.
|
|
220
|
+
|
|
221
|
+
### 13. `Player` 가 *MatchResult 보유* — *카드 변경 시 데이터 오염 가능성*
|
|
222
|
+
|
|
223
|
+
페로로 (Player.kt — 미해결): *"같은 의견을 반복해서 드리는 것 같습니다. 위 함수에서 MatchResult를 반환하지 않고, 참가자가 계속해서 가지고 있는 상태로 만든 이유는 무엇인가요? 카드를 3장 가지고있는상태로 결과를 만들고 또다시 카드를 받으면 이전 결과는 데이터가 현재와 일치하지 않는 데이터 오염이 되지는 않을까요?"*
|
|
224
|
+
|
|
225
|
+
→ **Participant 가 *결과 + 카드 둘 다 보유* = 데이터 일관성 위반**. *결과 = 시점 의존*. *Participant 가 결과 보유 → 카드 변경 → 결과 outdated*. *결과 반환 + Result 객체*가 *불변 시점 표현*. PR #49 (써니) 의 *Result(participant, profit)* 와 같은 결. *PR #85 (하디) 의 `by lazy`* 도 같은 결의 *시점 고정*.
|
|
226
|
+
|
|
227
|
+
### 14. `Cards.toMutableList()` 생성자 인자 → *MutableList 변환*
|
|
228
|
+
|
|
229
|
+
```kotlin
|
|
230
|
+
class Cards(cards: List<Card> = listOf()) {
|
|
231
|
+
constructor(vararg cards: Pair<CardNumber, CardShape>) : this(cards.map { Card.from(it.first, it.second) }.toList())
|
|
232
|
+
|
|
233
|
+
private val _cards = cards.toMutableList()
|
|
234
|
+
...
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
→ **`List` 인자 + 내부 MutableList 사본**. 정공. PR #90·#132·#108 와 같은 결.
|
|
239
|
+
|
|
240
|
+
페로로 진단 (Cards.kt — 미해결, 미사용 함수): *"이 코드는 외부에서 사용되지 않습니다. 테스트 코드에서만 사용되는 코드는 사용한다고 말하지 않습니다. 🙏🏻 이 기능을 테스트하기 위해서 다른 방법을 사용하는 순서로 이어져야 합니다."*
|
|
241
|
+
|
|
242
|
+
→ **테스트 전용 코드 지양**. PR #53·#41·#88 와 같은 결.
|
|
243
|
+
|
|
244
|
+
### 15. `BlackjackGame` 가 *Controller 이름만 변경* — 페로로 진단
|
|
245
|
+
|
|
246
|
+
페로로 (BlackjackController.kt — 미해결): *"아래 내용은 참고만 해주세요. 변경은 하지 않으셔도 됩니다. 블랙잭 게임 도메인 모델을 만들어 게임의 로직을 만들어 보신 시도가 좋았습니다. 다만, 지금 구조로 보면 단순히 컨트롤러의 이름이 BlackGame으로 바뀐 것 정도로만 느껴집니다. 예를 들어 블랙잭 게임을 한다면 \"게임 시작\", \"게임 결과\" 라는 두가지 관점의 개념이 있습니다. 하지만 구현한 블랙잭 게임에서는 아래 모든 코드를 호출해야 한다는 것을 외부에서 반드시 알아야만 합니다. `blackjackGame.bettingParticipants(); blackjackGame.setFirstTurnPlayersCards(); blackjackGame.hitPlayersCards();` 블랙잭 게임을 제어하는 하나의 도메인이라면 이런 구조를 생각해볼 수 있겠습니다 `class BlackjackGame(...) { fun start(): BlackjackGameResult { ... } }`"*
|
|
247
|
+
|
|
248
|
+
→ **`BlackjackGame.start(): BlackjackGameResult` 한 메서드** — *외부 진입점 단일화*. *호출자가 모든 진행 단계 알 필요 X*. PR #131·#132·#136·#152 와 같은 결의 *Game 단일 진입점*.
|
|
249
|
+
|
|
250
|
+
### 16. `BlackjackGame.read/print UI 이름 포함` — 도메인-뷰 결합
|
|
251
|
+
|
|
252
|
+
페로로 (BlackjackGame.kt — 미해결): *"도메인 모델에서는 read, print와 같은 UI와 관련된 이름이 포함되면 안됩니다. 파라미터, 함수이름 모두 동일합니다"*
|
|
253
|
+
|
|
254
|
+
→ **도메인 메서드명 = UI 어휘 X**. *`readXX` / `printXX`* 는 *View 책임*. *도메인 = 비즈니스 로직 메시지*. PR #132·#90·#88·#41 와 같은 결.
|
|
255
|
+
|
|
256
|
+
### 17. `MatchResult.countBy: MutableMap` 외부 노출 (`getResults()`) — *외부 가변 변경 가능성*
|
|
257
|
+
|
|
258
|
+
```kotlin
|
|
259
|
+
fun getResults(): Map<GameResult, Int> = this.countBy.toMap()
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
→ **`toMap()` 사본 반환** — *외부 변경 차단*. 정공. *방어적 복사*.
|
|
263
|
+
|
|
264
|
+
다만 `countBy: MutableMap` 내부 보유 + *count 메서드가 putIfAbsent + plus 패턴* 이 *Kotlin 어휘 = `countBy.merge(result, 1, Int::plus)`* 한 줄 가능. *imperative + var* 가 *Kotlin 어휘 미숙*. PR #49 (써니) 의 *var profit + forEach* 와 같은 결.
|
|
265
|
+
|
|
266
|
+
### 18. `MatchResult` 의 *주석 처리된 동일 클래스 정의* — *Dead code*
|
|
267
|
+
|
|
268
|
+
```kotlin
|
|
269
|
+
class MatchResult { ... }
|
|
270
|
+
|
|
271
|
+
// class MatchResult {
|
|
272
|
+
// private val countBy: MutableMap<GameResult, Int> = ...
|
|
273
|
+
// fun count(gameResult: GameResult) { ... }
|
|
274
|
+
// ...
|
|
275
|
+
// }
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
→ **동일 클래스 주석 처리** — *Dead code*. *git history 가 변경 추적*. *주석으로 코드 보존*은 *코드베이스 오염*. *Kotlin 어휘 = 즉시 삭제*. PR #88 (채드) 의 *부 생성자 미사용 자가 삭제* 와 같은 결의 *YAGNI*.
|
|
279
|
+
|
|
280
|
+
## 리뷰어 의견 요지
|
|
281
|
+
|
|
282
|
+
- **블랙잭 도메인 룰 정확성 = 결과 + 상대 상태** — *블랙잭 vs 블랙잭 = DRAW*, *블랙잭 vs Bust = WIN*. *분기 순서 + 우선순위*.
|
|
283
|
+
- **Participant 가 *결과 보유 = 데이터 오염 가능성*** — *결과 = 시점 의존*. *카드 변경 시 outdated*. *불변 Result 객체*.
|
|
284
|
+
- **`getResult()` naming 모호 = 호출자가 의미 모름** — *`getCountBy(GameResult)` 같은 명시적 메시지*.
|
|
285
|
+
- **`reverseGameResult` 오타 + 사용 의도 모호** — *예외 던질 필요 없음*.
|
|
286
|
+
- **data class + private constructor = copy 우회** — *Kotlin 어휘 함정*.
|
|
287
|
+
- **6덱 = 카지노 메타포 + 요구사항 동떨어짐** — *학습 가치 vs 룰 일치 트레이드오프*.
|
|
288
|
+
- **`Card.find` 매번 순회 = O(N), Map = O(1)** — *적절한 자료구조*.
|
|
289
|
+
- **`MAX_SUM_NUMBER = 21` Player 위치 모순** — *Cards 자기 룰*.
|
|
290
|
+
- **`BlackjackGame` 이 Controller 이름만 변경 = 외부 단계 노출 자기 책임 부재** — *`start(): BlackjackGameResult` 단일 진입점*.
|
|
291
|
+
- **도메인 메서드명 UI 어휘 (`readXX`/`printXX`) X** — *비즈니스 로직 어휘*.
|
|
292
|
+
- **테스트 전용 코드 지양** — *생산 코드 오염 회피*.
|
|
293
|
+
|
|
294
|
+
## 대표 인용
|
|
295
|
+
|
|
296
|
+
**페로로 (배율 = 결과 + 상대 상태 결합, GameResult.kt:7):**
|
|
297
|
+
> 수익금에 관한 배율은, 단순히 자신의 결과로 결정이 되지 않습니다.
|
|
298
|
+
> 가령, 플레이어가 블랙잭일때
|
|
299
|
+
> 상대의 상태에 따라 이길수도있고 비길수도있고 블랙잭일수도있습니다.
|
|
300
|
+
>
|
|
301
|
+
> 즉, 게임의 결과 != 배율이라고 정의할 수 없다는 의미라고 생각됩니다.
|
|
302
|
+
|
|
303
|
+
**페로로 (Participant 결과 보유 = 데이터 오염, Player.kt):**
|
|
304
|
+
> 같은 의견을 반복해서 드리는 것 같습니다.
|
|
305
|
+
> 위 함수에서 MatchResult를 반환하지 않고, 참가자가 계속해서 가지고 있는 상태로 만든 이유는 무엇인가요?
|
|
306
|
+
>
|
|
307
|
+
> 카드를 3장 가지고있는상태로 결과를 만들고
|
|
308
|
+
> 또다시 카드를 받으면 이전 결과는 데이터가 현재와 일치하지 않는 데이터 오염이 되지는 않을까요?
|
|
309
|
+
|
|
310
|
+
**페로로 (BlackjackGame = Controller 이름만 변경, BlackjackController.kt):**
|
|
311
|
+
> 다만, 지금 구조로 보면 단순히 컨트롤러의 이름이 BlackGame으로 바뀐 것 정도로만 느껴집니다.
|
|
312
|
+
>
|
|
313
|
+
> 예를 들어 블랙잭 게임을 한다면 "게임 시작", "게임 결과" 라는 두가지 관점의 개념이 있습니다.
|
|
314
|
+
> 하지만 구현한 블랙잭 게임에서는 아래 모든 코드를 호출해야 한다는 것을 외부에서 반드시 알아야만 합니다.
|
|
315
|
+
> ```kotlin
|
|
316
|
+
> blackjackGame.bettingParticipants()
|
|
317
|
+
> blackjackGame.setFirstTurnPlayersCards()
|
|
318
|
+
> blackjackGame.hitPlayersCards()
|
|
319
|
+
> ...
|
|
320
|
+
> ```
|
|
321
|
+
>
|
|
322
|
+
> 블랙잭 게임을 제어하는 하나의 도메인이라면 이런 구조를 생각해볼 수 있겠습니다
|
|
323
|
+
> ```kotlin
|
|
324
|
+
> class BlackjackGame(...) {
|
|
325
|
+
> fun start(): BlackjackGameResult { ... }
|
|
326
|
+
> }
|
|
327
|
+
> ```
|
|
328
|
+
|
|
329
|
+
**페로로 (6덱 요구사항 동떨어짐, MultiDeck.kt:22):**
|
|
330
|
+
> 6개의 덱을 준비시키는 이유는 무엇인가요?
|
|
331
|
+
> 요구사항과 많이 동떨어진 느낌이라 이유가 궁금합니다
|
|
332
|
+
|
|
333
|
+
**페로로 (data class + private constructor, Card.kt:3):**
|
|
334
|
+
> data class를 사용하면 private 생성자를 이용하는 장점이 가려집니다.
|
|
335
|
+
> 관련해서 검색을 해보시면 재미있는 내용이 많이 있습니다
|
|
336
|
+
|
|
337
|
+
**페로로 (도메인 = UI 어휘 X, BlackjackGame.kt):**
|
|
338
|
+
> 도메인 모델에서는 read, print와 같은 UI와 관련된 이름이 포함되면 안됩니다.
|
|
339
|
+
> 파라미터, 함수이름 모두 동일합니다
|
|
340
|
+
|
|
341
|
+
**페로로 (자료구조, Card.kt:12):**
|
|
342
|
+
> 재사용의 이점을 가져갔지만, 생성을 할때마다 불필요한 순회가 많이 발생합니다.
|
|
343
|
+
> 만약 카드 52번째의 카드를 계속해서 요청한다면 매번 52번의 코드가 반복됩니다.
|
|
344
|
+
>
|
|
345
|
+
> 적절한 자료구조를 이용해서 해결해보세요
|
|
346
|
+
|
|
347
|
+
**학생 자가 답변 (카지노 6덱 메타포, MultiDeck.kt:22):**
|
|
348
|
+
> 앗... 이 부분은 카지노에서의 블랙잭 게임 규칙을 반영시켰습니다!
|
|
349
|
+
> 블랙잭 게임을 할 때에는 카드 카운팅을 어렵게 하기 위해 여러개의 덱을 사용하는 멀티덱 방식을 사용하는데,
|
|
350
|
+
> 그 중에서도 6개의 덱을 사용하는 것이 일반적이라고 하여 그 부분을 적용시켜보았습니다..!
|
|
351
|
+
|
|
352
|
+
**학생 자가 학습 (Kotlin property 어휘 + 캡슐화, Participant.kt):**
|
|
353
|
+
> 이전에 코틀린 프로퍼티에 대해 알아보았고, 코틀린에서는 기본 접근자를 메서드로 만들면 안된다는 것을 알았습니다.
|
|
354
|
+
> 따라서 다시 코드를 봤을때 기본 접근자를 사용하는 것이 문제라는 것을 알았고, 기본 접근자를 만들지 않고 변수의 값을 수정하도록 하였습니다!
|
|
355
|
+
>
|
|
356
|
+
> 또한, 이렇게 바꾸고 생각해보니 외부에서 자유자재로 변경이 가능한 상태이기에 값에 문제가 생길 수 있을 것이라 생각했습니다.
|
|
357
|
+
> 따라서 언제든지 외부에서 변경이 가능한 값이 아니라, 생성시 생성자로 받아 읽기전용 값으로 만들어 가지고있도록 변경하였습니다!
|
|
358
|
+
|
|
359
|
+
## 얻은 교훈
|
|
360
|
+
|
|
361
|
+
1. ***Participant 가 결과 보유 = 데이터 일관성 위반***. *결과 = 시점 의존*. *카드 변경 시 outdated*. *불변 Result 객체* 가 *시점 고정*. PR #49 (써니) 의 *Result(participant, profit)* / PR #85 (하디) 의 *PlayerResult.profit by lazy* 와 같은 결.
|
|
362
|
+
|
|
363
|
+
2. ***`BlackjackGame.start(): BlackjackGameResult` 단일 진입점***. *외부 호출자가 모든 단계 알 필요 X*. *Game 자기 진행 + 결과 반환*. PR #131·#132·#136·#152·#41·#53 와 같은 결의 *god-object 해결 정공*.
|
|
364
|
+
|
|
365
|
+
3. ***도메인 메서드명 UI 어휘 X***. *`readXX` / `printXX` = View 책임*. *도메인 = 비즈니스 로직 어휘*. PR #132·#90·#88·#41 와 같은 결.
|
|
366
|
+
|
|
367
|
+
4. ***data class + private constructor = copy 우회 = Kotlin 어휘 함정***. *외부에서 `card.copy(...)` 호출 시 private 생성자 우회*. *non-data class + factory* 또는 *copy override + private* 정공. PR #136·#133 와 같은 결의 *Card private constructor + named factory*.
|
|
368
|
+
|
|
369
|
+
5. ***6덱 = 카지노 메타포 + 요구사항 동떨어짐 트레이드오프***. *현실 메타포 = 학습 가치 ↑*. *우아한테크코스 룰 = 1덱 가정*. *학습 vs 일치* 트레이드오프. PR #108·#133 (시아) 와 같은 결.
|
|
370
|
+
|
|
371
|
+
6. ***`Card.find` O(N) → `Map<(rank, shape), Card>` O(1)***. *52장 lookup 반복 시 N^2 비용*. *적절한 자료구조 = Hash Map*. PR #108·#133 와 같은 결의 *findLast naming + 자료구조*.
|
|
372
|
+
|
|
373
|
+
7. ***`MAX_SUM_NUMBER = 21` Player 위치 모순 = 룰 위치 분산***. *Cards 가 자기 점수 룰 알아야 함*. *Cards → Player 역의존* 함정. PR #131·#136 와 같은 결.
|
|
374
|
+
|
|
375
|
+
8. ***분기 순서 = 룰 우선순위***. *Bust → 블랙잭 → 점수 비교* 순서. *현재 점수 비교 후 블랙잭 분기 = 우선순위 사라짐*. *블랙잭 룰 = 1.5배 보너스 미적용*. PR #128·#125·#114·#108·#133·#132·#136 와 같은 결.
|
|
376
|
+
|
|
377
|
+
9. ***`MatchResult.reverseGameResult()` 오타 + Win/Lose swap + 사용 의도 모호***. *Dealer 입장 결과 = Player 결과 mirror* 의도. *명시적 메서드명 = `asDealerResult()` / `mirrorAsDealer()`* 가 정공. *현재 reverse 는 모호 + 오타*.
|
|
378
|
+
|
|
379
|
+
10. ***`@JvmField` = Kotlin property accessor 우회 = Java interop 신호***. *순수 Kotlin 프로젝트에선 불필요*. *학생 자가 학습 + 후속 반영 = Kotlin 어휘 정공*. *Kotlin 기본 접근자 = property*. PR #133·#108·#132 와 같은 결의 *Kotlin property 어휘*.
|
|
380
|
+
|
|
381
|
+
11. ***`CardNumber.ONE = Ace 표현` = 어휘 부정확***. *Ace = 점수 1 또는 11 도메인 의미*. *CardNumber.ACE* 가 *블랙잭 도메인 어휘 정공*. PR #128·#131·#136·#90 의 *Rank.ACE / CardNumber.ACE* 와 *반대 트레이드오프*.
|
|
382
|
+
|
|
383
|
+
12. ***주석 처리된 코드 = Dead code***. *git history 가 변경 추적*. *주석 보존 = 코드베이스 오염*. *YAGNI*. PR #88·#41 와 같은 결.
|
|
384
|
+
|
|
385
|
+
13. ***학습 테스트 (`src/test/kotlin/study/...`) = 학습 가시화 모범***. *production code 외 학습 코드 분리*. *State 패턴 학습 + 도전 시도*. *학습 테스트 분리 + 페로로 칭찬 모범*.
|
|
386
|
+
|
|
387
|
+
14. ***`BLACKJACK ratio = 0.5f` (보너스 비율) vs `1.5f` (전체 배율) 트레이드오프***. *otter66 = 보너스 비율 (WIN 1.0 + BLACKJACK 0.5 = 1.5)*. *PR #132·#108·#136·#90 = 전체 배율 1.5*. *호출자 친화 = 전체 배율 직접 표현*.
|
|
388
|
+
|
|
389
|
+
15. ***`Players.values.forEachIndexed + 인덱스 매칭` = Demeter + 복잡도***. *Participants.getDealerPayout(): Int* 메시지가 *Participants 자기 책임*. *Map<Participant, MatchResult>* 가 *id 안전*. PR #132·#108·#133 와 같은 결.
|
|
390
|
+
|
|
391
|
+
16. ***학생 자가 학습 + 자가 답변 풍부 = 학습 가시화 모범***. *Kotlin property 어휘 + 캡슐화 자가 학습 + 카지노 메타포 명시 + 후속 반영 흐름*. *학생이 자기 의도 명시 + 페로로 진단 흡수* 패턴. PR #128·#135·#108·#133·#136·#41 와 같은 결.
|