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,50 @@
|
|
|
1
|
+
# PR #133 — [자동차 경주 구현] 시아 미션 제출합니다
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@Leeyerin0210](https://github.com/Leeyerin0210)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/133
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** @KwonDae
|
|
7
|
+
- **라인 코멘트:** 32
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **`Car`에 require로 invariants 검증** — 리뷰어 칭찬.
|
|
12
|
+
- **자동차에 move 메시지를 던지는 구조** — Tell-Don't-Ask 적용. 리뷰어 명시적 칭찬.
|
|
13
|
+
- **`ErrorConstant` object 활용** — 도메인 어휘로 에러 분류.
|
|
14
|
+
- **자기 학습 의지 표명** — var/private val 차이 등 핵심 질문을 적극 제기.
|
|
15
|
+
- **전략 패턴 적용 시도** — 리뷰 후 완전랜덤/4이상/3이하 세 전략 구현으로 무작위 격리.
|
|
16
|
+
|
|
17
|
+
## 못한 점 (설계 관점)
|
|
18
|
+
|
|
19
|
+
- **`InOutView` 한 클래스에 입출력 합침** — 테스트 분리 어려움. 책임이 한 곳에 묶임.
|
|
20
|
+
- **`InOutController`도 같은 패턴** — 책임을 단일 클래스에 합침.
|
|
21
|
+
- **`enum` + `getData()` 2단 depth 상수 접근** — 단순 const val로 충분한데 우회.
|
|
22
|
+
- **`Car.currentPosition`이 var public** — 외부 직접 수정 가능.
|
|
23
|
+
- **`InputTest`가 InController + InOutView 둘 다 테스트** — 테스트 명칭과 대상 어긋남.
|
|
24
|
+
- **공백 처리/5글자 검증 미흡** — 도메인 invariants 정의 좁음.
|
|
25
|
+
- **`DTO`라는 패턴 도입했지만 정의에 안 맞는 사용** — 단순 데이터 운반이 아니라 검증까지 가지고 있음.
|
|
26
|
+
|
|
27
|
+
## 리뷰어 의견 요지
|
|
28
|
+
|
|
29
|
+
리뷰어 @KwonDae는 **"하나의 클래스에 묶여 있으면 분리 테스트가 어렵다"** 는 본질을 일관되게 짚었다. `InOutView`/`InOutController`가 한 클래스에 입출력을 묶으면, 그 자체로 단일 책임 위반 + 테스트 격리 어려움 + 변경 영향 확대 — 한 문제로 세 가지가 동시에 발생.
|
|
30
|
+
|
|
31
|
+
또한 **var vs private val + 메서드** 의 차이를 학생이 직접 답하게 만든 가이드도 강력. "직접 접근으로 수정"과 "행동에 따라 값이 바뀜"의 차이는 추적 가능성/관리 용이성에 직결.
|
|
32
|
+
|
|
33
|
+
전략 패턴을 적용하라는 가이드는 학습 자료(블로그) 링크와 함께 명확히 제시.
|
|
34
|
+
|
|
35
|
+
- **대표 인용:**
|
|
36
|
+
> In 과 Out은 하나의 클래스에서 관리되어야 할까요? 생각해보면 둘은 다른 기능을 할텐데 입력과 출력에 대해 별도로 테스트를 한다고 하면 어떤 일이 발생할까요?
|
|
37
|
+
>
|
|
38
|
+
> — @KwonDae on `src/main/kotlin/view/InOutView.kt`
|
|
39
|
+
|
|
40
|
+
> 프로퍼티로 variable로 생성하여 외부에서 쉽게 접근하여 값을 수정할 수 있는것 / 값에 직접 접근하지 못하고 어떠한 행동(자동차가 움직인다)에 따라 값이 바뀌는 것 / 이 두가지는 어떤 차이점이 있을지 고민해보시면 좋을 것 같아요!
|
|
41
|
+
>
|
|
42
|
+
> — @KwonDae on `src/main/kotlin/model/Car.kt:19`
|
|
43
|
+
|
|
44
|
+
## 얻은 교훈
|
|
45
|
+
|
|
46
|
+
- **합쳐진 클래스 = 분리된 테스트 어려움.** Input과 Output을 한 클래스에 두면 (1) 책임 모호, (2) 테스트 클래스 명칭 모호, (3) 한쪽 변경이 다른 쪽에 영향 — 세 가지 문제가 동시에. 분리는 무겁지만 명확.
|
|
47
|
+
- **외부 직접 접근 vs 메서드 호출의 차이는 추적 가능성.** `car.position = 5`는 어디서 호출됐는지 알기 어렵지만, `car.moveTo(5)`나 `car.move()`는 그 메서드가 호출된 곳을 추적 가능.
|
|
48
|
+
- **전략 패턴은 무작위 격리의 표준.** RandomStrategy / FixedStrategy / NeverMoveStrategy 같은 구현체로 같은 인터페이스를 만족. 테스트는 결정적 전략으로, production은 랜덤 전략으로.
|
|
49
|
+
- **DTO와 검증의 분리.** DTO에 검증을 넣으면 어디서 검증이 일어나는지 모호해진다. DTO는 단순 운반, 검증은 도메인 객체의 init.
|
|
50
|
+
- **테스트 클래스명 = 테스트 대상명.** `InputTest`가 다른 객체들을 함께 테스트하면 이름이 거짓말. 한 단위 테스트는 한 production 클래스.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# PR #159 — [자동차 경주 2단계] 시아 미션 제출합니다
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@Leeyerin0210](https://github.com/Leeyerin0210)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/159
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** @KwonDae
|
|
7
|
+
- **라인 코멘트:** 11
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **이름 변경: `MainController` → `RacingController`, `RaceService` → `RacingGame`** — 도메인 어휘로 구체화. 추상적 일반어 회피.
|
|
12
|
+
- **여러 Controller를 `RaceController` 하나로 통합** — 1단계의 InController/OutController 분리 과잉을 정리.
|
|
13
|
+
- **`Car` 이름 invariants를 Car 생성자에서 처리** — 자기 책임을 자기가 들도록 옮김.
|
|
14
|
+
- **`CarManager` 도입으로 중복 검증 및 carList 생성 분리** — 다음 단계에서 일급 컬렉션 학습으로 자연스럽게 이어질 자리.
|
|
15
|
+
|
|
16
|
+
## 못한 점 (설계 관점)
|
|
17
|
+
|
|
18
|
+
- **`Service`라는 추상적 명칭** — 도메인 어휘로 답할 수 있는 자리에 추상 일반어 사용. `RaceService` 대신 `RacingGame`이 더 어울린다는 리뷰어 지적.
|
|
19
|
+
- **`OutController` / `InController` 잔재** — 1단계 분리가 일부 남음.
|
|
20
|
+
- **`RacingGame` 내부에서 의존 객체 직접 생성** — 외부에서 주입받으면 (1) 테스트 페이크 주입, (2) 라이프사이클 결정의 자유.
|
|
21
|
+
- **`CarManager` 이름 — Manager는 절차적 -er 명사** — 일급 컬렉션(Cars)의 자리에 Manager가 들어선 식.
|
|
22
|
+
- **`RaceControllerTest`인데 RaceController 존재 안 함** — 코드와 테스트의 어긋남.
|
|
23
|
+
- **테스트가 무작위 의존** — `[3,4], [4,5], [5,6]에서 C 우승` 같은 결정적 시나리오로 바꿔야.
|
|
24
|
+
|
|
25
|
+
## 리뷰어 의견 요지
|
|
26
|
+
|
|
27
|
+
리뷰어 @KwonDae는 이 라운드에서 **"요구사항의 어휘를 그대로 코드 어휘로"** 라는 강한 메타 가이드를 짚었다. 프로그래밍 요구사항의 단어(예: "RacingGame")를 그대로 클래스 이름으로 쓰면 리뷰어와 리뷰이가 같은 단어로 소통할 수 있어 리소스가 효율적.
|
|
28
|
+
|
|
29
|
+
또한 **의존성 주입의 가치** 를 다시 짚음 — RacingGame이 내부에서 생성하지 말고 외부에서 받으면 테스트와 라이프사이클 자유도 상승.
|
|
30
|
+
|
|
31
|
+
`CarManager`라는 명명에 대해서는 학습 자료 키워드(일급 컬렉션)를 제시하며 다음 단계 학습으로 자연스럽게 연결.
|
|
32
|
+
|
|
33
|
+
- **대표 인용:**
|
|
34
|
+
> Service는 어떤 역할을 하나요? 자동차 경주 Controller는 RaceController가 MainController 라는 추상적인 명칭보다 명확해보이는데 시아 생각은 어떤가요?
|
|
35
|
+
>
|
|
36
|
+
> — @KwonDae on `src/main/kotlin/model/RaceService.kt`
|
|
37
|
+
|
|
38
|
+
> 프로그래밍 요구사항에 맞게 구현을 하는 것은 리뷰어와 리뷰이의 모든 리소스를 효율적으로 사용할 수 있게 해준답니다.
|
|
39
|
+
>
|
|
40
|
+
> — @KwonDae on `src/main/kotlin/model/RaceService.kt`
|
|
41
|
+
|
|
42
|
+
> 일급 컬렉션이라는 키워드에 대해 살짝 찾아보셔도 다음 학습에 도움이 될 것 같아요. 그 후에 지금 사용하려는 CarManager를 다시 살펴보시면 어떤 의미인지 알게 되실거에요!
|
|
43
|
+
>
|
|
44
|
+
> — @KwonDae on `src/main/kotlin/model/CarManger.kt`
|
|
45
|
+
|
|
46
|
+
## 얻은 교훈
|
|
47
|
+
|
|
48
|
+
- **요구사항의 어휘 = 코드의 어휘.** 프로그래밍 요구사항이 "자동차 경주(RacingGame)"를 말하면 그 이름이 그대로 클래스로. 리뷰어와 학생이 같은 단어를 쓰면 토론이 명확하고 리소스 효율도 올라간다.
|
|
49
|
+
- **`Manager` / `Service` 같은 일반어 회피.** 도메인이 그것을 부르는 더 구체적 이름이 있을 가능성 — `Cars`(일급 컬렉션), `RacingGame` 등. 추상 명사는 종종 도메인 누락의 신호.
|
|
50
|
+
- **의존성 주입의 두 가지 가치.** (1) 테스트에서 페이크/스텁 주입, (2) 라이프사이클을 외부에서 결정. 둘 다 객체의 자유를 넓힌다.
|
|
51
|
+
- **테스트의 결정성을 결정적 입력으로.** 무작위에 의존하면 테스트가 "통계적 신뢰" 수준. "[3,4],[4,5]에서 C 우승" 같은 시나리오는 100% 재현 가능.
|
|
52
|
+
- **이름의 변경이 학습의 가시화다.** "MainController → RacingController"라는 한 단어의 변경이, 책임의 명확화라는 큰 학습을 보여준다.
|
|
53
|
+
- **두 PR을 연결하는 리뷰** — 1단계의 코멘트가 2단계까지 끌고 가는 리뷰어 패턴이 학습 연속성을 만든다.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# 진행 상황 (작업 일지)
|
|
2
|
+
|
|
3
|
+
이 문서는 `woowacourse/kotlin-racingcar` PR 리뷰 분석 작업의 **상태 추적용**이다. 다음 세션이 어디서부터 이어가야 하는지를 알린다.
|
|
4
|
+
|
|
5
|
+
## 데이터셋
|
|
6
|
+
|
|
7
|
+
- 출처: https://github.com/woowacourse/kotlin-racingcar/pulls?q=is:pr+is:closed
|
|
8
|
+
- 전체 closed PR: **188개**
|
|
9
|
+
- 분석 대상 필터: **라인 레벨 reviewer 코멘트 ≥ 5개**
|
|
10
|
+
- 통과한 PR: **133개**, 고유 reviewee: **77명**
|
|
11
|
+
|
|
12
|
+
## 분석 어휘
|
|
13
|
+
|
|
14
|
+
- 유지: 책임/응집/결합/캡슐화/Tell-Don't-Ask/테스터빌리티/도메인 모델링/일급 컬렉션/원시 강박/의존 방향/명명 설계
|
|
15
|
+
- 제외: Kotlin 관용구 (scope function, smart cast, null 처리, val/var, data class 사용 여부, init 블록 형태, collection API 선택, extension 위치)
|
|
16
|
+
|
|
17
|
+
## 진행 상태
|
|
18
|
+
|
|
19
|
+
**✅ 완료: 133 PRs / 77 reviewees** — 2026-05-22
|
|
20
|
+
|
|
21
|
+
`SUMMARY.md` + `README.md` 작성 완료. 메인 README 링크 추가 완료.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
이전 진행 로그:
|
|
26
|
+
|
|
27
|
+
**76 PRs 완료 / 40+ reviewees 완료**
|
|
28
|
+
|
|
29
|
+
완료된 reviewees (코멘트 많은 순):
|
|
30
|
+
- wondroid-world, tmdgh1592, chanho0908, rosemin928, junseo511, haeum808, m6z1
|
|
31
|
+
- songpink, SeongHoonC, gahyunkim, HamBeomJoon, hwannow, Hevton, boogi-woogi
|
|
32
|
+
- devfeijoa, pingu244, oungsi2000, Leeyerin0210, murjune, kkosang, cucumber99
|
|
33
|
+
- DYGames, RightHennessy, 2chang5, parkjiminnnn, no1msh, re4rk, kimhm0728
|
|
34
|
+
- chaehyuns, doabletuple, hyunji1203, otter66, ippnsj, gaeun5744
|
|
35
|
+
- aprilgom, medAndro, giovannijunseokim, ki960213, tobae-time, rhkrwngud445
|
|
36
|
+
|
|
37
|
+
## 다음 우선순위 (남은 high-comment reviewees)
|
|
38
|
+
|
|
39
|
+
대략 57 PR / 37 reviewees 남음. /tmp/oop-lessons-cache/grouped.tsv를 보면 정확한 순서를 알 수 있음.
|
|
40
|
+
|
|
41
|
+
다음 우선:
|
|
42
|
+
- chws0508 (31, 2)
|
|
43
|
+
- yrsel (31, 1)
|
|
44
|
+
- kmkim2689 (30, 2)
|
|
45
|
+
- Yunseok-Nam (30, 2)
|
|
46
|
+
- s6m1n (29, 2)
|
|
47
|
+
- Hogu59 (29, 2)
|
|
48
|
+
- EmilyCh0 (29, 2)
|
|
49
|
+
- hxeyexn (28, 2)
|
|
50
|
+
- inseonyun (27, 2)
|
|
51
|
+
- ijh1298 (27, 1)
|
|
52
|
+
- sujin9 (25, 2)
|
|
53
|
+
- moondev03 (25, 2)
|
|
54
|
+
- yujamint (25, 1)
|
|
55
|
+
- jiyuneel (25, 1)
|
|
56
|
+
- junjange (24, 2)
|
|
57
|
+
- JoYehyun99 (24, 2)
|
|
58
|
+
- whk06061 (24, 1)
|
|
59
|
+
- Songusika (24, 1)
|
|
60
|
+
- sh1mj1 (23, 2)
|
|
61
|
+
- hyemdooly (23, 2)
|
|
62
|
+
- ... (잔여 reviewees는 grouped.tsv 참조)
|
|
63
|
+
|
|
64
|
+
## 캐시 위치
|
|
65
|
+
|
|
66
|
+
`/tmp/oop-lessons-cache/`:
|
|
67
|
+
- `prs.json` — 188개 PR 메타
|
|
68
|
+
- `nums.txt` — PR 번호 목록
|
|
69
|
+
- `counts.tsv`, `reviewer_counts.tsv`, `authors.tsv`
|
|
70
|
+
- `grouped.tsv` — number / reviewer_count / distinct_reviewers / author
|
|
71
|
+
- `comments/<N>.json`, `pr_meta/<N>.json`, `reviews/<N>.json`, `issues/<N>.json`
|
|
72
|
+
|
|
73
|
+
**주의:** `/tmp`는 재부팅 시 사라질 수 있음. 시작 전 캐시 확인 후 없으면 재생성.
|
|
74
|
+
|
|
75
|
+
## 다음 세션 시작 시
|
|
76
|
+
|
|
77
|
+
1. 이 파일 + 가장 최근 commit 확인
|
|
78
|
+
2. 캐시 존재 여부 확인 (`ls /tmp/oop-lessons-cache/comments/ | wc -l == 133` 이어야)
|
|
79
|
+
3. 캐시 있으면 다음 우선순위(chws0508부터) 진행
|
|
80
|
+
4. 5-10 PR마다 commit + push로 안전 저장
|
|
81
|
+
5. 전체 133개 완료 후 `SUMMARY.md` + `README.md` + 메인 README 링크 작성
|
|
82
|
+
|
|
83
|
+
## 작성 패턴 (효율을 위해)
|
|
84
|
+
|
|
85
|
+
- 1단계 PR이 비슷한 안티패턴(Constants, Util, MutableList, Controller 비대 등) 반복하므로 두 번째 라운드부터는 좀 더 짧게 작성
|
|
86
|
+
- 핵심 트레이드오프나 새로운 패턴이 나오는 PR에 더 집중
|
|
87
|
+
- 사람마다 30-60 lines 정도가 적정 (1단계 = 50-100, 리팩터링/2단계 = 40-70)
|
|
88
|
+
|
|
89
|
+
## 검증 — 최종 단계에서 수행
|
|
90
|
+
|
|
91
|
+
- 무작위 3개 PR 파일을 GitHub 원본과 대조
|
|
92
|
+
- `grep -r -E "scope function|apply *\{|let *\{|smart cast|nullable|val vs var|data class" lessons/` Kotlin 관용구 누수 점검
|
|
93
|
+
- `SUMMARY.md`의 PR 카운트 = 실제 `.md` 수
|
|
94
|
+
- 모든 reviewee 폴더에 최소 1개 .md
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 우아한테크코스 kotlin-racingcar PR 리뷰 OOP 교훈
|
|
2
|
+
|
|
3
|
+
[`woowacourse/kotlin-racingcar`](https://github.com/woowacourse/kotlin-racingcar) 리포의 closed PR 188개 중 라인 코멘트 ≥ 5개인 **133개 PR (77명 reviewee)**을 분석해 도출한 OOP 설계 교훈 모음.
|
|
4
|
+
|
|
5
|
+
## 📖 시작하기
|
|
6
|
+
|
|
7
|
+
- **[SUMMARY.md](SUMMARY.md)** — 전체 정리 (자주 하는 실수 TOP 10, 리뷰어 명언, 조영호 강의 토픽 매핑, 단계별 학습 곡선)
|
|
8
|
+
- **개별 PR 분석** — 각 reviewee 폴더 안에 `<PR번호>-<단계>-자동차-경주.md` 형태로 정리
|
|
9
|
+
|
|
10
|
+
## 🎯 분석 범위
|
|
11
|
+
|
|
12
|
+
**OOP 설계 관점만**:
|
|
13
|
+
책임 분배 / 응집도 / 결합도 / 캡슐화 / Tell-Don't-Ask / 테스터빌리티 / 도메인 모델링 / 일급 컬렉션 / 원시 강박 / 의존 방향 / 명명 설계
|
|
14
|
+
|
|
15
|
+
**제외**:
|
|
16
|
+
Kotlin 관용구 (scope function, smart cast, null 처리 idiom, val/var, data class 문법 자체, init 블록 형태, collection API 선택)
|
|
17
|
+
|
|
18
|
+
## 📂 폴더 구조
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
woowacourse-racingcar/
|
|
22
|
+
├── README.md (이 문서)
|
|
23
|
+
├── SUMMARY.md (총정리)
|
|
24
|
+
├── PROGRESS.md (작업 진행 로그)
|
|
25
|
+
└── <reviewee-name>/
|
|
26
|
+
└── <PR번호>-<단계>-자동차-경주.md
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
각 PR 분석은 다음 구조:
|
|
30
|
+
- **잘한 점** (설계 관점)
|
|
31
|
+
- **못한 점** (설계 관점)
|
|
32
|
+
- **리뷰어 의견 요지** (대표 인용 1~3개 + 출처)
|
|
33
|
+
- **얻은 교훈**
|
|
34
|
+
|
|
35
|
+
## 🔥 가장 인상적인 PR
|
|
36
|
+
|
|
37
|
+
학습 곡선의 본보기로 참고할 만한 PR:
|
|
38
|
+
|
|
39
|
+
- **[sh1mj1/115](sh1mj1/115-2단계-자동차-경주.md)** — 1단계 피드백을 *자가 학습*으로 발전시킨 이상적 사례. 리뷰어 평: "박수 쳤습니다." MoveStrategy 인터페이스 도입, DI 깊이 자가 인지/해결.
|
|
40
|
+
|
|
41
|
+
- **[moondev03/161](moondev03/161-2단계-자동차-경주.md)** — 1단계 피드백을 *맹목 흡수*하지 않고 *재검토*. "InputView에 검증 옮겨라" 가이드를 따랐지만 결합도 우려로 재조정.
|
|
42
|
+
|
|
43
|
+
- **[hxeyexn/109](hxeyexn/109-1단계-자동차-경주.md)** — 리뷰어 @ghojeong의 명문장 다수. "Depth = abstraction level", "휴가 가도 동료가 일할 수 있는 코드", "최대한도로 세분화하라".
|
|
44
|
+
|
|
45
|
+
- **[Songusika/84](Songusika/84-2단계-자동차-경주.md)** — 페어 프로그래밍 + 학생 *역질문*으로 토론 깊어진 PR. data class vs record 5가지 차이 정리.
|
|
46
|
+
|
|
47
|
+
- **[injoon2019/24](injoon2019/24-2단계-자동차-경주.md)** — 3명 리뷰어 협력 리뷰. 코틀린 idiom + OOP 개념 + 테스트 DSL (kotest).
|
|
48
|
+
|
|
49
|
+
## 🎓 단계별 학습 곡선
|
|
50
|
+
|
|
51
|
+
리뷰어들이 반복적으로 짚는 안티패턴은 **단계가 진행되면서 다른 깊이**로 나타남:
|
|
52
|
+
|
|
53
|
+
**1단계 흔한 실수:**
|
|
54
|
+
- `Const.kt` 한 파일 / `Validator` / `Util` 모호한 이름 / Controller god-object / Car.position var / 검증 위치 혼란 / 매직넘버 / 추상적인 테스트명
|
|
55
|
+
|
|
56
|
+
**2단계 부각 이슈:**
|
|
57
|
+
- 전략 패턴 / 일급 컬렉션 / VO / 테스트 가능성 / Controller-Domain 책임 재분배 / 도메인-UI 의존 방향
|
|
58
|
+
|
|
59
|
+
자세한 분석은 [SUMMARY.md의 "단계별 학습 곡선"](SUMMARY.md#단계별-학습-곡선) 참고.
|
|
60
|
+
|
|
61
|
+
## 🔗 관련 리소스
|
|
62
|
+
|
|
63
|
+
- 원본 리포: https://github.com/woowacourse/kotlin-racingcar
|
|
64
|
+
- 분석 도구 (Oh-My-OOP MCP): [상위 리포 README](../../README.md)
|
|
65
|
+
- 조영호 "객체지향의 사실과 오해" — 책임/역할/협력 3요소가 본 분석의 주요 어휘
|
|
66
|
+
|
|
67
|
+
## 📝 작업 로그
|
|
68
|
+
|
|
69
|
+
분석 과정과 데이터 위치는 [PROGRESS.md](PROGRESS.md) 참고. 캐시된 PR 메타와 코멘트 JSON은 `/tmp/oop-lessons-cache/`에 저장됨 (재부팅 시 사라질 수 있음).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# PR #51 — [링링] 1단계 자동차 경주 제출합니다
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@RightHennessy](https://github.com/RightHennessy)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/51
|
|
5
|
+
- **단계:** 1단계
|
|
6
|
+
- **리뷰어:** @woowahan-leah
|
|
7
|
+
- **라인 코멘트:** 17
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **`Name.init` 블록에서 require로 유효성 검증** — 자기 invariants를 자기가 든다. 리뷰어 칭찬.
|
|
12
|
+
- **요구사항 외 자체 판단 구현** — 리뷰어 명시적 칭찬. 학습 의지.
|
|
13
|
+
- **자기 결정의 회고적 응답** — try-catch 줄임 의도, catch가 에러 먹을 수 있음 학습.
|
|
14
|
+
|
|
15
|
+
## 못한 점 (설계 관점)
|
|
16
|
+
|
|
17
|
+
- **`catch (e: Exception)`로 모든 예외 포괄** — 프로그램이 커지면 예상 못한 버그를 catch가 삼킬 위험.
|
|
18
|
+
- **InputView/OutputView 인스턴스를 World가 보유** — 상태 없는 View는 object로 충분.
|
|
19
|
+
- **`Car.toString()` 오버라이드** — UI 변경(이모지 추가 등)이 도메인 변경으로 연결.
|
|
20
|
+
- **`Util` 클래스에 `generateRandom` + `tryAndRerun` 묶음** — 두 함수의 응집 근거 약함. 자기 답변에서 "프로젝트 전역 사용 + 독립 기능"이라는 기준을 정립한 후 generateRandom을 분리.
|
|
21
|
+
- **`Values.kt` 매직넘버 상수 컨테이너** — 결합도 증가.
|
|
22
|
+
- **`CarManager.init`을 외부에서 호출하는 구조** — 인스턴스 생성과 초기화가 분리되어 외부가 그 절차를 알아야.
|
|
23
|
+
- **랜덤 의존 메서드 테스트 누락**.
|
|
24
|
+
|
|
25
|
+
## 리뷰어 의견 요지
|
|
26
|
+
|
|
27
|
+
리뷰어 @woowahan-leah는 **catch의 위험성** 을 정확히 짚었다 — `catch (Exception)`이 모든 예외를 삼키면 진짜 버그를 가린다. 구체적 catch가 안전.
|
|
28
|
+
|
|
29
|
+
또한 **이모지 비유로 UI/도메인 결합 시각화** — UI 요구가 "자동차명 앞뒤에 이모지 붙이기"로 바뀌면 도메인 객체의 toString을 바꿔야 한다는 어색함을 한 줄로 보여줌.
|
|
30
|
+
|
|
31
|
+
**객체 인스턴스화의 정당화** — InputView/OutputView가 인스턴스를 가질 이유가 없으면 object. 학생이 "메모리 소요 줄임"이라고 답해 학습 흡수.
|
|
32
|
+
|
|
33
|
+
`CarManager.init`을 외부에서 호출하는 구조에 대해 "생성과 동시에 초기화"라는 깔끔한 가이드 — 호출자가 절차를 알 필요 없도록.
|
|
34
|
+
|
|
35
|
+
- **대표 인용:**
|
|
36
|
+
> catch (e: Exception)문으로 모든 에러를 catch하고 있는데요, 이러한 코드는 프로그램이 커질수록 예상치 못한 버그를 발견하기 어렵게 만들 수 있어요.
|
|
37
|
+
>
|
|
38
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/Application.kt:14`
|
|
39
|
+
|
|
40
|
+
> UI 요구사항이 바뀌어 자동차명 앞뒤에 이모지를 붙이는 것으로 바뀐다면 어떻게 될까요? UI 로직의 변경사항으로 인해 도메인 로직이 수정되는 상황이 발생하게 됩니다.
|
|
41
|
+
>
|
|
42
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/entity/Car.kt:14`
|
|
43
|
+
|
|
44
|
+
> 외부에서 CarManager를 깊게 알지 않으면 인스턴스를 생성할 때 init 함수를 호출해야 한다는 것을 잘 모를 수 있어요. CarManager를 생성할때부터 초기화할 수 있도록 해보면 어떨까요?
|
|
45
|
+
>
|
|
46
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/model/CarManager.kt:16`
|
|
47
|
+
|
|
48
|
+
## 얻은 교훈
|
|
49
|
+
|
|
50
|
+
- **catch는 좁게 잡는다.** `catch (Exception)`은 안전망이 아니라 위장막. 진짜 버그를 가리는 가장 큰 코드 안티패턴 중 하나. 구체적 예외 클래스를 명시.
|
|
51
|
+
- **생성과 초기화는 한 단계.** 생성자가 끝나면 객체가 완전히 사용 가능해야. 별도 init() 호출이 필요하면 사용자가 그 절차를 알아야 — 깨지기 쉬운 API.
|
|
52
|
+
- **UI 변경 시뮬레이션 = 결합도 진단.** "이모지 추가하면 어디가 바뀌나"를 시뮬레이션하면 결합 위치가 즉시 드러남. UI 변경이 도메인을 흔들면 결합도 문제.
|
|
53
|
+
- **인스턴스화의 정당화 = 다양한 상태/의존성.** 상태 없고 의존성 없으면 object. 인스턴스화는 비용을 지불하는 선택.
|
|
54
|
+
- **자기 답변으로 학습 흡수 확인.** 리뷰어가 "object의 차이는?"이라고 물었을 때 학생이 "싱글톤 + 메모리 소요 절감"이라 답한 흐름이 학습을 명시화. 리뷰어가 그 답을 확인해주면 안정적 학습.
|
|
55
|
+
- **요구사항 외 자체 구현의 가치 vs 위험.** 학생의 자발적 확장은 학습 가치가 크지만, 동시에 검증 부담이 커진다. 리뷰어가 그 의지를 인정하면서 추가 학습 도구(runCatching 등)를 제시하는 균형 가이드가 인상적.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# PR #58 — [링링] 2단계 자동차 경주 제출합니다
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@RightHennessy](https://github.com/RightHennessy)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/58
|
|
5
|
+
- **단계:** 2단계
|
|
6
|
+
- **리뷰어:** @woowahan-leah
|
|
7
|
+
- **라인 코멘트:** 24
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **Util 클래스의 자기 기준 정립** — "프로젝트 전역 사용 + 독립적 기능"이라는 기준으로 Util의 자리를 재고. `tryAndRerun`은 두되 `generateRandom`은 CarManager 곁으로.
|
|
12
|
+
- **try-catch에서 runCatching으로의 학습 의지** — 시간 부족하지만 다음 시도 표명.
|
|
13
|
+
- **NumberGenerator 인터페이스 + 테스트 fake로 결정성 확보** — 리뷰어 명시적 칭찬.
|
|
14
|
+
- **불필요한 mutable 제거** — `cars`를 List로 충분.
|
|
15
|
+
- **자기 답변으로 가이드를 풀어 설명** — "메시지 던지기"의 세 가지 효과(호출자 무지/검색 부담/변경 전파)를 정리.
|
|
16
|
+
|
|
17
|
+
## 못한 점 (설계 관점)
|
|
18
|
+
|
|
19
|
+
- **`World.kt`의 컨트롤러가 OutputView의 상수를 알고 있음** — `MSG_INPUT_CAR_NAME` 같은 구현 상세 참조. 메시지만 던지면 됨.
|
|
20
|
+
- **`Car.position`이 외부에서 수정 가능** — 캡슐화 누락.
|
|
21
|
+
- **`OutputView`가 도메인 로직 참조** — `it.position.toInt()` 같은 도메인 내부 참조.
|
|
22
|
+
- **Model에서 View 함수 호출** — `CarManager`가 직접 View 함수 호출. Model → View 역방향 의존.
|
|
23
|
+
- **`RandomNumber object`가 싱글톤** — 정말 싱글톤이 맞는가에 대한 정당화 부족.
|
|
24
|
+
- **GWT 패턴 미적용** — 테스트 구조가 비정형.
|
|
25
|
+
|
|
26
|
+
## 리뷰어 의견 요지
|
|
27
|
+
|
|
28
|
+
리뷰어 @woowahan-leah는 **"메시지를 던져라"** 라는 객체지향 핵심을 매우 강하게 짚었다. Controller가 OutputView의 상수를 직접 참조하지 말고 의미 있는 메시지(예: `자동차이름을받을때사용할안내메세지를출력해줘()`)를 던지는 식.
|
|
29
|
+
|
|
30
|
+
또한 **"OOP의 본질은 변경 전파를 막기 위함"** 이라는 메타 가이드: 호출부가 구체적 요구사항에 의존하면 요구사항 변경이 호출부까지 영향. 추상에 의존하면 그 변경이 한 곳에 갇힘.
|
|
31
|
+
|
|
32
|
+
학생이 자기 답변에서 정확한 답을 도출했을 때 리뷰어가 명시적으로 인정하면서 더 깊은 가이드(변경 전파)를 보강 — 학습 사이클의 좋은 예.
|
|
33
|
+
|
|
34
|
+
- **대표 인용:**
|
|
35
|
+
> 컨트롤러에서 OutputView에 `MSG_INPUT_CAR_NAME`라는 상수가 존재한다는 것을 알 필요가 있을까요~? 외부에서 객체의 구체적인 구현을 참조하기보다 메세지만 던져보는 구조로 개선해보세요.
|
|
36
|
+
>
|
|
37
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/controller/World.kt`
|
|
38
|
+
|
|
39
|
+
> OOP의 가장 중요한 본질 중 하나는 프로그램이 커졌을 때 유지 보수와 변경사항의 전파를 막기 위함에 있다는 것을 기억하며 메세지를 던져보세요.
|
|
40
|
+
>
|
|
41
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/controller/World.kt`
|
|
42
|
+
|
|
43
|
+
> 확신이 들지 않는 이유는 model에서 View를 참조하고 있기 때문입니다. model에서 직접적으로 View의 함수를 호출하기보다 model의 결과물을 View에 넘겨주는 방향으로 구현한다면 이러한 참조를 끊을 수 있습니다.
|
|
44
|
+
>
|
|
45
|
+
> — @woowahan-leah on `src/main/kotlin/racingcar/model/CarManager.kt:24`
|
|
46
|
+
|
|
47
|
+
## 얻은 교훈
|
|
48
|
+
|
|
49
|
+
- **OOP의 본질 = 변경 전파 차단.** 작은 코드에서는 직접 상수 참조가 편해 보이지만, 시스템이 커지면 한 상수 변경이 모든 사용처로 퍼진다. 추상 메시지에 의존하면 변경이 한 곳에 갇힌다.
|
|
50
|
+
- **메시지 던지기의 세 가지 효과** (학생 정리):
|
|
51
|
+
1. 호출자가 OutputView의 내부 구성을 알 필요 없음 (지식 축소)
|
|
52
|
+
2. print 함수 후보 검색 비용 없음 (탐색 비용 축소)
|
|
53
|
+
3. View 변경이 호출부에 전파되지 않음 (변경 영향 차단)
|
|
54
|
+
- **Model → View 방향 의존 금지.** Model이 View 함수를 호출하면 의존 그래프가 뒤집힌다. Model의 결과를 View에 넘기는 방향 통일.
|
|
55
|
+
- **자기 의문이 답으로 가는 경로.** "확신이 들지 않는 이유는?"이라는 학생의 질문에 리뷰어가 "model에서 View를 참조하고 있기 때문"이라고 답하는 흐름이 가장 깊은 학습.
|
|
56
|
+
- **싱글톤의 정당화는 도메인에서 시작.** "한 인스턴스만 있어야 하는 도메인적 이유"가 있어야. 메모리 절감이나 편의는 부수적.
|
|
57
|
+
- **GWT(Given-When-Then) 같은 정형 패턴의 가치** — 테스트 구조가 명세화되면 다른 개발자가 빠르게 이해.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# PR #81 — [자동차 경주] 루나남 미션 제출합니다
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@RunaNam](https://github.com/RunaNam)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/81
|
|
5
|
+
- **단계:** 2단계 (단일 PR)
|
|
6
|
+
- **리뷰어:** @nbalance97, @sinb57
|
|
7
|
+
- **라인 코멘트:** 8
|
|
8
|
+
|
|
9
|
+
## 잘한 점 (설계 관점)
|
|
10
|
+
|
|
11
|
+
- **Car의 `position`을 외부에서 var로 노출 → setter 사용 분명**.
|
|
12
|
+
- **`Cars.value.forEach(Car::move)` 같이 메서드 참조 활용**.
|
|
13
|
+
- **문자열 템플릿 활용**.
|
|
14
|
+
|
|
15
|
+
## 못한 점 (설계 관점)
|
|
16
|
+
|
|
17
|
+
- **재귀 호출이 try-catch 안 → tailrec 최적화 안 됨** (StackOverflow 위험).
|
|
18
|
+
- **확장 함수가 top-level + InputValidation 파일** — 로직 추적 어렵고 InputView 중복 이름 충돌 위험.
|
|
19
|
+
- **`for vs forEach` 스타일 선택의 정당화 부재**.
|
|
20
|
+
|
|
21
|
+
## 리뷰어 의견 요지
|
|
22
|
+
|
|
23
|
+
두 리뷰어의 메시지:
|
|
24
|
+
|
|
25
|
+
1. **재귀 호출 + try-catch = tailrec 미적용** — JVM 최적화 안 됨, StackOverflow 위험.
|
|
26
|
+
|
|
27
|
+
2. **확장 함수의 *최상위 위치 위험*** — "로직 추적 힘들고(시간 흘러 그 확장 함수 존재 잊을 휴먼에러), 타겟 클래스(InputView)에 중복된 이름 생기면 충돌." → 클래스로 묶어 캡슐화 권장.
|
|
28
|
+
|
|
29
|
+
3. **for vs forEach = 팀 스타일** — 정해진 답 없음. 팀 그라운드에 맞춰.
|
|
30
|
+
|
|
31
|
+
- **대표 인용:**
|
|
32
|
+
> 확장함수가 최상위에 선언되면, 로직 추적이 힘들뿐더러(시간이 흘러 해당 확장함수가 존재하는지 잊어버리는 휴먼에러가 발생할 수 있음) 타켓이 되는 InputView에 중복된 이름이 생겼을때 문제가 나타날 수 있어요. 별도의 클래스를 묶어서 함수를 캡슐화하는 것이 어떨까요
|
|
33
|
+
>
|
|
34
|
+
> — @sinb57 on `src/main/kotlin/view/InputValidation.kt`
|
|
35
|
+
|
|
36
|
+
> 재귀호출은 StackOverFlow를 야기할 수 있기에 주의해야합니다. 꼬리 재귀의 경우, JVM이 최적화를 진행해서 for반복문으로 바꿔준다고 알고 있는데요. 최근 `try/catch문이 사용되면 꼬리 재귀 최적화가 되지 않는다`는 문구를 본 적이 있어서 한번 찾아보셨으면 좋겠네요.
|
|
37
|
+
>
|
|
38
|
+
> — @sinb57 on `src/main/kotlin/Application.kt`
|
|
39
|
+
|
|
40
|
+
## 얻은 교훈
|
|
41
|
+
|
|
42
|
+
- **재귀 호출의 첫 점검 = 꼬리 위치 + try-catch 부재**. try-catch 안에 재귀 두면 tailrec 최적화 안 됨 → StackOverflow.
|
|
43
|
+
- **확장 함수의 위치 = 추적 가능성과 충돌 방지의 trade-off**. 최상위 = 짧은 코드, 추적 어려움. 클래스 안 = 캡슐화, 명확.
|
|
44
|
+
- **확장 함수의 *수신 객체와 동명 메서드* 충돌**. 클래스에 같은 시그니처 메서드가 추가되면 확장 함수는 *무시됨* (조용한 버그).
|