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,113 @@
|
|
|
1
|
+
// "*List<T>를 그대로 쓸까, 일급 컬렉션으로 감쌀까*" — Kotlin 도메인에서 자주 보이는 결정.
|
|
2
|
+
// 근거: lotto PR #80, #119, #144 — 특히 #144 @krrong 균형 답변
|
|
3
|
+
// ("역할 없으면 안 만드는 것도 합리. 단 의미/불변성/확장성은 일급 컬렉션 장점").
|
|
4
|
+
export function collectionShapeSeeds(targetName) {
|
|
5
|
+
const T = targetName || "Items";
|
|
6
|
+
const single = T.replace(/s$/i, "") || "Item";
|
|
7
|
+
return [
|
|
8
|
+
{
|
|
9
|
+
id: "cs-first-class",
|
|
10
|
+
label: "일급 컬렉션 (행위 보유)",
|
|
11
|
+
summary: `${T}을 일급 컬렉션으로 도입하고, *그 위에서만 의미 있는 행위*(합계/일치/우승자 판정/필터)를 ` +
|
|
12
|
+
`${T} 안으로 끌어온다. 외부에서 List<${single}>를 풀어 다루는 코드는 사라진다.`,
|
|
13
|
+
design_delta: {
|
|
14
|
+
added_classes: [{ name: T, stereotype: "Structurer" }],
|
|
15
|
+
},
|
|
16
|
+
tradeoffs: {
|
|
17
|
+
pros: [
|
|
18
|
+
"도메인 어휘가 코드에 드러남 (\"List<Lotto>\" 대신 \"Lottos.match(winning)\")",
|
|
19
|
+
"*컬렉션 불변성*을 게이트로 보장 (MutableList 변형 방지)",
|
|
20
|
+
"도메인 행위가 더 늘어도 한 곳에 모임 (확장성)",
|
|
21
|
+
"*Feature Envy*를 자연스럽게 제거",
|
|
22
|
+
],
|
|
23
|
+
cons: [
|
|
24
|
+
"*역할 없는 wrapper*가 되면 한 겹 간접 비용만 더함",
|
|
25
|
+
"Kotlin 표준 컬렉션 API(map/filter/sumOf)를 *그대로 노출하려면* 위임 코드 작성",
|
|
26
|
+
"*초기에 행위가 없으면* 인위적 메서드를 만들 위험",
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
cho_younghos_lens: {
|
|
30
|
+
cohesion: "improves",
|
|
31
|
+
coupling: "improves",
|
|
32
|
+
testability: "improves",
|
|
33
|
+
notes: "@krrong: \"로또 묶음이 하는 일이 생겼을 때 일급 컬렉션에 로직만 추가하면 되니 변경이 좀 더 자유로움\".",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "cs-raw-list",
|
|
38
|
+
label: "List<T> 직접 사용",
|
|
39
|
+
summary: `${T} wrapper 없이 \`List<${single}>\`를 그대로 사용. 컬렉션 위에서 도는 도메인 계산은 ` +
|
|
40
|
+
`별도 ServiceProvider(또는 확장 함수)로 분리.`,
|
|
41
|
+
design_delta: {},
|
|
42
|
+
tradeoffs: {
|
|
43
|
+
pros: [
|
|
44
|
+
"객체 수 최소 — Kotlin 컬렉션 표준 API를 자연스럽게 활용",
|
|
45
|
+
"*행위가 정말 없다면* 정직한 선택 (@krrong: \"만들지 않는 것도 좋은 근거\")",
|
|
46
|
+
"*죽은 추상* 회피",
|
|
47
|
+
],
|
|
48
|
+
cons: [
|
|
49
|
+
"도메인 의미 상실 (\"List<Lotto>\"가 *어떤 컬렉션인지* 타입에 안 보임)",
|
|
50
|
+
"*불변성 보장*이 약함 — MutableList가 우연히 넘어가도 컴파일러가 막지 못함",
|
|
51
|
+
"이후 행위가 생기면 *흩어진 호출 지점을 모으는* 비용 발생",
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
cho_younghos_lens: {
|
|
55
|
+
cohesion: "neutral",
|
|
56
|
+
coupling: "hurts",
|
|
57
|
+
testability: "neutral",
|
|
58
|
+
notes: "도메인 행위가 *진짜로 없는* 단계에서는 정직한 선택이지만 행위가 생기면 회수 신호.",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "cs-typealias",
|
|
63
|
+
label: "typealias로 *이름만* 부여",
|
|
64
|
+
summary: `\`typealias ${T} = List<${single}>\`로 이름만 부여한다. 런타임 구조는 같지만 *읽는 사람*에게 ` +
|
|
65
|
+
`의도를 전달.`,
|
|
66
|
+
design_delta: {},
|
|
67
|
+
tradeoffs: {
|
|
68
|
+
pros: [
|
|
69
|
+
"객체 추가 없이 *도메인 어휘*만 회복",
|
|
70
|
+
"Kotlin 표준 API 그대로 사용 가능 (위임 코드 0)",
|
|
71
|
+
"*리팩토링 마중물*로 좋음 — 추후 진짜 일급 컬렉션으로 승격하기 쉬움",
|
|
72
|
+
],
|
|
73
|
+
cons: [
|
|
74
|
+
"typealias는 *컴파일러 단계에서 동일 타입* — 인자 순서 실수 차단 안 됨",
|
|
75
|
+
"*불변성/도메인 행위*는 여전히 부재",
|
|
76
|
+
"리뷰어가 \"왜 typealias죠?\"를 물을 수 있음 — 의도 명시 필요",
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
cho_younghos_lens: {
|
|
80
|
+
cohesion: "neutral",
|
|
81
|
+
coupling: "neutral",
|
|
82
|
+
testability: "neutral",
|
|
83
|
+
notes: "*이름만 회복*하는 카드. 행위가 자라면 일급 컬렉션으로, 안 자라면 typealias도 정직.",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: "cs-inline-class-wrapper",
|
|
88
|
+
label: "value class wrapper + 위임",
|
|
89
|
+
summary: `\`@JvmInline value class ${T}(val items: List<${single}>)\`로 감싸 *0 비용*으로 타입 안전성을 얻고, ` +
|
|
90
|
+
`필요한 행위만 메서드로 노출한다.`,
|
|
91
|
+
design_delta: {},
|
|
92
|
+
tradeoffs: {
|
|
93
|
+
pros: [
|
|
94
|
+
"*원시값 수준* 비용 + 도메인 어휘 회복",
|
|
95
|
+
"Int/Long 위치와 마찬가지로 컴파일러가 *List<T>와 ${T}를 구분*",
|
|
96
|
+
"행위 추가가 점진적으로 가능",
|
|
97
|
+
],
|
|
98
|
+
cons: [
|
|
99
|
+
"value class 제약: nullable/제네릭 위치에서 박싱",
|
|
100
|
+
"Kotlin 표준 컬렉션 API를 *위임 메서드로 다시 노출*해야 함 (Iterable 위임 패턴)",
|
|
101
|
+
"직렬화/리플렉션 호환성 검증 필요",
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
cho_younghos_lens: {
|
|
105
|
+
cohesion: "improves",
|
|
106
|
+
coupling: "improves",
|
|
107
|
+
testability: "improves",
|
|
108
|
+
notes: "*비용 부담 없이* 이름과 안전성을 회복하는 카드. 행위 자라기 전 단계에 적합.",
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=collectionShape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectionShape.js","sourceRoot":"","sources":["../../../src/tradeoff/heuristics/collectionShape.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,uDAAuD;AACvD,mDAAmD;AAEnD,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,MAAM,CAAC,GAAG,UAAU,IAAI,OAAO,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;IAC9C,OAAO;QACL;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EACL,GAAG,CAAC,uDAAuD;gBAC3D,GAAG,CAAC,wBAAwB,MAAM,qBAAqB;YACzD,YAAY,EAAE;gBACZ,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC;aACvD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,gEAAgE;oBAChE,wCAAwC;oBACxC,6BAA6B;oBAC7B,0BAA0B;iBAC3B;gBACD,IAAI,EAAE;oBACJ,mCAAmC;oBACnC,2DAA2D;oBAC3D,8BAA8B;iBAC/B;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,mEAAmE;aAC3E;SACF;QACD;YACE,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,eAAe;YACtB,OAAO,EACL,GAAG,CAAC,sBAAsB,MAAM,kCAAkC;gBAClE,mCAAmC;YACrC,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,uCAAuC;oBACvC,oDAAoD;oBACpD,YAAY;iBACb;gBACD,IAAI,EAAE;oBACJ,kDAAkD;oBAClD,kDAAkD;oBAClD,mCAAmC;iBACpC;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,OAAO;gBACjB,WAAW,EAAE,SAAS;gBACtB,KAAK,EAAE,iDAAiD;aACzD;SACF;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EACL,eAAe,CAAC,WAAW,MAAM,uCAAuC;gBACxE,SAAS;YACX,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,uBAAuB;oBACvB,mCAAmC;oBACnC,yCAAyC;iBAC1C;gBACD,IAAI,EAAE;oBACJ,gDAAgD;oBAChD,sBAAsB;oBACtB,4CAA4C;iBAC7C;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,SAAS;gBACtB,KAAK,EAAE,uDAAuD;aAC/D;SACF;QACD;YACE,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,0BAA0B;YACjC,OAAO,EACL,4BAA4B,CAAC,oBAAoB,MAAM,gCAAgC;gBACvF,oBAAoB;YACtB,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,yBAAyB;oBACzB,8CAA8C;oBAC9C,iBAAiB;iBAClB;gBACD,IAAI,EAAE;oBACJ,sCAAsC;oBACtC,yDAAyD;oBACzD,oBAAoB;iBACrB;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,+CAA+C;aACvD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// "양측이 동등한 두 주체가 어떤 결과(승부·우위·비교)를 결정"하는 협력 패턴.
|
|
2
|
+
// MCP `oh-my-oop` 핵심 가치: *외부 비교자*는 거의 항상 잘못된 첫 답.
|
|
3
|
+
// 근거: lessons/woowacourse-kotlin-blackjack 다수 PR — 외부 정적 Judge.judge / Outcome.of 패턴.
|
|
4
|
+
// @laco-dev (krrong/19): "몇 개 일치하는지 요청해서 결과를 받아오도록 해보세요.
|
|
5
|
+
// 객체지향 프로그래밍에서는 이 개념을 메시지를 보낸다 라고 표현합니다."
|
|
6
|
+
// @BeokBeok (EmilyCh0/38): "내 카드들의 정보를 넘겨줄테니 블랙잭인지 알려줘."
|
|
7
|
+
export function dualSubjectComparisonSeeds(involved) {
|
|
8
|
+
const A = involved[0] ?? "Participant";
|
|
9
|
+
const B = involved[1] ?? "Other";
|
|
10
|
+
const aMsg = A.charAt(0).toLowerCase() + A.slice(1);
|
|
11
|
+
const bMsg = B.charAt(0).toLowerCase() + B.slice(1);
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
id: "dsc-external-comparator",
|
|
15
|
+
label: "외부 비교자 (Judge.judge)",
|
|
16
|
+
summary: `별도 ServiceProvider 클래스(예: Judge / Outcome.of)가 ${A}와 ${B}의 *데이터를 모두 꺼내* ` +
|
|
17
|
+
`비교한 후 결과를 반환한다. 양측은 *데이터를 노출*하기만 한다.`,
|
|
18
|
+
design_delta: {
|
|
19
|
+
added_classes: [{ name: "Judge", stereotype: "ServiceProvider" }],
|
|
20
|
+
},
|
|
21
|
+
tradeoffs: {
|
|
22
|
+
pros: [
|
|
23
|
+
"비교 로직이 *한 자리*에 모임 — \"심판이 룰을 안다\" 메타포와 부합",
|
|
24
|
+
"양측 주체에 비교 책임이 없어 *각 주체 클래스는 단순*하게 유지",
|
|
25
|
+
],
|
|
26
|
+
cons: [
|
|
27
|
+
"Tell-Don't-Ask 위반 — 양측의 knowing 을 *외부가 꺼내 처리*",
|
|
28
|
+
"양측에 *getter 누수* 강제 (캡슐화 약화)",
|
|
29
|
+
"*외부 객체 추가*가 가상 객체로 성장할 위험 — @laco-dev: \"객체는 모두 스스로 일을 합니다\"",
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
cho_younghos_lens: {
|
|
33
|
+
cohesion: "hurts",
|
|
34
|
+
coupling: "hurts",
|
|
35
|
+
testability: "neutral",
|
|
36
|
+
notes: "거의 항상 *잘못된 첫 답*. 비교가 *대칭*이라는 이유로 정당화되지만, 메시지로 풀 수 있다면 그 쪽이 우선.",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "dsc-one-way-message",
|
|
41
|
+
label: `일방향 메시지 (${aMsg}.match(${bMsg}))`,
|
|
42
|
+
summary: `한쪽 주체(${A})가 다른 주체(${B})에게 *결과를 묻는다* — \`${aMsg}.match(${bMsg})\`. ` +
|
|
43
|
+
`호출 측이 *누가 누구에게 묻는지* 결정한다.`,
|
|
44
|
+
design_delta: {},
|
|
45
|
+
tradeoffs: {
|
|
46
|
+
pros: [
|
|
47
|
+
"Tell-Don't-Ask 충실 — 외부에 데이터 노출 X",
|
|
48
|
+
`*비교 로직이 ${A}에 응집* (능동적인 측이 책임을 보유)`,
|
|
49
|
+
"메시지 방향이 *코드에 명시*되어 협력 그래프가 읽기 쉬움",
|
|
50
|
+
],
|
|
51
|
+
cons: [
|
|
52
|
+
`*비대칭* — \`${aMsg}.match(${bMsg})\` 와 \`${bMsg}.match(${aMsg})\` 결과가 같아야 한다면 *수동 일관성* 비용`,
|
|
53
|
+
"*어느 쪽이 묻는가*가 호출 지점에 분산 → 호출처가 결정을 떠안음",
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
cho_younghos_lens: {
|
|
57
|
+
cohesion: "improves",
|
|
58
|
+
coupling: "improves",
|
|
59
|
+
testability: "improves",
|
|
60
|
+
notes: "*객체에게 메시지를 보낸다* 의 가장 직접적 형태. 첫 답으로 가장 자연스러운 카드.",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
id: "dsc-symmetric-bidirectional",
|
|
65
|
+
label: "대칭 양방향 메시지",
|
|
66
|
+
summary: `${A}와 ${B} *양측 모두*에게 비교 메시지를 둔다. 결과의 일관성은 ` +
|
|
67
|
+
`*공통 invariant*(예: 한쪽 WIN ↔ 다른 쪽 LOSE)로 테스트 또는 코드로 강제.`,
|
|
68
|
+
design_delta: {},
|
|
69
|
+
tradeoffs: {
|
|
70
|
+
pros: [
|
|
71
|
+
"*어느 쪽에서나 물을 수 있어* 호출처 자유도 증가",
|
|
72
|
+
"비교 책임이 *양측에 대칭*하게 응집 — 한쪽이 비대해질 위험 ↓",
|
|
73
|
+
],
|
|
74
|
+
cons: [
|
|
75
|
+
"*결과 일관성 강제* 비용 — 한쪽 룰 변경 시 양측 모두 갱신 필요",
|
|
76
|
+
"*중복 로직* 위험 — 결국 한쪽이 다른 쪽을 호출하는 구조로 수렴 가능",
|
|
77
|
+
"*테스트 매트릭스 N²* — 양방향 케이스를 모두 검증",
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
cho_younghos_lens: {
|
|
81
|
+
cohesion: "neutral",
|
|
82
|
+
coupling: "neutral",
|
|
83
|
+
testability: "neutral",
|
|
84
|
+
notes: "*동등성이 본질*인 도메인(양측이 동시에 결정을 행사)에 적합. 비대칭이라면 일방향 메시지가 더 자연.",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: "dsc-state-self-judging",
|
|
89
|
+
label: "State 자가 판정 (state.compareTo(other))",
|
|
90
|
+
summary: `${A}와 ${B}가 *각자 State 객체*를 가지며, 비교는 \`State.compareTo(otherState)\` 다형성으로 풀린다. ` +
|
|
91
|
+
`상태별 *고유 비교 룰*을 sealed 다형성이 표현 (예: Bust 는 항상 패배).`,
|
|
92
|
+
design_delta: {},
|
|
93
|
+
tradeoffs: {
|
|
94
|
+
pros: [
|
|
95
|
+
"상태별 *고유 비교 룰*을 다형성으로 자연 표현",
|
|
96
|
+
"비교 책임이 *주체에서 상태로 이동* — 주체 클래스 단순화",
|
|
97
|
+
"*분기 N×M 폭증* 회피 (state-machine 학습 장치)",
|
|
98
|
+
],
|
|
99
|
+
cons: [
|
|
100
|
+
"*State 패턴 도입 비용* — sealed/abstract 계층 + 전이 룰 추가 학습",
|
|
101
|
+
"*외부 mutation 위험* (state private 강제 필요)",
|
|
102
|
+
"비교가 *단순한 산술*이라면 과설계",
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
cho_younghos_lens: {
|
|
106
|
+
cohesion: "improves",
|
|
107
|
+
coupling: "improves",
|
|
108
|
+
testability: "improves",
|
|
109
|
+
notes: "분기 폭증을 *경험한 후* 도달할 카드. 처음부터 도입하면 *그저 좋다*의 함정 (@ghojeong State 패턴 2 기준: 다형성 활용 + Context 책임).",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=dualSubjectComparison.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dualSubjectComparison.js","sourceRoot":"","sources":["../../../src/tradeoff/heuristics/dualSubjectComparison.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// "*외부에서 들어온 잘못된 입력*을 어떻게 다룰까" — 재입력/예외/Result/null+while 선택.
|
|
2
|
+
// 근거: lotto PR #5, #36, #50, #90 (입력 검증 + 재입력 흐름).
|
|
3
|
+
export function errorHandlingSeeds(targetName) {
|
|
4
|
+
const T = targetName || "Input";
|
|
5
|
+
return [
|
|
6
|
+
{
|
|
7
|
+
id: "eh-runcatching-loop",
|
|
8
|
+
label: "runCatching + 외부 루프",
|
|
9
|
+
summary: `${T} 처리 메서드는 require로 *unhappy path를 예외로* 끝낸다. ` +
|
|
10
|
+
`재시도 흐름은 호출 지점에서 \`runCatching { ... }.onFailure { ... }\` 루프로 표현.`,
|
|
11
|
+
design_delta: {},
|
|
12
|
+
tradeoffs: {
|
|
13
|
+
pros: [
|
|
14
|
+
"*도메인 객체는 unhappy path를 모름* — 단일 책임 유지",
|
|
15
|
+
"재시도 정책이 *Coordinator/Controller에 한 곳에서* 표현",
|
|
16
|
+
"*invariant가 깨지면 예외*라는 Kotlin 관용을 따름",
|
|
17
|
+
],
|
|
18
|
+
cons: [
|
|
19
|
+
"예외가 *제어 흐름*으로 쓰이면 비용/혼란 증가",
|
|
20
|
+
"runCatching이 catch-all로 동작 — *예상치 못한 예외*도 같이 삼킬 위험",
|
|
21
|
+
"Result 체이닝 깊이가 깊어지면 코드 가독성 저하",
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
cho_younghos_lens: {
|
|
25
|
+
cohesion: "improves",
|
|
26
|
+
coupling: "improves",
|
|
27
|
+
testability: "improves",
|
|
28
|
+
notes: "도메인은 *행복 경로*만 안다는 분리가 가장 객체지향적.",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "eh-null-while",
|
|
33
|
+
label: "null + while 루프",
|
|
34
|
+
summary: `재입력이 필요하면 \`tryParse()\`가 null을 반환하고 호출자가 \`while (result == null) { ... }\`로 ` +
|
|
35
|
+
`반복한다. 예외를 *흐름 제어로 쓰지 않는* 보수적 선택.`,
|
|
36
|
+
design_delta: {},
|
|
37
|
+
tradeoffs: {
|
|
38
|
+
pros: [
|
|
39
|
+
"예외를 흐름으로 쓰지 않음 — 성능/관용 모두 안전",
|
|
40
|
+
"null이 *복구 가능한 실패*임을 타입이 알려줌",
|
|
41
|
+
"단순한 입력 재시도에 가장 가벼움",
|
|
42
|
+
],
|
|
43
|
+
cons: [
|
|
44
|
+
"*실패 이유*가 null 한 종류로 뭉개짐 — 사용자에게 *왜* 실패했는지 알려주기 어려움",
|
|
45
|
+
"null 처리 + 루프가 호출 지점마다 반복 — *재입력 로직 중복*",
|
|
46
|
+
"Kotlin의 *nullable 의미*가 \"실패\" + \"부재\" 두 의미로 오버로드",
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
cho_younghos_lens: {
|
|
50
|
+
cohesion: "neutral",
|
|
51
|
+
coupling: "neutral",
|
|
52
|
+
testability: "neutral",
|
|
53
|
+
notes: "*도메인 의미가 단순 부재*에 가깝다면 자연. 실패 이유가 풍부하면 부족.",
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "eh-result-type",
|
|
58
|
+
label: "Result<T> / sealed class 타입화",
|
|
59
|
+
summary: `\`sealed class ParseResult { data class Ok(val value: T) : ParseResult(); data class Err(val reason: ErrorKind) : ParseResult() }\` ` +
|
|
60
|
+
`같이 *성공/실패를 타입으로* 표현. 호출자가 when으로 분기.`,
|
|
61
|
+
design_delta: {},
|
|
62
|
+
tradeoffs: {
|
|
63
|
+
pros: [
|
|
64
|
+
"*실패 이유*를 타입으로 풍부하게 표현 (사용자에게 정확한 안내 가능)",
|
|
65
|
+
"exhaustive when으로 *모든 케이스* 컴파일 검증",
|
|
66
|
+
"예외/null 어느 쪽도 흐름 제어로 쓰지 않음 — *함수형* 스타일",
|
|
67
|
+
],
|
|
68
|
+
cons: [
|
|
69
|
+
"*결과 타입 보일러플레이트* 증가 (sealed class 정의, when 분기)",
|
|
70
|
+
"호출 사이트마다 ParseResult 처리 — 코드 폭이 늘 수 있음",
|
|
71
|
+
"*Kotlin 표준 Result*와 혼동될 수 있어 도메인용은 별도 명명 필요",
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
cho_younghos_lens: {
|
|
75
|
+
cohesion: "improves",
|
|
76
|
+
coupling: "improves",
|
|
77
|
+
testability: "improves",
|
|
78
|
+
notes: "실패에도 *도메인 의미*가 있다면 가장 정직한 표현.",
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "eh-coordinator-policy",
|
|
83
|
+
label: "Coordinator에 *재입력 정책* 격리",
|
|
84
|
+
summary: `도메인 객체는 require로 끝나고, 재입력 루프/사용자 안내/포기 조건은 \`InputCoordinator\` 같은 ` +
|
|
85
|
+
`별도 Coordinator가 책임진다. *입력 정책*과 *도메인 invariant*를 객체로 분리.`,
|
|
86
|
+
design_delta: {
|
|
87
|
+
added_classes: [{ name: "InputCoordinator", stereotype: "Coordinator" }],
|
|
88
|
+
},
|
|
89
|
+
tradeoffs: {
|
|
90
|
+
pros: [
|
|
91
|
+
"*재입력 횟수 제한*, *기본값 대체* 같은 정책 변경이 한 곳에서",
|
|
92
|
+
"도메인 객체는 *행복 경로*만 신경 — 인지 부담 분산",
|
|
93
|
+
"테스트가 *입력 정책 vs 도메인 invariant*로 깔끔히 갈림",
|
|
94
|
+
],
|
|
95
|
+
cons: [
|
|
96
|
+
"객체 수 증가 — *재입력 1회* 같은 단순 도메인엔 과설계",
|
|
97
|
+
"Coordinator가 *상태를 길게 들고 있는* 위험 (lateinit var 등 안티)",
|
|
98
|
+
"*UI 흐름*과 *도메인*을 잇는 추가 레이어가 호출 그래프를 깊게 함",
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
cho_younghos_lens: {
|
|
102
|
+
cohesion: "improves",
|
|
103
|
+
coupling: "improves",
|
|
104
|
+
testability: "improves",
|
|
105
|
+
notes: "*재입력이 정책이 되는 순간* Coordinator로 끌어올리는 것이 정직.",
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=errorHandling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandling.js","sourceRoot":"","sources":["../../../src/tradeoff/heuristics/errorHandling.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,mDAAmD;AAEnD,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,CAAC,GAAG,UAAU,IAAI,OAAO,CAAC;IAChC,OAAO;QACL;YACE,EAAE,EAAE,qBAAqB;YACzB,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EACL,GAAG,CAAC,6CAA6C;gBACjD,mEAAmE;YACrE,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,uCAAuC;oBACvC,4CAA4C;oBAC5C,qCAAqC;iBACtC;gBACD,IAAI,EAAE;oBACJ,4BAA4B;oBAC5B,oDAAoD;oBACpD,+BAA+B;iBAChC;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,iCAAiC;aACzC;SACF;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EACL,gFAAgF;gBAChF,kCAAkC;YACpC,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,8BAA8B;oBAC9B,6BAA6B;oBAC7B,oBAAoB;iBACrB;gBACD,IAAI,EAAE;oBACJ,oDAAoD;oBACpD,wCAAwC;oBACxC,mDAAmD;iBACpD;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,SAAS;gBACnB,WAAW,EAAE,SAAS;gBACtB,KAAK,EAAE,2CAA2C;aACnD;SACF;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,8BAA8B;YACrC,OAAO,EACL,sIAAsI;gBACtI,sCAAsC;YACxC,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,yCAAyC;oBACzC,mCAAmC;oBACnC,wCAAwC;iBACzC;gBACD,IAAI,EAAE;oBACJ,+CAA+C;oBAC/C,wCAAwC;oBACxC,6CAA6C;iBAC9C;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,+BAA+B;aACvC;SACF;QACD;YACE,EAAE,EAAE,uBAAuB;YAC3B,KAAK,EAAE,0BAA0B;YACjC,OAAO,EACL,qEAAqE;gBACrE,yDAAyD;YAC3D,YAAY,EAAE;gBACZ,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;aACzE;YACD,SAAS,EAAE;gBACT,IAAI,EAAE;oBACJ,uCAAuC;oBACvC,gCAAgC;oBAChC,uCAAuC;iBACxC;gBACD,IAAI,EAAE;oBACJ,mCAAmC;oBACnC,oDAAoD;oBACpD,yCAAyC;iBAC1C;aACF;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,UAAU;gBACpB,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,4CAA4C;aACpD;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UseCase } from "../../domain/model.js";
|
|
2
|
+
import type { Stereotype } from "../../domain/stereotypes.js";
|
|
3
|
+
export interface ResponsibilityAssignment {
|
|
4
|
+
responsibility: string;
|
|
5
|
+
kind: "knowing" | "doing";
|
|
6
|
+
candidate_class: string;
|
|
7
|
+
candidate_stereotype: Stereotype;
|
|
8
|
+
}
|
|
9
|
+
export interface ResponsibilityAlternative {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
rationale: string;
|
|
13
|
+
tradeoffs: {
|
|
14
|
+
pros: string[];
|
|
15
|
+
cons: string[];
|
|
16
|
+
};
|
|
17
|
+
assignments: ResponsibilityAssignment[];
|
|
18
|
+
}
|
|
19
|
+
export declare function seedsByNoun(uc: UseCase): ResponsibilityAlternative;
|
|
20
|
+
export declare function seedsByVerb(uc: UseCase): ResponsibilityAlternative;
|
|
21
|
+
export declare function seedsSingleClass(uc: UseCase): ResponsibilityAlternative;
|
|
22
|
+
export declare function seedsByStereotype(uc: UseCase): ResponsibilityAlternative;
|
|
23
|
+
export declare function buildResponsibilitySeeds(uc: UseCase, bias?: "by-noun" | "by-verb" | "balanced"): ResponsibilityAlternative[];
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
const NOUN_HINT = /([가-힣A-Za-z]+(?:들|s)?)/g;
|
|
2
|
+
const VERB_RE = /([가-힣A-Za-z]+(?:다|s|e|기|함|이|하기)?)/g;
|
|
3
|
+
function topNounCandidates(text, limit = 3) {
|
|
4
|
+
const counts = new Map();
|
|
5
|
+
const matches = text.match(NOUN_HINT) ?? [];
|
|
6
|
+
for (const raw of matches) {
|
|
7
|
+
const t = raw.trim();
|
|
8
|
+
if (t.length < 2)
|
|
9
|
+
continue;
|
|
10
|
+
counts.set(t, (counts.get(t) ?? 0) + 1);
|
|
11
|
+
}
|
|
12
|
+
return [...counts.entries()]
|
|
13
|
+
.sort((a, b) => b[1] - a[1])
|
|
14
|
+
.slice(0, limit)
|
|
15
|
+
.map(([n]) => capitalize(n));
|
|
16
|
+
}
|
|
17
|
+
function capitalize(s) {
|
|
18
|
+
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
19
|
+
}
|
|
20
|
+
function actionsFromFlow(uc) {
|
|
21
|
+
return uc.main_flow.slice();
|
|
22
|
+
}
|
|
23
|
+
export function seedsByNoun(uc) {
|
|
24
|
+
const nouns = topNounCandidates(`${uc.title} ${uc.main_flow.join(" ")}`);
|
|
25
|
+
const top = nouns[0] ?? "Subject";
|
|
26
|
+
const second = nouns[1] ?? "Detail";
|
|
27
|
+
const assignments = [
|
|
28
|
+
{
|
|
29
|
+
responsibility: `${top} 정보를 안다`,
|
|
30
|
+
kind: "knowing",
|
|
31
|
+
candidate_class: top,
|
|
32
|
+
candidate_stereotype: "InformationHolder",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
responsibility: `${second} 정보를 안다`,
|
|
36
|
+
kind: "knowing",
|
|
37
|
+
candidate_class: second,
|
|
38
|
+
candidate_stereotype: "InformationHolder",
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
for (const step of actionsFromFlow(uc)) {
|
|
42
|
+
assignments.push({
|
|
43
|
+
responsibility: step,
|
|
44
|
+
kind: "doing",
|
|
45
|
+
candidate_class: top,
|
|
46
|
+
candidate_stereotype: "ServiceProvider",
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
id: "alt-by-noun",
|
|
51
|
+
name: "도메인 명사 중심 분해",
|
|
52
|
+
rationale: `유스케이스에서 가장 자주 등장한 명사(${top}, ${second})를 1급 객체로 보고 그 주변에 책임을 모았습니다.`,
|
|
53
|
+
tradeoffs: {
|
|
54
|
+
pros: [
|
|
55
|
+
"도메인 모델이 코드에 1:1로 드러난다",
|
|
56
|
+
"값 객체가 자연스럽게 등장한다",
|
|
57
|
+
"이름이 짧고 도메인 언어를 따른다",
|
|
58
|
+
],
|
|
59
|
+
cons: [
|
|
60
|
+
"행위(doing) 책임의 자리가 명확하지 않을 수 있다",
|
|
61
|
+
"협력 흐름을 보려면 추가 사고가 필요하다",
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
assignments,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function seedsByVerb(uc) {
|
|
68
|
+
const actions = actionsFromFlow(uc);
|
|
69
|
+
const services = actions.map((a, i) => `${verbToName(a)}Service`).filter((s, i, arr) => arr.indexOf(s) === i);
|
|
70
|
+
const assignments = [];
|
|
71
|
+
actions.forEach((step, i) => {
|
|
72
|
+
const name = services[i] ?? services[0] ?? "ActionService";
|
|
73
|
+
assignments.push({
|
|
74
|
+
responsibility: step,
|
|
75
|
+
kind: "doing",
|
|
76
|
+
candidate_class: name,
|
|
77
|
+
candidate_stereotype: "ServiceProvider",
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
id: "alt-by-verb",
|
|
82
|
+
name: "행위(유스케이스 단계) 중심 분해",
|
|
83
|
+
rationale: "유스케이스의 각 단계(동사)를 ServiceProvider 단위로 잘랐습니다. 절차가 명확합니다.",
|
|
84
|
+
tradeoffs: {
|
|
85
|
+
pros: [
|
|
86
|
+
"유스케이스 흐름이 코드 구조로 그대로 드러남",
|
|
87
|
+
"각 단계가 단위테스트하기 좋음",
|
|
88
|
+
],
|
|
89
|
+
cons: [
|
|
90
|
+
"도메인 명사가 1급으로 표현되지 않음",
|
|
91
|
+
"절차적 코드에 가까워질 수 있음 (객체지향의 장점이 약해짐)",
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
assignments,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export function seedsSingleClass(uc) {
|
|
98
|
+
const top = topNounCandidates(uc.title)[0] ?? "Game";
|
|
99
|
+
const assignments = [];
|
|
100
|
+
for (const step of uc.main_flow) {
|
|
101
|
+
assignments.push({
|
|
102
|
+
responsibility: step,
|
|
103
|
+
kind: "doing",
|
|
104
|
+
candidate_class: top,
|
|
105
|
+
candidate_stereotype: "Coordinator",
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
id: "alt-single-class",
|
|
110
|
+
name: "단일 Coordinator로 시작",
|
|
111
|
+
rationale: "처음엔 한 클래스로 시작하고 통증이 보이는 책임만 추출하는 점진적 접근입니다.",
|
|
112
|
+
tradeoffs: {
|
|
113
|
+
pros: [
|
|
114
|
+
"초기 설계 비용이 가장 낮음",
|
|
115
|
+
"실제 마찰이 보인 뒤 분리하므로 과설계 위험이 적음",
|
|
116
|
+
],
|
|
117
|
+
cons: [
|
|
118
|
+
"방치 시 god-object로 자라기 쉬움",
|
|
119
|
+
"테스트 단위가 커진다",
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
assignments,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
export function seedsByStereotype(uc) {
|
|
126
|
+
const top = topNounCandidates(uc.title)[0] ?? "Game";
|
|
127
|
+
const assignments = [
|
|
128
|
+
{
|
|
129
|
+
responsibility: "유스케이스 진입과 호출 순서를 조율한다",
|
|
130
|
+
kind: "doing",
|
|
131
|
+
candidate_class: `${top}Coordinator`,
|
|
132
|
+
candidate_stereotype: "Coordinator",
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
responsibility: `${top} 도메인 정보를 안다`,
|
|
136
|
+
kind: "knowing",
|
|
137
|
+
candidate_class: top,
|
|
138
|
+
candidate_stereotype: "InformationHolder",
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
responsibility: "도메인 규칙을 계산한다",
|
|
142
|
+
kind: "doing",
|
|
143
|
+
candidate_class: `${top}Rule`,
|
|
144
|
+
candidate_stereotype: "ServiceProvider",
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
for (const step of uc.main_flow) {
|
|
148
|
+
assignments.push({
|
|
149
|
+
responsibility: step,
|
|
150
|
+
kind: "doing",
|
|
151
|
+
candidate_class: `${top}Coordinator`,
|
|
152
|
+
candidate_stereotype: "Coordinator",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
id: "alt-by-stereotype",
|
|
157
|
+
name: "Stereotype 5종으로 사전 분류",
|
|
158
|
+
rationale: "Coordinator / Information Holder / Service Provider / (필요 시 Interfacer)로 책임의 종류부터 분리합니다.",
|
|
159
|
+
tradeoffs: {
|
|
160
|
+
pros: [
|
|
161
|
+
"역할이 명시적이라 god-object 위험이 낮음",
|
|
162
|
+
"각 클래스가 한 가지 이유로만 변경된다",
|
|
163
|
+
],
|
|
164
|
+
cons: [
|
|
165
|
+
"초기 객체 수가 많아 학습 곡선 상승",
|
|
166
|
+
"유스케이스가 단순할 때 과설계 위험",
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
assignments,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function verbToName(step) {
|
|
173
|
+
const cleaned = step.replace(/[^A-Za-z가-힣]+/g, " ").trim().split(/\s+/)[0] ?? "Action";
|
|
174
|
+
return capitalize(cleaned);
|
|
175
|
+
}
|
|
176
|
+
export function buildResponsibilitySeeds(uc, bias) {
|
|
177
|
+
if (bias === "by-noun")
|
|
178
|
+
return [seedsByNoun(uc), seedsByStereotype(uc), seedsSingleClass(uc)];
|
|
179
|
+
if (bias === "by-verb")
|
|
180
|
+
return [seedsByVerb(uc), seedsByStereotype(uc), seedsSingleClass(uc)];
|
|
181
|
+
return [seedsByNoun(uc), seedsByVerb(uc), seedsByStereotype(uc), seedsSingleClass(uc)];
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=responsibilitySplit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsibilitySplit.js","sourceRoot":"","sources":["../../../src/tradeoff/heuristics/responsibilitySplit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { STEREOTYPES, STEREOTYPE_HINTS } from "../../domain/stereotypes.js";
|
|
2
|
+
export function stereotypeChoiceSeeds(targetName) {
|
|
3
|
+
return STEREOTYPES.map((s) => {
|
|
4
|
+
const hints = STEREOTYPE_HINTS[s];
|
|
5
|
+
return {
|
|
6
|
+
id: `stereotype-${s.toLowerCase()}`,
|
|
7
|
+
label: s,
|
|
8
|
+
summary: `${targetName}을 ${s}로 분류한다.`,
|
|
9
|
+
design_delta: {},
|
|
10
|
+
tradeoffs: {
|
|
11
|
+
pros: hints.fits.map((f) => `적합: ${f}`),
|
|
12
|
+
cons: hints.misfits.map((m) => `부적합 가능성: ${m}`),
|
|
13
|
+
},
|
|
14
|
+
cho_younghos_lens: {
|
|
15
|
+
cohesion: "neutral",
|
|
16
|
+
coupling: "neutral",
|
|
17
|
+
testability: s === "ServiceProvider" || s === "InformationHolder" ? "improves" : "neutral",
|
|
18
|
+
notes: `${s}는 ${hints.fits[0] ?? "특정 상황"}에 가장 어울린다.`,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=stereotypeChoice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stereotypeChoice.js","sourceRoot":"","sources":["../../../src/tradeoff/heuristics/stereotypeChoice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,cAAc,CAAC,CAAC,WAAW,EAAE,EAAE;YACnC,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,GAAG,UAAU,KAAK,CAAC,SAAS;YACrC,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE;gBACT,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;aAChD;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE,SAAkB;gBAC5B,QAAQ,EAAE,SAAkB;gBAC5B,WAAW,EAAE,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,UAAmB,CAAC,CAAC,CAAC,SAAkB;gBAC5G,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,YAAY;aACrD;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|