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,122 @@
|
|
|
1
|
+
# PR #37 — [코건] 2단계 블랙잭
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@DYGames](https://github.com/DYGames) (코건)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/37
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** [@galcyurio](https://github.com/galcyurio)
|
|
7
|
+
- **라인 코멘트:** 9 스레드 — *학생 자가 답변 4 thread + PR 본문 자가 질문 2개 / `process()` Controller vs main 테스트 가능성 + 3개 인스턴스 변수 원칙 = 가이드 / 절대 X + Money 연산자 오버로딩 + Controller 테스트 도전 + Fake 구현체 + `onPrint()` 고차함수 출력 호출 체크*
|
|
8
|
+
- **DYGames 양 단계 완성** (1단계 #14).
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
### 1. PR 본문 자가 질문 2개
|
|
13
|
+
|
|
14
|
+
PR 본문:
|
|
15
|
+
|
|
16
|
+
> *"현재 컨트롤러 로직을 최대한 간소화해보았는데, 여기서 더 불필요한 로직이 있는지 궁금합니다. 또한 **컨트롤러에 `process()`라는 함수가 있는데, 이를 `main()` 함수로 이동해야 할지, 컨트롤러에 두는게 맞는지 궁금합니다.**"*
|
|
17
|
+
|
|
18
|
+
### 2. Controller 테스트 + Fake 구현체 칭찬 (Thread 5·7)
|
|
19
|
+
|
|
20
|
+
reviewer Thread 5: *"Controller 테스트 :+1:"*
|
|
21
|
+
|
|
22
|
+
reviewer Thread 7: *"Fake 구현체 :+1:"*
|
|
23
|
+
|
|
24
|
+
## 못한 점 (설계 관점)
|
|
25
|
+
|
|
26
|
+
### 1. `process()` Controller vs main = 테스트 가능성 (Thread 0) — 정점
|
|
27
|
+
|
|
28
|
+
reviewer (학생 PR 본문 자가 질문 답):
|
|
29
|
+
|
|
30
|
+
> *"지금처럼 Controller에 위치시키는게 더 올바른 위치로 보입니다. **Controller에 있으면 `process()` 함수도 테스트가 가능하지만 `main()` 함수에 위치시키는 순간 해당 코드들은 테스트가 힘들어지기 때문입니다.**"*
|
|
31
|
+
|
|
32
|
+
→ **MCP 룰 `process-in-controller-vs-main-testability`** ⭐⭐⭐ **신규** — *진행 흐름 위치 = 테스트 가능성으로 판단*. PR #42 (`controller-presentation-logic-must-test`)·PR #48 (`controller-to-domain-test-enablement`) 결 합류 → ***Controller 테스트 가치 어휘 누적 7 PR*** ⭐⭐⭐ 정점 강화.
|
|
33
|
+
|
|
34
|
+
### 2. 3개 인스턴스 변수 원칙 = 가이드 / 절대 X (Thread 6) — 정점
|
|
35
|
+
|
|
36
|
+
학생 자가 의문 정점:
|
|
37
|
+
|
|
38
|
+
> *"또 미션 요구 사항 중 `3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.`라는 사항이 있는데, `Player`클래스에서 `name`,`bet`,`cards` 이렇게 3개의 인스턴스 변수를 가지고 있는데 `bet`과 `cards`를 `BetInfo`새로운 클래스로 분리한다고 하면 `Player` 클래스는 단순히 `name`과 `BetInfo`라는 **두개의 상태를 가지고 있고 역할은 없는 클래스로 변한다고 생각**됩니다.*
|
|
39
|
+
>
|
|
40
|
+
> *혹시 해당 요구 사항을 지키기 위해 제가 다른 관점에서 생각해볼 점이 있는지 궁금합니다!"*
|
|
41
|
+
|
|
42
|
+
reviewer:
|
|
43
|
+
|
|
44
|
+
> *"지금 상황에서는 오히려 나누지 않는게 더 나아보입니다.*
|
|
45
|
+
>
|
|
46
|
+
> *해당 요구사항은 클래스를 잘게 나누도록 가이드하는 하나의 원칙일 뿐입니다. **원칙을 따르는 것은 좋지만 절대적으로 항상 올바른 원칙은 없기에 모든 경우에 적용시켜서는 안됩니다.**"*
|
|
47
|
+
|
|
48
|
+
→ **MCP 룰 `principle-as-guide-not-absolute`** ⭐⭐⭐ **신규 정점** — *3 인스턴스 변수 원칙 = 가이드 / 절대 적용 X*. PR #38 (`primitive-fn-conversion-as-temporary-fix` 임시 방편 vs 본질)·PR #62 (`mutable-team-policy-no-single-answer`)·PR #43 (`responsibility-of-judging-no-single-answer`) 결 합류 누적 **4 PR 원칙 vs 본질 단일 답 거부 정점**.
|
|
49
|
+
|
|
50
|
+
→ **MCP 룰 `forced-class-division-without-role`** ⭐⭐⭐ 신규 — *역할 없는 클래스 분리 = 분리 X 권유*. PR #42 (`info-suffix-as-misplaced-data` PlayerInfo) 결 합류 누적 2 PR.
|
|
51
|
+
|
|
52
|
+
→ **MCP `oh-my-oop` 핵심 가치 학생 측 메타 어휘** — *원칙 준수 vs 역할 명시 학생 자가 의문* = 도구 핵심 가치 (책임-역할-협력) 학생 측 자각.
|
|
53
|
+
|
|
54
|
+
### 3. Controller 테스트 도전 (Thread 1)
|
|
55
|
+
|
|
56
|
+
reviewer:
|
|
57
|
+
|
|
58
|
+
> *"BlackjackController에 대한 테스트 코드를 작성해보는 것에 도전해보시면 좋겠습니다. 현재는 View를 직접적으로 의존하고 있어서 테스트하기 힘든 코드입니다. **어떻게하면 Controller에 대한 테스트 코드도 작성할 수 있을지 고민해보세요.**"*
|
|
59
|
+
|
|
60
|
+
→ **Controller 테스트 = 7 PR 누적** = PR #37·#42·#48·#47·#72·#43·#54 — Controller 어휘 최정점.
|
|
61
|
+
|
|
62
|
+
### 4. Money 연산자 오버로딩 (Thread 2)
|
|
63
|
+
|
|
64
|
+
reviewer: *"값을 꺼내서 쓰는 대신 `bet * 2`와 같이 코드를 작성할 수 있도록 만들어보세요."*
|
|
65
|
+
|
|
66
|
+
학생 자가 답변: *"`Money` 클래스에서 `times()` 연산자를 오버로딩 해 구현하였습니다."*
|
|
67
|
+
|
|
68
|
+
→ **MCP 룰 `operator-overload-times-domain`** ⭐⭐ 신규 — *연산자 오버로딩 = 도메인 어휘*. PR #47 (`operator fun` 칭찬) 결 합류 누적 2 PR.
|
|
69
|
+
|
|
70
|
+
### 5. 한 줄 너무 많은 처리 → 변수/함수 분리 (Thread 3·4)
|
|
71
|
+
|
|
72
|
+
reviewer Thread 3:
|
|
73
|
+
|
|
74
|
+
> *"한 줄에서 너무 많은 것을 처리하고 있습니다. `playerCardNumberSum in (dealerCardNumberSum + 1)..GameRule.WINNING_NUMBER`이 무엇인지 (...) **변수로 선언하고 해당 변수의 이름을 통해 역할을 드러내주세요.**"*
|
|
75
|
+
|
|
76
|
+
reviewer Thread 4:
|
|
77
|
+
|
|
78
|
+
> *"한 줄에서 너무 많은 일을 하고 있습니다. 함수로 분리하거나 지역 변수로 분리해보세요. **불필요한 `let()` 사용입니다. 오히려 변수를 선언하는 것이 가독성에 더 도움이 됩니다.**"*
|
|
79
|
+
|
|
80
|
+
학생 자가 답변: *"적절한 변수명으로 조건들을 분리해주었습니다." / "함수로 분리하였습니다."*
|
|
81
|
+
|
|
82
|
+
→ **MCP 룰 `unnecessary-let-as-readability-loss`** ⭐⭐ 신규 — *`let()` = 가독성 손실 / 변수 분리 권장*. PR #42 (`expression-body-too-long-as-local-var`) 결 합류 누적 2 PR.
|
|
83
|
+
|
|
84
|
+
### 6. 출력 함수 호출 체크 — `onPrint()` 고차함수 (Thread 8)
|
|
85
|
+
|
|
86
|
+
reviewer:
|
|
87
|
+
|
|
88
|
+
> *"출력의 경우에는 반환값이 없기 때문에 함수가 호출되었는지를 체크해야 합니다. 이 경우에는 **생성자로 `onPrint()`, `onPrintln()`과 같은 고차함수를 받도록 처리**해주시면 좋습니다."*
|
|
89
|
+
|
|
90
|
+
→ **MCP 룰 `output-fake-with-print-callback`** ⭐⭐⭐ 신규 — *Fake 출력 = 함수 호출 체크 + 고차함수 콜백 어휘*. PR #14 (`test-fake-self-test-anti-pattern`) 결 합류.
|
|
91
|
+
|
|
92
|
+
## 대표 인용
|
|
93
|
+
|
|
94
|
+
> [galcyurio Thread 0]
|
|
95
|
+
> *"Controller에 있으면 `process()` 함수도 테스트가 가능하지만 `main()` 함수에 위치시키는 순간 해당 코드들은 테스트가 힘들어지기 때문입니다."*
|
|
96
|
+
|
|
97
|
+
→ **`process()` 위치 = 테스트 가능성 어휘**.
|
|
98
|
+
|
|
99
|
+
> [galcyurio Thread 6]
|
|
100
|
+
> *"원칙을 따르는 것은 좋지만 절대적으로 항상 올바른 원칙은 없기에 모든 경우에 적용시켜서는 안됩니다."*
|
|
101
|
+
|
|
102
|
+
→ **원칙 = 가이드 / 절대 X 어휘 정점**.
|
|
103
|
+
|
|
104
|
+
> [DYGames Thread 6]
|
|
105
|
+
> *"`Player` 클래스는 단순히 `name`과 `BetInfo`라는 두개의 상태를 가지고 있고 역할은 없는 클래스로 변한다고 생각됩니다."*
|
|
106
|
+
|
|
107
|
+
→ **학생 자가 역할 없는 클래스 분리 시그널 자각 어휘**.
|
|
108
|
+
|
|
109
|
+
## 얻은 교훈 (보편)
|
|
110
|
+
|
|
111
|
+
1. **`process()` Controller vs main = 테스트 가능성** — **MCP 룰 `process-in-controller-vs-main-testability` 후보** ⭐⭐⭐. Controller 어휘 누적 7 PR 정점.
|
|
112
|
+
2. **원칙 = 가이드 / 절대 X (3개 인스턴스 변수 원칙)** — **MCP 룰 `principle-as-guide-not-absolute` 후보** ⭐⭐⭐ 정점. 단일 답 거부 누적 4 PR.
|
|
113
|
+
3. **역할 없는 클래스 분리 X (BetInfo 분리 거부)** — **MCP 룰 `forced-class-division-without-role` 후보** ⭐⭐⭐. PR #42 결 누적 2 PR.
|
|
114
|
+
4. **Money 연산자 오버로딩 도메인** — **MCP 룰 `operator-overload-times-domain` 후보** ⭐⭐.
|
|
115
|
+
5. **출력 Fake = `onPrint()` 고차함수** — **MCP 룰 `output-fake-with-print-callback` 후보** ⭐⭐⭐.
|
|
116
|
+
6. **불필요한 `let()` = 가독성 손실** — **MCP 룰 `unnecessary-let-as-readability-loss` 후보** ⭐⭐.
|
|
117
|
+
|
|
118
|
+
## 메타 노트
|
|
119
|
+
|
|
120
|
+
- **DYGames 양 단계 완성** — galcyurio reviewer (PR #30·#42 ippnsj 결).
|
|
121
|
+
- **Controller 어휘 누적 7 PR 정점** (PR #37·#42·#48·#47·#72·#43·#54) — Controller 책임 + 테스트 + 분류 어휘 최정점.
|
|
122
|
+
- **원칙 vs 본질 단일 답 거부 누적 4 PR** (PR #38·#62·#43·#37) — MCP 핵심 가치 어휘 정점.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# PR #12 — [해시] 1단계 블랙잭
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@EmilyCh0](https://github.com/EmilyCh0)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/12
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** [@BeokBeok](https://github.com/BeokBeok) (벅벅) — 2023 코호트 reviewer
|
|
7
|
+
- **라인 코멘트:** 10 스레드 — *단방향 리뷰 (학생 자가 답변 X) / `init` 함수명 의미 + Mutable 노출 + 언더바 backing property 컨벤션 + Ace 책임 위치 + 원시값 포장 + 함수명 의도 일치 + 테스트 함수명 구체성*
|
|
8
|
+
- **신규 reviewee** (2023 코호트). PR #15 (sujin9 1단계, BeokBeok)와 동일 가이드 결.
|
|
9
|
+
|
|
10
|
+
## 잘한 점 (설계 관점)
|
|
11
|
+
|
|
12
|
+
- Card 클래스 내 Shape/Value 잘 구현 (Thread 2 — 다만 파일 분리 권유).
|
|
13
|
+
- A 판단 테스트 코드 작성 (Thread 9 — 다만 함수명 구체성 보완).
|
|
14
|
+
|
|
15
|
+
## 못한 점 (설계 관점)
|
|
16
|
+
|
|
17
|
+
### 1. `init` 함수명 의미 (Thread 0)
|
|
18
|
+
|
|
19
|
+
```kotlin
|
|
20
|
+
fun init(...) // 별도 리턴값이 있는 함수
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
reviewer:
|
|
24
|
+
|
|
25
|
+
> *"init이라는 함수는 대체로 \"값을 초기화한다\" 라는 의미를 가집니다. 다만 초기화는 아래와 같이 별도의 리턴값이 있을 것이라 예상되지 않습니다. `val a = 1`. 구현부의 의도를 잘 알 수 있도록 함수명을 개선해보면 어떨까요?"*
|
|
26
|
+
|
|
27
|
+
→ **`init` = 초기화 어휘 (리턴 X 예상)** = **MCP 룰 `init-name-implies-no-return` 후보** ⭐ 신규.
|
|
28
|
+
|
|
29
|
+
### 2. 상수값 집합 = enum (Thread 1)
|
|
30
|
+
|
|
31
|
+
`Answer` 클래스를 enum으로 권유. 누적 다수.
|
|
32
|
+
|
|
33
|
+
### 3. 하나의 파일 = 하나의 클래스 (Thread 2)
|
|
34
|
+
|
|
35
|
+
reviewer: *"Card 클래스 내에 Shape와 Value를 잘 구현해주셨네요. 지금처럼 하셔도 좋지만, 가급적이면 하나의 파일에는 하나의 클래스를 관리하는 것이 좋습니다. 현재 구조에서는 Shape 혹은 Value 클래스가 변경이 되면 Card 클래스도 영향을 받기 쉬운 구조이기 때문입니다."*
|
|
36
|
+
|
|
37
|
+
→ **단일 책임 파일 분리 + 변경 전파 영향 어휘** = 누적 다수.
|
|
38
|
+
|
|
39
|
+
### 4. `List<List<Card>>` 포장 (Thread 3)
|
|
40
|
+
|
|
41
|
+
reviewer: *"List<List<Card>>를 포장해보면 어떨까요?"*
|
|
42
|
+
|
|
43
|
+
→ **이중 컬렉션 포장 (일급 컬렉션)** = 누적 다수.
|
|
44
|
+
|
|
45
|
+
### 5. `MutableList` 외부 노출 (Thread 4)
|
|
46
|
+
|
|
47
|
+
```kotlin
|
|
48
|
+
// Dealer.kt
|
|
49
|
+
class Dealer(name: String = DEALER_NAME, cards: MutableList<Card>) : Player(name, cards)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
reviewer:
|
|
53
|
+
|
|
54
|
+
> *"cards의 타입이 Mutable 타입이네요. 이렇게 되면 외부에서는 Mutable 타입이 노출되기 때문에, 클래스를 내부가 아닌 외부에서 값을 변경하기 쉬운 구조가 됩니다."*
|
|
55
|
+
|
|
56
|
+
→ **Mutable 타입 외부 노출 = 캡슐화 위반** = 누적 다수.
|
|
57
|
+
|
|
58
|
+
### 6. 언더바 `_` = backing property 컨벤션 (Thread 5)
|
|
59
|
+
|
|
60
|
+
```kotlin
|
|
61
|
+
class Player(name: String, _cards: MutableList<Card>)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
reviewer:
|
|
65
|
+
|
|
66
|
+
> *"프로퍼티에 언더바(_)를 붙이는 경우는, backing property 기법을 적용할 때 사용하는 컨벤션입니다. 또한, 언더바는 private를 의미하기도 하기 때문에, 외부에서 값을 생성해서 전달해주는 생성자와는 맞지 않습니다."*
|
|
67
|
+
|
|
68
|
+
→ **언더바 = backing property 전용 컨벤션 (생성자 인자 X)** = **MCP 룰 `underscore-prefix-backing-property-only` 후보** ⭐ 신규. PR #18 (boogi-woogi) backing property 어휘 결 합류.
|
|
69
|
+
|
|
70
|
+
### 7. 함수명 = 유효성 체크 시 Boolean 기대 (Thread 6)
|
|
71
|
+
|
|
72
|
+
reviewer: *"함수명만 봤을 때에는 플레이어의 합의 유효성을 체크하는 것으로 보입니다. \"유효성을 체크한다\" 라고 하면, 흔히 Boolean 타입을 떠올리곤 합니다."*
|
|
73
|
+
|
|
74
|
+
→ **`isXX` / `checkXX` = Boolean 기대 어휘** = **MCP 룰 `validate-fn-name-implies-boolean` 후보** ⭐⭐. 함수명 의도 일치 누적 15+ PR과 결 합류.
|
|
75
|
+
|
|
76
|
+
### 8. ACE 책임 위치 (Thread 7)
|
|
77
|
+
|
|
78
|
+
reviewer: *"ACE를 판단하는 로직을 Player가 갖도록 구현해주셨네요. ACE는 어떤 클래스에서 책임을 가지고 있는지 확인해보시고, 이 로직을 어디에 위치해야 적합한지 고민해보면 어떨까요?"*
|
|
79
|
+
|
|
80
|
+
→ **Tell-Don't-Ask + Ace 책임 위치** = 누적 다수.
|
|
81
|
+
|
|
82
|
+
### 9. Score Int 포장 (Thread 8)
|
|
83
|
+
|
|
84
|
+
reviewer: *"Score의 타입이 Int이니, 이 값을 포장해보면 어떨까요?"*
|
|
85
|
+
|
|
86
|
+
→ **원시값 포장** = 누적 다수.
|
|
87
|
+
|
|
88
|
+
### 10. 테스트 함수명 구체성 (Thread 9)
|
|
89
|
+
|
|
90
|
+
reviewer: *"하지만 함수명만 봐서는 한 장인 경우와 두 장인 경우, 그리고 세 장인 경우 어떤 것을 테스트를 하려고 하는지 알기가 어렵습니다. 가령, \"A가 한 장인 경우는 11점이다\" 와 같이 함수명을 좀 더 자세하게 작성해보면 어떨까요?"*
|
|
91
|
+
|
|
92
|
+
→ **테스트 함수명 구체성 (입력→기대 명시)** = PR #15 (sujin9 1단계) 동일 가이드 + 누적 다수.
|
|
93
|
+
|
|
94
|
+
## 대표 인용
|
|
95
|
+
|
|
96
|
+
> [BeokBeok Thread 0]
|
|
97
|
+
> *"init이라는 함수는 대체로 \"값을 초기화한다\" 라는 의미를 가집니다."*
|
|
98
|
+
|
|
99
|
+
→ **`init` 함수명 의미 어휘**.
|
|
100
|
+
|
|
101
|
+
> [BeokBeok Thread 5]
|
|
102
|
+
> *"언더바(_)를 붙이는 경우는, backing property 기법을 적용할 때 사용하는 컨벤션입니다."*
|
|
103
|
+
|
|
104
|
+
→ **언더바 = backing property 컨벤션 어휘**.
|
|
105
|
+
|
|
106
|
+
## 얻은 교훈 (보편)
|
|
107
|
+
|
|
108
|
+
1. **`init` 함수명 의미 (리턴 X 예상)** — **MCP 룰 `init-name-implies-no-return` 후보** ⭐ 신규.
|
|
109
|
+
2. **언더바 `_` 접두사 = backing property 컨벤션** — **MCP 룰 `underscore-prefix-backing-property-only` 후보** ⭐ 신규.
|
|
110
|
+
3. **`isXX` / `checkXX` 함수명 = Boolean 기대 어휘** — **MCP 룰 `validate-fn-name-implies-boolean` 후보** ⭐⭐.
|
|
111
|
+
4. **Mutable 타입 외부 노출 = 캡슐화 위반** = 누적 다수.
|
|
112
|
+
5. **테스트 함수명 입력→기대 구체성** = PR #15 결 합류.
|
|
113
|
+
|
|
114
|
+
## 메타 노트
|
|
115
|
+
|
|
116
|
+
- 학생 자가 답변 / 토론 X — *단방향 reviewer 가이드만* (PR #12 학생 첫 1단계 시작 시기).
|
|
117
|
+
- 2025-05-24 시점에서 PR #15 sujin9 1단계 (BeokBeok 동일 reviewer, 같은 시기) 가이드 결과 *3가지 신규 패턴* (`init` / 언더바 / `isXX` Boolean) 명확화 — *동일 reviewer 가이드가 다른 학생에게 반복되며 신규 안티패턴 어휘를 정착시키는 사례*.
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
# PR #38 — [해시] 2단계 블랙잭
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@EmilyCh0](https://github.com/EmilyCh0)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-blackjack/pull/38
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** [@BeokBeok](https://github.com/BeokBeok) (벅벅) — 2023 코호트 reviewer
|
|
7
|
+
- **라인 코멘트:** 18 스레드 — *학생 자가 의문 + 답변 풍부 (9 thread 학생 자가 응답) / runCatching 예측 가능/불가 오류 + 입력 검증 재귀 호출 위험 + 멤버 변수 상태 의존 함수 결과 + Tell-Don't-Ask 메시지 어휘 \"내 X 넘겨줄테니 Y 알려줘\" + 디미터 점(.) 2개 이하 + `lateinit` 초기화 미인지 위험 + Pair vs data class 의미 명확성*
|
|
8
|
+
- **양 단계 완성** (1단계 #12, BeokBeok). EmilyCh0 양 단계 완성.
|
|
9
|
+
- **PR 본문 자가 학습 명시**: *"1단계 미션에서 받은 피드백 반영하고, 컨트롤러에 있던 로직을 도메인으로 분리하려고 새로운 방식을 시도해봤습니다."*
|
|
10
|
+
|
|
11
|
+
## 잘한 점 (설계 관점)
|
|
12
|
+
|
|
13
|
+
### 1. PR 본문 자가 학습 시도 명시
|
|
14
|
+
|
|
15
|
+
PR 본문에 *"컨트롤러에 있던 로직을 도메인으로 분리하려고 새로운 방식을 시도"* 라는 1단계 → 2단계 자가 학습 명시.
|
|
16
|
+
|
|
17
|
+
→ **PR 본문 자가 학습 진화 명시** = PR #15·#35·#126 결 합류.
|
|
18
|
+
|
|
19
|
+
### 2. 학생 자가 답변 9 thread (학습 가시화)
|
|
20
|
+
|
|
21
|
+
18 thread 중 **9 thread 학생 자가 답변** + 코드 수정 보고 — *학습 가시화 최상위 모범*. PR #144 (m6z1)·PR #149 (cucumber99) 결.
|
|
22
|
+
|
|
23
|
+
### 3. 추가 칭찬
|
|
24
|
+
|
|
25
|
+
- Thread 0: runCatching 반복 구조 활용 (다만 본질 = 예외 처리 위치 고민).
|
|
26
|
+
- Thread 9: 수익률 테스트 코드 칭찬.
|
|
27
|
+
|
|
28
|
+
## 못한 점 (설계 관점)
|
|
29
|
+
|
|
30
|
+
### 1. runCatching 예측 가능 vs 불가 오류 (Thread 0) — 학생 자가 깊은 의문 정점
|
|
31
|
+
|
|
32
|
+
reviewer:
|
|
33
|
+
|
|
34
|
+
> *"runCatching 내부는 try-catch로 이루어져있습니다. 코틀린에서는 오류는 아래와 같이 처리하고 있습니다. - 오류가 예상되는 경우 - 오류가 예상되지 않는 경우. 위의 경우에는 어떤 오류인지 고민해보시고, 나아가 어떻게 개선하면 좋을지 고민해보면 어떨까요?"*
|
|
35
|
+
|
|
36
|
+
학생 자가 답변 (의문 정점):
|
|
37
|
+
|
|
38
|
+
> *"코틀린에서 예측되는 범위의 오류는 null 또는 sealed class의 Failure를 리턴하여 처리하고, 예측되지 않는 범위의 오류는 예외를 throw 해서 처리합니다. **그런데 예측할 수 있는 오류와 예측하기 어려운 오류의 차이를 잘 모르겠습니다.**🥲 현재 코드에서는 UserNameContainer 생성 시 require를 통해 이름 중복과 빈 이름을 검증하고 있는데, 예외를 던지는 require가 아니라 null 또는 Failure로 처리하는 것이 좋을까요?*
|
|
39
|
+
>
|
|
40
|
+
> *예외 처리 방식도 궁금하지만, 예외 처리를 어디에서 하는 것이 좋을지도 궁금합니다. 지금까지는 \"문자열 Int로 파싱\", \"빈 입력\" 정도는 사용자 입력 오류라고 생각해서 InputView에서 toIntOrNull() 등을 사용하여 처리하고 나머지 논리적 오류는 도메인에서 예외를 throw하고 컨트롤러에서 runCatching하는 방식을 사용했는데, 이번 미션을 진행하면서 점점 뷰에서 검증하는 비중이 높아지는 것 같습니다. **뷰에서 아예 검증을 완료한 도메인 객체를 리턴하는 방식까지 생각해봤는데** 이러한 방식에는 문제가 없을지 궁금합니다."*
|
|
41
|
+
|
|
42
|
+
reviewer:
|
|
43
|
+
|
|
44
|
+
> *"너무 어렵게 생각하시는 것이 아닌가 싶습니다. 😅 값을 입력받을 때 아래와 같은 함수를 사용하고 계십니다. `readln().toIntOrNull()`. 즉, Int 타입으로 변환하되, 변환이 되지 않으면 null을 반환한다고 쉽게 이해할 수 있습니다. (...) 반대로 예외를 예측하기 어려운 대표적인 오류는, 0으로 나누는 경우입니다. (...) ArithmeticException이 발생하게 됩니다.*
|
|
45
|
+
>
|
|
46
|
+
> *또한, 함수 내에서 재귀호출을 하는 방식은 굉장히 위험합니다. 예상하지 못한 오류가 발생했을 경우, 영문도 모른채 프로그램이 영원히 종료되지 않을 가능성이 높습니다.*
|
|
47
|
+
>
|
|
48
|
+
> *예외처리를 어디에서 하는지에 대한 여부는 개발자마다 의견이 다르기에 정답이 없습니다. 말씀하신대로 뷰에서 도메인 객체를 리턴하는 방식도 문제가 없습니다. 😅"*
|
|
49
|
+
|
|
50
|
+
→ **`predictable-vs-unpredictable-error-distinction`** = **MCP 룰 후보** ⭐⭐⭐:
|
|
51
|
+
- 예측 가능 (`toIntOrNull` = 변환 안되면 null) → 다른 방식으로 처리.
|
|
52
|
+
- 예측 불가 (`0`으로 나누기 → ArithmeticException) → throw.
|
|
53
|
+
|
|
54
|
+
→ **`view-as-domain-validator-pattern`** = *뷰에서 검증 완료한 도메인 객체 리턴* 패턴 — 학생 자가 의문 + reviewer 인정 *"정답 없다"*. ⭐⭐ 신규.
|
|
55
|
+
|
|
56
|
+
→ **`exception-handling-location-no-right-answer`** = *"개발자마다 의견 다르기에 정답이 없습니다"* — **MCP `oh-my-oop` 핵심 가치 어휘 정점** ⭐⭐⭐ (단일 답 거부).
|
|
57
|
+
|
|
58
|
+
### 2. 입력 검증 재귀 호출 위험 (Thread 17)
|
|
59
|
+
|
|
60
|
+
```kotlin
|
|
61
|
+
// LoginView.kt
|
|
62
|
+
fun getBetAmount(): Int {
|
|
63
|
+
val input = readln().toIntOrNull() ?: return getBetAmount()
|
|
64
|
+
require(input > 0)
|
|
65
|
+
return input
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
reviewer:
|
|
70
|
+
|
|
71
|
+
> *"배팅 금액을 음수를 두 번 입력하게 되면, `return input`은 몇 번 호출될까요? 양수를 입력받기 위한 예외처리로 인해, 프로그램의 오류가 발생하게 됩니다. 이 부분이 재귀 호출을 신중하게 하지 않았기에, 예상하지 못한 오류가 발생하게 됩니다."*
|
|
72
|
+
|
|
73
|
+
(스크린샷 첨부 — 실제 오류 재현)
|
|
74
|
+
|
|
75
|
+
학생 자가 답변: *"리턴 처리해서 정상 작동하도록 수정했습니다 🥹"*
|
|
76
|
+
|
|
77
|
+
→ **`recursive-input-validation-bug`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *입력 검증 재귀 호출 시 예외처리 빠지면 예측 못한 오류*.
|
|
78
|
+
|
|
79
|
+
→ **reviewer 스크린샷 = 도메인 룰 증거**: PR #144 결 (m6z1 — reviewer 이미지 첨부) 합류 — *스크린샷 = 버그 재현 증거*. ⭐ 강화.
|
|
80
|
+
|
|
81
|
+
### 3. 멤버 변수 상태 의존 함수 결과 (Thread 1)
|
|
82
|
+
|
|
83
|
+
```kotlin
|
|
84
|
+
class BlackJackGame {
|
|
85
|
+
private var deck: Deck = Deck.empty()
|
|
86
|
+
private var players: Players = Players.empty()
|
|
87
|
+
|
|
88
|
+
fun setUpBlackJackGame(...) { deck = ...; players = ... }
|
|
89
|
+
fun playDealerTurn() { /* deck, players 사용 */ }
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
reviewer:
|
|
94
|
+
|
|
95
|
+
> *"멤버 변수는 클래스 내부에서 데이터에 편하게 접근하고 변경할 수 있는 장점이 있지만, **멤버 변수의 상태에 따라서 함수의 호출 결괏값이 달라지는 단점이 있습니다.** setUpBlackJackGame 함수를 호출하지 않고, playDealerTurn 함수를 호출하게 되면 어떻게 될까요?"*
|
|
96
|
+
|
|
97
|
+
학생 자가 답변:
|
|
98
|
+
|
|
99
|
+
> *"deck과 players를 갖는 BlackJackGameData를 추가했습니다. setUpBlackJackGame을 통해 BlackJackGameData를 생성할 수 있고, BlackJackGame 내의 나머지 함수가 BlackJackGameData를 인자로 받아 setUpBlackJackGame 이전에 호출할 수 없도록 했습니다."*
|
|
100
|
+
|
|
101
|
+
→ **`mutable-member-var-state-dependent-result`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *멤버 변수 상태에 따라 함수 결과 달라짐 = 호출 순서 의존*.
|
|
102
|
+
|
|
103
|
+
→ **`function-call-order-dependency-violation`** = **MCP 룰 후보** ⭐⭐⭐ — *호출 순서가 강요되는 API = 잘못된 설계*. 학생 자가 답변 = *데이터 객체 인자 + 컴파일러 강제* 해결.
|
|
104
|
+
|
|
105
|
+
→ **타입으로 호출 순서 강제** 어휘 (BlackJackGameData 인자 = setUp 이전 호출 못함) — *type-safety로 invariant 강제* ⭐⭐.
|
|
106
|
+
|
|
107
|
+
### 4. Pair vs data class 의미 명확성 (Thread 2)
|
|
108
|
+
|
|
109
|
+
reviewer:
|
|
110
|
+
|
|
111
|
+
> *"Pair를 활용해주셨네요. 👍 Pair는 두 개의 타입을 간편하게 정의하고 사용할 수 있는 장점이 있지만, **first가 무엇인지 second가 무엇인지 알기 어렵다는 단점이 있습니다.** Pair 대신 data class를 활용해보면 어떨까요?"*
|
|
112
|
+
|
|
113
|
+
학생 자가 답변: *"data class로 변경했습니다!"*
|
|
114
|
+
|
|
115
|
+
→ **`pair-vs-data-class-naming-clarity`** = **MCP 룰 후보** ⭐⭐ 신규 — *Pair = first/second 의미 잃음*. PR #137·#107 (`typealias vs class`) 결 합류 — *익명 타입 어휘 손실*.
|
|
116
|
+
|
|
117
|
+
### 5. BlackJackGame god-object (Thread 3) — 디미터 법칙
|
|
118
|
+
|
|
119
|
+
reviewer:
|
|
120
|
+
|
|
121
|
+
> *"BlackJackGame는 Score, Players, Dealer, Cards 등 다른 객체들을 너무 잘 알고 있는 것은 아닌지 고민해보시면 좋을 것 같아요. 각 객체에 메시지를 보내도록 코드를 개선해보면 어떨까요? **대체로 점(.)을 통해서 두세번 접근을 하게 되면, 객체를 능동적으로 관리하고 있는지 고민**해보시면 좋을 것 같아요."*
|
|
122
|
+
|
|
123
|
+
학생 자가 답변: *"`val dealerScore get() = dealer.cards.score` 와 같은 변수, 함수를 추가하여 BlackJackGame에서 직접 접근하지 않도록 했습니다."*
|
|
124
|
+
|
|
125
|
+
→ **god-object + 디미터 점(.) 2-3개 시그널** = 누적 다수.
|
|
126
|
+
|
|
127
|
+
### 6. Cards → Score 리턴 타입 일치 (Thread 4)
|
|
128
|
+
|
|
129
|
+
reviewer: *"리턴 타입이 Int인데, 이미 구현하신 Score 객체를 활용해보면 어떨까요?"*
|
|
130
|
+
|
|
131
|
+
→ **`primitive-return-on-wrapped-value`** = 누적 다수.
|
|
132
|
+
|
|
133
|
+
### 7. enum exhaustive when (Thread 7)
|
|
134
|
+
|
|
135
|
+
누적.
|
|
136
|
+
|
|
137
|
+
### 8. Score 책임 — 상태 + 계산 로직 (Thread 8)
|
|
138
|
+
|
|
139
|
+
reviewer: *"점수를 관리하는 Score 클래스를 잘 구현해주셨네요. 👍 **상태 외에도 점수를 계산하는 로직도 Score 클래스에서 책임을 갖도록** 개선해보면 어떨까요?"*
|
|
140
|
+
|
|
141
|
+
학생 자가 답변: *"Cards에 있던 점수 계산 로직을 Score로 옮겼습니다!"*
|
|
142
|
+
|
|
143
|
+
→ **`value-holder-vs-value-calculator-conflation`** = *값을 가진 객체가 값 계산 책임도 가짐* = 누적 다수.
|
|
144
|
+
|
|
145
|
+
### 9. 테스트 명명 도메인 어휘 (Thread 9)
|
|
146
|
+
|
|
147
|
+
reviewer:
|
|
148
|
+
|
|
149
|
+
> *"`점수가 21이면 블랙잭이다`. 21은 블랙잭을 상징하니, 버스트가 아니다라는 것보다는 블랙잭임을 나타내는 것이 더 좋을 것 같아요."*
|
|
150
|
+
|
|
151
|
+
→ **테스트 명명 = 도메인 어휘 (Bust 아니다 ✗ / 블랙잭이다 ✓)** = 누적 다수.
|
|
152
|
+
|
|
153
|
+
### 10. 개행 = 흐름 단위 (Thread 11)
|
|
154
|
+
|
|
155
|
+
reviewer: *"프로그램의 흐름 단위로 개행을 해주시면, 좀 더 로직을 이해하는 데 수월합니다."*
|
|
156
|
+
|
|
157
|
+
→ **`blank-line-as-flow-boundary`** = ⭐ (가독성 컨벤션).
|
|
158
|
+
|
|
159
|
+
### 11. 3개 이상 인스턴스 변수 제약 — 임시 방편 vs 본질 (Thread 12)
|
|
160
|
+
|
|
161
|
+
reviewer: *"3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다 — 위 요구사항을 반영해보면 어떨까요?"*
|
|
162
|
+
|
|
163
|
+
학생 자가 답변: *"score와 numbers를 함수로 변경하여 해결할 수 있을 것 같습니다. **하지만 이게 적절한 해결 방법인지, 이점이 무엇인지 잘 모르겠습니다.**"*
|
|
164
|
+
|
|
165
|
+
reviewer:
|
|
166
|
+
|
|
167
|
+
> *"score와 numbers를 단순히 함수로 바꾸는 것은, **임시 방편일 뿐 해결방법은 아닙니다.** score와 numbers는 isBlackJackScore 함수를 호출하기 위해 필요합니다. 그렇다면, score와 numbers를 멤버 변수로 가지고 있어야 할까요? 멤버 변수로 가지지 않아도 isBlackJackScore 함수를 호출할 수 있도록 개선할 수 있지 않을까요?"*
|
|
168
|
+
|
|
169
|
+
→ **`primitive-fn-conversion-as-temporary-fix`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *멤버 변수 제약 위반 시 *함수로 변경* = 임시 방편. 본질 = 멤버 변수 필요성 고민*.
|
|
170
|
+
|
|
171
|
+
→ ***임시 방편 vs 본질 해결* 어휘** ⭐⭐ — reviewer 코드 변경 *형태*가 아닌 *왜 멤버 변수인가* 고민 유도.
|
|
172
|
+
|
|
173
|
+
### 12. Tell-Don't-Ask 메시지 어휘 — *"내 X 넘겨줄테니 Y 알려줘"* (Thread 13)
|
|
174
|
+
|
|
175
|
+
reviewer:
|
|
176
|
+
|
|
177
|
+
> *"isBlackJackScore 함수는 블랙잭 스코어 여부에 대해서 판단해주는 함수로 보입니다. 그렇다면, Score 에 메시지를 보내도록 코드를 개선해보면 어떨까요? **\"내 카드들의 정보를 넘겨줄테니 블랙잭인지 아닌지 알려줘\"**"*
|
|
178
|
+
|
|
179
|
+
학생 자가 답변:
|
|
180
|
+
|
|
181
|
+
```kotlin
|
|
182
|
+
fun isBlackJack(numbers: List<Int>, hasAce: Boolean): Boolean =
|
|
183
|
+
(valueOfCards(numbers, hasAce).value == BLACKJACK_CONDITION)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
→ **`tell-dont-ask-message-vocabulary`** = **MCP 룰 후보** ⭐⭐⭐ 신규 정점 — *"내 X를 넘겨줄테니 Y 알려줘"* 어휘. PR #15·#80 (`onXX` 콜백 어휘)·PR #133 (Player → Score 메시지) 결 합류.
|
|
187
|
+
|
|
188
|
+
→ **메시지 어휘 명시화** = MCP `oh-my-oop` 핵심 가치 (책임-역할-협력) 정점.
|
|
189
|
+
|
|
190
|
+
### 13. sumOf 활용 (Thread 15)
|
|
191
|
+
|
|
192
|
+
reviewer: *"sumOf를 활용하면 좀 더 간결한 코드를 작성할 수 있어요."*
|
|
193
|
+
|
|
194
|
+
→ Kotlin stdlib 어휘 = 누적.
|
|
195
|
+
|
|
196
|
+
### 14. `lateinit` 초기화 위험 (Thread 16)
|
|
197
|
+
|
|
198
|
+
```kotlin
|
|
199
|
+
class User(val name: String, val cards: Cards, val bettingMoney: Double) {
|
|
200
|
+
var gameResult: GameResult = GameResult.UNKNOWN // 또는 lateinit
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
reviewer:
|
|
205
|
+
|
|
206
|
+
> *"아래와 같은 코드를 작성하게 되면 어떤 일이 발생하게 될까요? `val user = User(\"커트\", Cards(listOf()), 0.0); user.gameResult.label`. 이 문제를 해결하기 위해 어떻게 개선하면 좋을까요?"*
|
|
207
|
+
|
|
208
|
+
학생 자가 답변:
|
|
209
|
+
|
|
210
|
+
> *"아래 코드처럼 초기화되지 않은 상태에서는 IllegalStateException이 발생하도록 할 수 있습니다. 하지만 이 경우 별도의 예외 처리를 해주지 않으면 IllegalStateException이 발생했을 때 프로그램이 종료됩니다.*
|
|
211
|
+
>
|
|
212
|
+
> *또는 gameResult를 nullable한 타입으로 바꾸고 초기값을 null로 하는 방법도 있습니다."*
|
|
213
|
+
|
|
214
|
+
reviewer:
|
|
215
|
+
|
|
216
|
+
> *"**지연초기화는 초기화가 안된 상태에서도 접근할 수 있다는 점을 반드시 알고 넘어가셨으면 좋겠습니다.** 초기화가 되지 않은 상태에서 접근하는 경우가 생각보다 많습니다. 😅 그리고, 일반초기화가 아닌 지연초기화를 쓰는 것이 적합한지에 대해서도 고민하시고 사용하시는 것을 권장합니다."*
|
|
217
|
+
|
|
218
|
+
→ **`lateinit-initialization-checking-burden`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *`lateinit` 미초기화 접근 위험 + 적합성 자가 고민*. PR #100 (`mutable-state-open-violation`)·PR #18 (`enum-companion-init-order`) 결 합류 — *초기화 시점 어휘 누적 3 PR*.
|
|
219
|
+
|
|
220
|
+
### 15. 디미터 법칙 — 점(.) 2개 이하 (Thread 17)
|
|
221
|
+
|
|
222
|
+
reviewer (Thread 1 링크):
|
|
223
|
+
|
|
224
|
+
> *"디미터 법칙에 대해서 학습해보시고 코드를 개선해보면 어떨까요?"*
|
|
225
|
+
|
|
226
|
+
학생 자가 의문:
|
|
227
|
+
|
|
228
|
+
> *"Player에 `getCards()`라는 함수를 만들었는데, **어느 정도까지 디미터 법칙을 준수해야 하는지** 궁금합니다. 아예 Players에 `getDealerCards()`도 만들어서 `player.dealer` 코드까지 없애는 것이 좋을까요?"*
|
|
229
|
+
|
|
230
|
+
reviewer:
|
|
231
|
+
|
|
232
|
+
> *"점(.)을 2개 이하로 유지하는 것을 권장합니다. 오직 인접한 친구에게만 소통한다라고 이해해주시면 될 것 같습니다. 말씀하신 `player.dealer`를 풀어보면, `player.getDealer()` 와 동일하다고 볼 수 있습니다. 가령, \"딜러의 카드들을 출력해줘\" 라고 메시지를 보낸다고 하면, **Dealer 클래스에 카드 리스트를 출력하는 함수를 구현해주시면 됩니다.**"*
|
|
233
|
+
|
|
234
|
+
→ **`dot-2-or-fewer-rule`** = **MCP 룰 후보** ⭐⭐⭐ 신규 — *디미터 법칙 = 점(.) 2개 이하 + 인접한 친구만 + `a.b` = `a.getB()` 동일성*.
|
|
235
|
+
|
|
236
|
+
→ **메시지 어휘 — Tell View (출력 책임 위치)**: *"딜러의 카드들을 출력해줘" = Dealer가 출력 메서드* — Thread 13 (Tell-Don't-Ask 메시지 어휘) 결 합류 정점.
|
|
237
|
+
|
|
238
|
+
## 대표 인용
|
|
239
|
+
|
|
240
|
+
> [BeokBeok Thread 0]
|
|
241
|
+
> *"예외처리를 어디에서 하는지에 대한 여부는 개발자마다 의견이 다르기에 정답이 없습니다. 말씀하신대로 뷰에서 도메인 객체를 리턴하는 방식도 문제가 없습니다."*
|
|
242
|
+
|
|
243
|
+
→ **단일 답 거부 + 학생 대안 존중** — MCP `oh-my-oop` 핵심 가치 어휘.
|
|
244
|
+
|
|
245
|
+
> [EmilyCh0 Thread 0]
|
|
246
|
+
> *"예측할 수 있는 오류와 예측하기 어려운 오류의 차이를 잘 모르겠습니다."*
|
|
247
|
+
|
|
248
|
+
→ **학생 자가 깊은 의문 어휘**.
|
|
249
|
+
|
|
250
|
+
> [BeokBeok Thread 1]
|
|
251
|
+
> *"멤버 변수의 상태에 따라서 함수의 호출 결괏값이 달라지는 단점이 있습니다."*
|
|
252
|
+
|
|
253
|
+
→ **멤버 변수 상태 의존 = 호출 순서 의존 어휘**.
|
|
254
|
+
|
|
255
|
+
> [BeokBeok Thread 12]
|
|
256
|
+
> *"단순히 함수로 바꾸는 것은, 임시 방편일 뿐 해결방법은 아닙니다."*
|
|
257
|
+
|
|
258
|
+
→ **임시 방편 vs 본질 어휘**.
|
|
259
|
+
|
|
260
|
+
> [BeokBeok Thread 13]
|
|
261
|
+
> *"\"내 카드들의 정보를 넘겨줄테니 블랙잭인지 아닌지 알려줘\""*
|
|
262
|
+
|
|
263
|
+
→ **Tell-Don't-Ask 메시지 어휘 정점**.
|
|
264
|
+
|
|
265
|
+
> [EmilyCh0 Thread 17]
|
|
266
|
+
> *"어느 정도까지 디미터 법칙을 준수해야 하는지 궁금합니다."*
|
|
267
|
+
|
|
268
|
+
→ **학생 자가 *정도* 의문 어휘** = MCP `oh-my-oop` 학생 측 메타 어휘.
|
|
269
|
+
|
|
270
|
+
> [BeokBeok Thread 17]
|
|
271
|
+
> *"점(.)을 2개 이하로 유지하는 것을 권장합니다."*
|
|
272
|
+
|
|
273
|
+
→ **디미터 점(.) 2개 이하 어휘**.
|
|
274
|
+
|
|
275
|
+
## 얻은 교훈 (보편)
|
|
276
|
+
|
|
277
|
+
1. **예측 가능 vs 불가 오류 구분** — **MCP 룰 `predictable-vs-unpredictable-error-distinction` 후보** ⭐⭐⭐.
|
|
278
|
+
2. **입력 검증 재귀 호출 위험** — **MCP 룰 `recursive-input-validation-bug` 후보** ⭐⭐⭐.
|
|
279
|
+
3. **멤버 변수 상태 의존 = 호출 순서 강요** — **MCP 룰 `mutable-member-var-state-dependent-result` + `function-call-order-dependency-violation` 후보** ⭐⭐⭐.
|
|
280
|
+
4. **임시 방편 vs 본질 해결** — **MCP 룰 `primitive-fn-conversion-as-temporary-fix` 후보** ⭐⭐⭐.
|
|
281
|
+
5. **Tell-Don't-Ask 메시지 어휘 *"내 X 넘겨줄테니 Y 알려줘"*** — **MCP 룰 `tell-dont-ask-message-vocabulary` 후보** ⭐⭐⭐ 정점.
|
|
282
|
+
6. **디미터 점(.) 2개 이하** — **MCP 룰 `dot-2-or-fewer-rule` 후보** ⭐⭐⭐.
|
|
283
|
+
7. **`lateinit` 초기화 미인지 위험** — **MCP 룰 `lateinit-initialization-checking-burden` 후보** ⭐⭐⭐.
|
|
284
|
+
8. **Pair vs data class 의미 명확성** — **MCP 룰 `pair-vs-data-class-naming-clarity` 후보** ⭐⭐.
|
|
285
|
+
9. **예외 처리 위치 정답 없음** — *MCP `oh-my-oop` 핵심 가치 어휘*.
|
|
286
|
+
|
|
287
|
+
## 메타 노트
|
|
288
|
+
|
|
289
|
+
- **EmilyCh0 양 단계 완성 (1단계 #12 → 2단계 #38)** — 1단계 단방향 가이드만 → 2단계 9 thread 학생 자가 답변 + PR 본문 자가 학습 진화 명시 → *학습 가시화 진화*. PR #144 (m6z1 *셀프 코드 리뷰*) 결.
|
|
290
|
+
- **BeokBeok reviewer 다년 활동 강화** — 1단계 #12·#15 + 2단계 #38 + 누적 시기 코호트.
|
|
291
|
+
- **메타 케이스 6번째 — 단방향 가이드 → 학생 자가 답변 진화 학습 시간성** (#12 단방향 0 → #38 자가 답변 9 thread): PR #71 → #96 (Hogu59 1년 늦은 2단계) 결과 *시간성 학습 모범* 다른 축.
|