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,44 @@
|
|
|
1
|
+
# PR #53 โ [์๋์ฐจ ๊ฒฝ์ฃผ] ์ฐ๊ตฐ ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@s9hn](https://github.com/s9hn)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/53
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @vagabond95
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 7
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **Driver ์ธํฐํ์ด์ค๋ก ๋์จํ ์ฐ๊ฒฐ** โ ์์ง์ ๊ฒฐ์ ์ ์ถ์ํ.
|
|
12
|
+
- **DriverDecision enum** โ ๊ฒฐ์ ๊ฒฐ๊ณผ์ ์๋ฏธ ๋ช
์.
|
|
13
|
+
- **backing field๋ก ์ธ๋ถ read-only**.
|
|
14
|
+
- **colon/separator ์์ํ (๊ผผ๊ผผํ ์์)**.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **`Application`์ด Controller ์ฑ
์ ์ผ๋ถ ๋ณด์ ** โ Controller ๋ถ๋ฆฌ ์๋ฏธ ์ฝํ.
|
|
19
|
+
- **`Referee.filter`๋ก ๋ณ๋ ํจ์ ์ ์ธ ๊ฐ๋ฅํ๋ฐ ๊ทธ๋๋ก ๋ **.
|
|
20
|
+
|
|
21
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
22
|
+
|
|
23
|
+
๋ฆฌ๋ทฐ์ด @vagabond95์ ๋ฉ์์ง:
|
|
24
|
+
|
|
25
|
+
1. **์์๊ฐ์ `private set`์ด backing field๋ณด๋ค ๊ฐ๊ฒฐ** โ "์ปฌ๋ ์
์ฒ๋ผ mutableXXX ๋
ธ์ถ ํํผ๊ฐ ํ์ํ ์ผ์ด์ค๋ง backing field ์ ๋นํ."
|
|
26
|
+
|
|
27
|
+
2. **Application์ *์คํ ์ง์
์ *๋ง** โ ๋น์ฆ๋์ค ์์กด์ฑ ๋ณด์ ํํผ.
|
|
28
|
+
|
|
29
|
+
3. **enum + ์ธํฐํ์ด์ค ํ์ฉ ์นญ์ฐฌ**.
|
|
30
|
+
|
|
31
|
+
- **๋ํ ์ธ์ฉ:**
|
|
32
|
+
> backing field ๋ก ์ฒ๋ฆฌํด์ฃผ์ ๋ถ๋ถ ์ข์ต๋๋ค ๐ ๋ค๋ง, ์ ๋ ์์๊ฐ์ธ ๊ฒฝ์ฐ์๋ setter ๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๋ฐฉ์์ ๋ ์ ํธํ๋๋ฐ์. ์ปฌ๋ ์
๊ณผ ๊ฐ์ด read only ํ์
์ด ๋ณ๋๋ก ์กด์ฌํ๋ ์ผ์ด์ค์์๋, mutableXXX ๊ฐ์ ํ์
์ ๋ฆฌํดํด์๋ ์๋๊ธฐ ๋๋ฌธ์ backing field ๋ฅผ ํตํด ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์๋ฏธ ํ ์ ์์ง๋ง ์์๊ฐ์ ํฌ๊ฒ ์๊ด์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ณ์๋ ํ๋ ์ค์ผ ์ ์๊ตฌ์
|
|
33
|
+
>
|
|
34
|
+
> โ @vagabond95 on `src/main/kotlin/domain/Car.kt`
|
|
35
|
+
|
|
36
|
+
> Controller ๋ฅผ ๋ณ๋๋ก ๋ ์ด์, main ์์๋ ์ค์ ๋์์ ๋ํ ์ ๋ณด ํน์ ์์กด์ฑ์ ์ต๋ํ ๊ฐ์ง์ง ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ์์.
|
|
37
|
+
>
|
|
38
|
+
> โ @vagabond95 on `src/main/kotlin/Application.kt`
|
|
39
|
+
|
|
40
|
+
## ์ป์ ๊ตํ
|
|
41
|
+
|
|
42
|
+
- **์์๊ฐ = `private set`. ์ปฌ๋ ์
= backing field**. ์ปฌ๋ ์
์ mutable/immutable ๋
ธ์ถ ๋ถ๋ฆฌ์๋ backing field๊ฐ ํ์ํ์ง๋ง ์์๊ฐ์ `private set`์ด ๊น๋.
|
|
43
|
+
- **Application/main = ์์กด์ฑ 0**. ์ง์
์ ์ Controller ์์ฑํ๊ณ ํธ์ถ๋ง. ๋น์ฆ๋์ค ์์กด์ฑ์ด main์ ์์ผ๋ฉด Controller ๋ถ๋ฆฌ ๋ฌด์๋ฏธ.
|
|
44
|
+
- **enum + ์ธํฐํ์ด์ค**์ ํ๋ ฅ โ DriverDecision enum์ด ๊ฒฐ๊ณผ์ *์๋ฏธ*๋ฅผ, Driver ์ธํฐํ์ด์ค๊ฐ *๊ฒฐ์ ๋ฐฉ์*์ ํํ. ๋ ์ถ์์ด ํ๋ ฅ.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# PR #78 โ [์๋์ฐจ ๊ฒฝ์ฃผ - ๋ฆฌํฉํ ๋ง] ์ฐ๊ตฐ ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@s9hn](https://github.com/s9hn)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/78
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ (๋ฆฌํฉํ ๋ง)
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @vagabond95
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 5
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`set private`๋ก backing field ๋จ์ํ** โ ์์๊ฐ ์ ์ฉ.
|
|
12
|
+
- **์ ๊ทผ ์ ํ์ ๊ผผ๊ผผ**.
|
|
13
|
+
- **enum + ์ธํฐํ์ด์ค**.
|
|
14
|
+
|
|
15
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
16
|
+
|
|
17
|
+
- **`DriverDecision`์ `distance`๊ฐ String** โ UI ํํ์ด ๋๋ฉ์ธ enum์ ์นจํฌ.
|
|
18
|
+
- **CarTest๊ฐ "-" ํํ์ ์์กด** โ ๋๋ฉ์ธ ํ
์คํธ๊ฐ UI ๊ฒฐ๊ณผ ๊ฒ์ฆ.
|
|
19
|
+
|
|
20
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
21
|
+
|
|
22
|
+
๋ฆฌ๋ทฐ์ด @vagabond95์ ํต์ฌ ๋ฉ์์ง:
|
|
23
|
+
|
|
24
|
+
1. **enum์ *๋ฐ์ดํฐ*๋ ๋๋ฉ์ธ ์๋ฏธ** โ `distance`๊ฐ "-" ๊ฐ์ UI ๋ฌธ์๋ฉด, *UI ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ ์ ๋๋ฉ์ธ ๋ณ๊ฒฝ*. boolean (`true`/`false`)์ด ๋๋ฉ์ธ.
|
|
25
|
+
|
|
26
|
+
2. **ํ
์คํธ์ ์์กด = ๊ฒ์ฆ ๋์**. CarTest๊ฐ UI ํํ ("-")์ ์์กดํ๋ฉด UI ๋ณ๊ฒฝ ์ CarTest๋ ๊นจ์ง. ๋๋ฉ์ธ ํ
์คํธ๋ ๋๋ฉ์ธ ๊ฐ๋ง ๊ฒ์ฆ.
|
|
27
|
+
|
|
28
|
+
3. **`set private`๋ก backing field ๋์ฒด ์นญ์ฐฌ** โ ์์๊ฐ ์ผ์ด์ค์ ์ ํฉ.
|
|
29
|
+
|
|
30
|
+
- **๋ํ ์ธ์ฉ:**
|
|
31
|
+
> ๋ค๋ง, distance ๋ฅผ string ์ด ์๋ true / false ๋ฑ์ผ๋ก ํํํ์ผ๋ฉด ๋ ์ข์์๊ฑฐ ๊ฐ์์. `"-"` ๊ฐ์ ์ด๋๊น์ง๋ UI ์ ์ฐ๊ด๋ ๋ถ๋ถ์ด๊ณ , UI ์ ๊ด๋ จ๋ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋์์ ๋ domain ์์ญ์ ์ฝ๋์๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ฐ๋์งํ์ง ์์๋ณด์
๋๋ค.
|
|
32
|
+
>
|
|
33
|
+
> โ @vagabond95 on `src/main/kotlin/domain/DriverDecision.kt`
|
|
34
|
+
|
|
35
|
+
> DriverDecision ์ ๋ํ ์ฝ๋๋ฆฌ๋ทฐ์ ์ฐ์ฅ์ ์ผ๋ก, ํด๋น ํ
์คํธ ์ฝ๋ ์ญ์ '๋๋ฉ์ธ'์ ๋ํ ํ
์คํธ ์ด๋ฏ๋ก ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ "ui" ๊ฒฐ๊ณผ์ ์์กดํด์๋ ์๋ ๊ฑฐ ๊ฐ์์. '์๋์ฐจ์ ์ฃผํ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ์ํ ๊ฒ์ธ์ง'์ ๋ํ ์๊ตฌ์ฌํญ์ด ๋ฐ๋๋ฉด CarTest ์ ์ฝ๋ ์ญ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ํ
๋๊น์.
|
|
36
|
+
>
|
|
37
|
+
> โ @vagabond95 on `src/test/kotlin/domain/CarTest.kt`
|
|
38
|
+
|
|
39
|
+
## ์ป์ ๊ตํ
|
|
40
|
+
|
|
41
|
+
- **enum์ ๋ฐ์ดํฐ๋ *๋๋ฉ์ธ ์๋ฏธ*๋ง**. `"-"` ๊ฐ์ UI ํํ์ด enum์ ๋ค์ด๊ฐ๋ฉด UI ๋ณ๊ฒฝ์ด enum ๋ณ๊ฒฝ, ๋๋ฉ์ธ ๋ณ๊ฒฝ. ๋ ๋ณ๊ฒฝ ์ด์ ๊ฐ ํ๋์ enum์ ๋ชจ์.
|
|
42
|
+
- **ํ
์คํธ์ ์์กด = ๊ฒ์ฆ ๋์์ ์ผ๋ถ**. ๋๋ฉ์ธ ํ
์คํธ๊ฐ UI ๊ฐ์ ๊ฒ์ฆํ๋ฉด, ๊ทธ ํ
์คํธ๋ ๋๋ฉ์ธ์ด ์๋ *๋๋ฉ์ธ + UI* ํตํฉ ํ
์คํธ. ๋จ์ ํ
์คํธ์ ๊ฒฉ์ด ๋ฌด๋์ง.
|
|
43
|
+
- **`"-"`์ ์๋ฆฌ = OutputView ์์**. ๋๋ฉ์ธ์ boolean / ๊ฑฐ๋ฆฌ(Int), ํํ์ View๊ฐ ์ฑ
์.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# PR #107 โ [์๋์ฐจ ๊ฒฝ์ฃผ] ์ฌ์ง ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@sh1mj1](https://github.com/sh1mj1)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/107
|
|
5
|
+
- **๋จ๊ณ:** 1๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @ghojeong
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 8
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`TryCount` ๋๋ฉ์ธ ๊ฐ์ฒด + ํฉํ ๋ฆฌ ํจํด** โ ์์ ๊ฐ๋ฐ ํ์ถ.
|
|
12
|
+
- **`NumberGenerator` ์ธํฐํ์ด์ค + `ExplicitNumberGenerator` ํ
์คํธ ๋๋ธ**.
|
|
13
|
+
- **`Car`์ ์ด๋ฆ ๊ฒ์ฆ์ model์์** โ ๋๋ฉ์ธ invariant.
|
|
14
|
+
- **์์์ `private` ์ ์ฉ**.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **`RacingGame`(Controller)์ด NumberGenerator๋ฅผ ์ง์ ๋ฐ์** โ DI ํ๋ฆ ๊ธธ์ด์ง.
|
|
19
|
+
- **`TryCount`๋ฅผ data class๋ก ์ฐ๊ณ ์ถ์ง๋ง private constructor์ ์ถฉ๋** โ copy๋ก ์ฐํ ๊ฐ๋ฅํด์ ์ง์ ํ private ์๋.
|
|
20
|
+
- **Car๋ data class, TryCount๋ ์ผ๋ฐ class** โ ๋ ์ฌ์ฉ ๊ธฐ์ค ๋น๋์นญ.
|
|
21
|
+
|
|
22
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
23
|
+
|
|
24
|
+
๋ฆฌ๋ทฐ์ด @ghojeong์ ํต์ฌ ๊ฐ๋ฅด์นจ:
|
|
25
|
+
|
|
26
|
+
1. **DI ํค์๋๋ณด๋ค *์ญํ ๊ณผ ์ฑ
์*** โ "DI ๋ผ๋ ํค์๋์ ์ง์ฐฉํ๊ธฐ ๋ณด๋ค๋ NumberGenerator ์ ์์กด๊ด๊ณ๋ฅผ ๊ฐ์ง class ๊ฐ ๋๊ฐ ๋์ด์ผ ํ๋์ง, ์ญํ ๊ณผ ์ฑ
์ ๊ด์ ์์ ์๊ฐ." ์กฐ์ํธ "๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด" 3์์ (์ญํ , ์ฑ
์, ํ๋ ฅ).
|
|
27
|
+
|
|
28
|
+
2. **์ด๋ฆ ๊ฒ์ฆ์ *๋ชจ๋ธ ์์น* ์ ๋นํ** โ "์ด๋ฆ์ด 5์ ๋์ ์ฑ๋ก ์๋ฒ ํต์ ํ๋ฉด ํฌ๋์ ๊ฐ๋ฅ. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ธ ๊ฒ์ฆ์ด ๋ง๋ค." ๊ฒ์ฆ ์์น๋ *์คํจ์ ์ํฅ*์ผ๋ก ๊ฒฐ์ .
|
|
29
|
+
|
|
30
|
+
3. **์์ private ๊ถ์ฅ** โ IDE ์๋์์ฑ์ ๋๋ฌด ๋ง์ ํญ๋ชฉ์ด ๋จ๋ฉด ํ์
์ ํผ๋.
|
|
31
|
+
|
|
32
|
+
4. **data class ์ฌ์ฉ ์ผ๊ด์ฑ** โ Car๋ data class, TryCount๋ ์ผ๋ฐ class. ํ์์ด *์* ๋ค๋ฅด๊ฒ ์ ํํ๋์ง ๊ฒฝํ์ ๊ณต์ ํ๊ธฐ.
|
|
33
|
+
|
|
34
|
+
5. **ํ
์คํธ ์ฝ๋์ *์ง์ ํ ๊ฐ์น* = "๋ฌด์์ ํ
์คํธํ๋ ค๋์ง" ๋ช
ํ**. toInt ํธ์ถ์ด ๊ตฐ๋๋๊ธฐ์ฌ๋ ์๋๊ฐ ๋ช
ํํ๋ฉด OK.
|
|
35
|
+
|
|
36
|
+
- **๋ํ ์ธ์ฉ:**
|
|
37
|
+
> DI ๋ผ๋ ํค์๋์ ์ง์ฐฉํ๊ธฐ ๋ณด๋ค๋ NumberGenerator ์ ์์กด๊ด๊ณ๋ฅผ ๊ฐ์ง class ๊ฐ ๋๊ฐ ๋์ด์ผ ํ๋์ง, ์ญํ ๊ณผ ์ฑ
์ ๊ด์ ์์ ์๊ฐ์ ํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฒด์ค๊ณ๋ฅผ ํ ๋์ 3๊ฐ์ง ์์๋ฅผ ์ญํ , ์ฑ
์, ํ๋ ฅ์ด๋ผ๊ณ ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด ์ฑ
์์ ๊ผฝ์ต๋๋ค.
|
|
38
|
+
>
|
|
39
|
+
> โ @ghojeong on `src/main/kotlin/controller/RacingGame.kt:24`
|
|
40
|
+
|
|
41
|
+
> ๊ฐ๋ น ์ด๋ฆ์ด ๊ณต๋ฐฑ์ด ํ์ฉ๋๊ฑฐ๋ 5๊ธ์๋ฅผ ๋์ ์ํ๋ก ์๋ฒ์ ํต์ ํ๋ฉด, ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์๋ค์ด์ง ๋ชปํด ํฌ๋์๊ฐ ๋๋ ์ค๋ํ ๋ฒ๊ทธ๊ฐ ์๊ธธ ์ ์๋ค๋ฉด, ์ ๋ ์ด๋ ๊ฒ ๋ชจ๋ธ์ ํตํด ๊ฒ์ฆํ๊ณ ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ ๊ฒ ๊ฐ์ต๋๋ค.
|
|
42
|
+
>
|
|
43
|
+
> โ @ghojeong on `src/test/kotlin/domain/CarTest.kt:21`
|
|
44
|
+
|
|
45
|
+
> Car ๋ data class ๋ฅผ ํ์ฉํ์
จ์ง๋ง, count ์์๊ฐ์ ํฌ์ฅํ TryCount ๋ data class ๋ฅผ ํ์ฉํ์ง ์์ผ์
จ๊ตฐ์. ์ฌ์ง๋์ Car ์ data class ๋ฌธ๋ฒ์ ์ฌ์ฉํด์ ์ด๋ค ํธ๋ฆฌํจ์ ์ป์ผ์
จ๋์ง, TryCount ์์๋ ์ data class ๋ฌธ๋ฒ์ด ๋ถํธํ์๋์ง ๊ฒฝํ์ ๊ณต์ ํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
|
|
46
|
+
>
|
|
47
|
+
> โ @ghojeong on `src/main/kotlin/domain/Car.kt:6`
|
|
48
|
+
|
|
49
|
+
## ์ป์ ๊ตํ
|
|
50
|
+
|
|
51
|
+
- **DI๋ *์๋จ*์ด์ง *๋ชฉ์ * ์๋๋ค**. "์ด๋์ ์ด๋ป๊ฒ ์ฃผ์
ํ ์ง"๊ฐ ์๋๋ผ "์ด ๊ฐ์ฒด๊ฐ ๋๊ตฌ์ ํ๋ ฅํด์ผ ํ๋๊ฐ"๊ฐ ์ถ๋ฐ์ . ํ๋ ฅ์๊ฐ ์ ํด์ง๋ฉด ์ฃผ์
์๋ฆฌ๋ ๋ฐ๋ผ์ด.
|
|
52
|
+
- **๊ฒ์ฆ์ ์์น = "์คํจ์ ์ํฅ"์ผ๋ก ๊ฒฐ์ **. ๋๋ฉ์ธ์ด ์ธ๋ถ ์์คํ
(์๋ฒ, ํ์ผ, DB)๊ณผ ํต์ ํ๋ฉด, ์๋ชป๋ ์
๋ ฅ์ด *์ธ๋ถ์์ ๊นจ์ง๋ ๊ฒ* ๋ ์ํ. ๋ชจ๋ธ ๊ฒ์ฆ์ด ์ ๋นํ๋จ.
|
|
53
|
+
- **๋ชจ๋ ์ฌ์ํ ๊ฒฐ์ ์๋ *์ด์ *๊ฐ ์์ด์ผ ํ๋ค**. data class vs class๋ฅผ *์* ๋ค๋ฅด๊ฒ ๊ณจ๋๋์ง๊ฐ ํ์์ ๊ธฐ์ค์ด ๋จ. ๊ฒฐ๊ณผ๋ณด๋ค *๊ณผ์ ์ ์ด์ *๊ฐ ํ์ต.
|
|
54
|
+
- **public ์์์ ๋น์ฉ = IDE ์๋์์ฑ ๋
ธ์ด์ฆ**. private๋ ๋จ์ง ์บก์ํ ๋๊ตฌ๊ฐ ์๋๋ผ *๋๋ฃ๋ฅผ ์ํ ์ฒญ๊ฒฐ*.
|
|
55
|
+
- **ํ
์คํธ ํจ์์ ๊ฐ์น = "๋ฌด์์ ํ
์คํธํ๋์ง" ๋ช
ํํจ**. ๊ตฐ๋๋๊ธฐ toInt ํธ์ถ์ด ์์ด๋ ์๋๊ฐ ๋ช
ํํ๋ฉด OK. *์ง๋์น ๋ฏธ์ ์ถ๊ตฌ*๋ ํ์ต ๋จ๊ณ์ ๋ฐฉํด.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# PR #115 โ [์๋์ฐจ ๊ฒฝ์ฃผ - ๋ฆฌํฉํ ๋ง] ์ฌ์ง ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@sh1mj1](https://github.com/sh1mj1)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/115
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ (๋ฆฌํฉํ ๋ง)
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @ghojeong
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 15
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`MoveStrategy` ์ธํฐํ์ด์ค + ์ ๋ต ํจํด ๋ณธ๊ฒฉ ๋์
** โ Car๋ ์ด๋ป๊ฒ ์ซ์๊ฐ ๋ง๋ค์ด์ง๋์ง ๋ชจ๋ฆ.
|
|
12
|
+
- **`MoveStrategyUsingNumber`๋ฅผ *๋ณ๋ ํด๋์ค*๋ก** (์ต๋ช
ํจ์ ๋์ ) โ ์๊ตฌ์ฌํญ์ ๋ถํฉํ๋ ์๋ฆฌ ๋ช
ํ.
|
|
13
|
+
- **NumberGenerator + MoveStrategy ๋ถ๋ฆฌ** โ ๋ ์ฑ
์์ด ํ ๊ฐ์ฒด์ ํฉ์ณ์ง์ง ์์.
|
|
14
|
+
- **ํ์
์ ์ธํฐํ์ด์ค๋ก ๋ฐ๊ธฐ** (Controller๊ฐ MoveStrategy ๋ฐ๊ธฐ).
|
|
15
|
+
- **ํ
์คํธ ํจํค์ง์ `MoveStrategyIsAlways` ๋ณ๋ ๊ตฌํ** โ ํ
์คํธ ๋๋ธ์ ์๋ฆฌ ๋ถ๋ช
.
|
|
16
|
+
- **ํ
์คํธ ํ์
์ *๊ตฌํ์ฒด*๋ก ๋ช
์** โ ์ธํฐํ์ด์ค ๋์ ์ค๊ตฌํ์ฒด๋ก ํจ์ผ๋ก์จ *์ด๋ค ๊ตฌํ*์ ํ
์คํธํ๋์ง ๋ช
์.
|
|
17
|
+
- **์๊ฐ ๋ถ์์ผ๋ก DI ๊น์ด ๋ฌธ์ *์ค์ค๋ก ํด๊ฒฐ*** โ Car๋ ์ซ์ ์์ฑ์ ์ ํ์ ์์ โ MoveStrategy๋ก ์์.
|
|
18
|
+
|
|
19
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
20
|
+
|
|
21
|
+
- **`TryCount`์ private constructor + data class ์ถฉ๋ ๋ฏธํด๊ฒฐ** โ ํ์์ด ์ผ๋ฐ class๋ก ํํผ.
|
|
22
|
+
|
|
23
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
24
|
+
|
|
25
|
+
๋ฆฌ๋ทฐ์ด @ghojeong์ *์ต์์ ์นญ์ฐฌ* ๋ฆฌ๋ทฐ. ํ์์ด 1๋จ๊ณ ํผ๋๋ฐฑ์ ์๊ฐ ํ์ต์ผ๋ก ๋ฐ์ ์ํจ ์ด์์ ์ฌ๋ก.
|
|
26
|
+
|
|
27
|
+
1. **๋ถํธ ์ธ์ง + ์๊ฐ ํด๊ฒฐ = ๊ฐ์ฒด์งํฅ์ ๋ณธ์ง** โ "๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋ณ๋ก ์ ์ค์. ๋ถํธํจ์ ์ค์ค๋ก ์ธ์งํ๊ณ , ์ธ์งํ ๋ถ๋ถ์ ๋ค์ ์ค์ค๋ก ํด๊ฒฐํ๋ ๊ณผ์ ์ด ์ ์ผ ์ค์. ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋ถํธ์ ํด๊ฒฐํ๋ ์๋ง์ ๋ฐฉ๋ฒ ์ค ์ ํํ๋ ๋ฐฉ๋ฒ ํ๋์ ๋ถ๊ณผ."
|
|
28
|
+
|
|
29
|
+
2. **"๊ฐ์ฒด์งํฅ์ ๋ง๋๋"์ ๋ต = "๋ฌด์จ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๋์๋"** โ ํ์ ์ค์ค๋ก ๋ตํ ์ ์์ผ๋ฉด ์ถฉ๋ถ. ํ์์ ์ด๋ฏธ ๋ต์ ๋ค๊ณ ์์.
|
|
30
|
+
|
|
31
|
+
3. **data class + private constructor์ ์ถฉ๋** โ `copy()` ๋ฉ์๋๋ก ์ฐํ ๊ฐ๋ฅ. *์ง์ ํ private*์ ๋ถ๊ฐ. ์๋๋ก์ด๋ ๋ ๋๋ง ์ต์ ํ ๊ด์ ์์ "๊ฐ์ data โ ๊ฐ์ ์ฐธ์กฐ" ์ ์ง๊ฐ ์ ์ง๋ณด์์ฑ ํฅ์.
|
|
32
|
+
|
|
33
|
+
4. **์ต๋ช
ํจ์ vs ๋ณ๋ ํด๋์ค** โ ์ธํฐํ์ด์ค ๋ง๋ค๊ณ ์ค๊ตฌํ์ ์ต๋ช
์ผ๋ก ์์ฃผ ์ฐ์ง๋ง, ๋ณ๋ ํด๋์ค๊ฐ *์๊ตฌ์ฌํญ์ ๋ช
์*.
|
|
34
|
+
|
|
35
|
+
5. **ํ
์คํธ์ ํ์
= ๊ตฌํ์ฒด๋ก ๋ช
์** โ ์ธํฐํ์ด์ค๊ฐ ์๋ ๊ตฌํ์ฒด๋ก ๋ฐ์ผ๋ฉด "์ด๊ฑด *์ด ๊ตฌํ*์ ํ
์คํธํ๋ค"๊ฐ ๋ถ๋ช
.
|
|
36
|
+
|
|
37
|
+
- **๋ํ ์ธ์ฉ:**
|
|
38
|
+
> ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ์ฌ์ค ๋ณ๋ก ์ ์ค์ํฉ๋๋ค. ์ฌ์ง๋์ด ๋ถํธํจ์ ๋๋ ๋ถ๋ถ์ ์ค์ค๋ก ์ธ์งํ๊ณ , ์ธ์งํ ๋ถ๋ถ์ ๋ค์ ์ค์ค๋ก ํด๊ฒฐํ๋ ๊ณผ์ ์ด ์ ์ผ ์ค์ํฉ๋๋ค. ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋ถํธํจ์ ํด๊ฒฐํ ์ ์๋ ์๋ง์ ๋ฐฉ๋ฒ ์ค, ์ ํํ๋์ด ์
๊ณ์ ํต์ฉ๋๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋ถ๊ณผํฉ๋๋ค.
|
|
39
|
+
>
|
|
40
|
+
> โ @ghojeong on `src/main/kotlin/Application.kt:1`
|
|
41
|
+
|
|
42
|
+
> ๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์์ ๋ค์ด๋ง๋๋๋ผ๋ ์ง๋ฌธ์๋ ์ ๊ฐ ์๋๋ผ ์ฌ์ง๋ ์ค์ค๋ก, ๋ฌด์จ "๊ฐ์ฒด" ๊ฐ ๊ฐ์ ๋์๋์ง ๋ตํ ์ ์์ผ๋ฉด ๋ฉ๋๋ค.
|
|
43
|
+
>
|
|
44
|
+
> โ @ghojeong on `src/main/kotlin/Application.kt:1`
|
|
45
|
+
|
|
46
|
+
> ๊ธฐ๊ป MoveStrategy ๋ฅผ ์ธํฐํ์ด์ค๋ก ์ถ์ํํ์ง๋ง, ์ต๋ช
ํจ์๋ฅผ ์ฌ์ฉํ์๋ ๋ถ๋ค์ด ๋ง์๋ฐ, ์๊ตฌ์ฌํญ์ ๋ถํฉ๋๋ MoveStrategyUsingNumber ๋ฅผ ๋ณ๋ ํด๋์ค๋ก ์ ์ธํด์ฃผ์ ์ ๋ฉ์ง๋๋ค.
|
|
47
|
+
>
|
|
48
|
+
> โ @ghojeong on `src/main/kotlin/domain/MoveStrategyUsingNumber.kt:8`
|
|
49
|
+
|
|
50
|
+
> ๋์ผํ ์ํ๋ฅผ ๊ฐ์ง๋ ๋ ๊ฐ์ฒด๊ฐ ์๋ก ๋ค๋ฅธ ์ฐธ์กฐ๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ ์ด ์ต์ ํ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ต๋๋ค... ์๋๋ก์ด๋๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋ก ํธ ๊ด๋ จ ํ๋ ์์ํฌ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋, ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์ ํธ์ถ ์ดํ์, ๋ฐ์ดํฐ ๊ฐ์ด ์ค์ ๋ก ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด ํ๋ฉด์ ๋ฆฌ๋ ๋๋งํ์ง ์๋ ์ต์ ํ๋ฅผ ํฉ๋๋ค.
|
|
51
|
+
>
|
|
52
|
+
> โ @ghojeong on `src/main/kotlin/domain/TryCount.kt:1`
|
|
53
|
+
|
|
54
|
+
## ์ป์ ๊ตํ
|
|
55
|
+
|
|
56
|
+
- **๊ฐ์ฒด์งํฅ ํจ๋ฌ๋ค์ = ๋๊ตฌ. ๋ถํธ ์ธ์ง = ์ง์ง ๋ณธ์ง.** "์ด ์ฝ๋์ ๋ถํธํจ์ด ๋ญ์ง? โ ์ด๋ป๊ฒ ํด๊ฒฐ? โ OOP๊ฐ ๊ทธ ํด๊ฒฐ์ *์ ํํ๋* ๋ฐฉ์ ์ค ํ๋"๊ฐ ์ฌ๊ณ ํ๋ฆ.
|
|
57
|
+
- **์๊ฐ ์ ๊ฒ์ ์ง๋ฌธ**: "๋ด๊ฐ ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ, *๋ฌด์จ ๊ฐ์ฒด*๊ฐ ๊ฐ์ ๋์๋?" ๊ทธ ๋ต์ด ๋ถ๋ช
ํ๋ฉด OOP ์ ์ ์ฉํ ๊ฒ. ๋ต ๋ชป ํ๋ฉด ํ๋ฉด๋ง ํ๋ด.
|
|
58
|
+
- **์ธํฐํ์ด์ค + ์ต๋ช
ํจ์ vs ๋ณ๋ ํด๋์ค**. ๋ณ๋ ํด๋์ค๊ฐ *์๊ตฌ์ฌํญ ์์ฒด*๋ฅผ ์ฝ๋์ ๋จ๊น. ์ต๋ช
์ ๋น ๋ฅด์ง๋ง ๊ทธ ์๋ฆฌ๋ฅผ ๊ฒ์ํ๊ธฐ ์ด๋ ค์. *์๊ตฌ์ฌํญ์ด ์๊ตฌํ ๊ฒ*์ ํด๋์ค๋ก.
|
|
59
|
+
- **data class์ ๋์น์ฑ = ์ฐธ์กฐ ๋์น์ฑ๊ณผ ๋ง๋ฌผ๋ ค ๋ ๋๋ง ์ต์ ํ ์ํฅ**. value ๊ฐ์ผ๋ฉด ์ฐธ์กฐ๋ ๊ฐ๊ฒ = ํ๋ ์์ํฌ๊ฐ ๋ฆฌ๋ ๋๋ง ์คํต ๊ฐ๋ฅ. private constructor + copy ์ฐํ๋ ์ด invariant ๊นจ๋จ๋ฆผ.
|
|
60
|
+
- **ํ
์คํธ์ ํ์
= ์ธํฐํ์ด์ค vs ๊ตฌํ์ฒด ์ ํ**. ์ธํฐํ์ด์ค๋ "์ด ์ถ์์ ๋ํ ๊ฒ์ฆ"์ด์ง๋ง ๊ตฌํ์ฒด๋ก ๋ฐ์ผ๋ฉด "์ด ๊ตฌํ์ฒด ๊ฒ์ฆ"์ผ๋ก ๋ช
์. *์ด๋ ๊ฒ ๋ง๋๋*๋ ํ
์คํธ ์๋์ ๋ฐ๋ผ.
|
|
61
|
+
- **๋ฆฌ๋ทฐ์ด๊ฐ "๋ฐ์์ณค์ต๋๋ค"๋ผ๊ณ ์นญ์ฐฌํ๋ PR์ ํน์ง** = (1) 1๋จ๊ณ ํผ๋๋ฐฑ ํก์ (2) ์๊ฐ ํ์ต์ผ๋ก ๋ค์ ๋จ๊ณ๋ก ๋ฐ์ (3) ๊ทธ ๊ฒฐ์ ์ ์ด์ ๋ฅผ PR ๋ณธ๋ฌธ์ ์ ๋ฆฌ. ์ด์์ ํ์ต ๊ณก์ .
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# PR #119 โ [์๋์ฐจ ๊ฒฝ์ฃผ ๊ตฌํ] ์์ก ๋ฏธ์
์ ์ถํฉ๋๋ค (2๋จ๊ณ)
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@songpink](https://github.com/songpink)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/119
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @KwonDae
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 18
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **MVC์ ์๋ฏธ๋ฅผ ์๊ธฐ ์ธ์ด๋ก ์ ๋ฆฌ** โ "Controller๋ ๋ช
๋ น์ ๋ด๋ฆฌ๊ณ , ์ ๋ณด ๊ด๋ฆฌ๋ model"์ด๋ผ๋ ์ ์๋ฅผ ์ง์ ์๋ํ๋ฉฐ ํ ๋ก ์ ๋์ด์ด.
|
|
12
|
+
- **`RacingGame` ๋ชจ๋ธ ๋์
์ผ๋ก ๊ฒ์ ์ํ์ ์๋ฆฌ ์ ์ฐฉ** โ ๋ฆฌ๋ทฐ์ด ํผ๋๋ฐฑ ํ "๊ฒฝ์ฃผ์ฅ"์ด๋ผ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ถ๊ฐํด Car๋ค์ ํ ๊ณณ์ ๋ชจ์.
|
|
13
|
+
- **์ฐ์น์ ํ๋ณ ์ฑ
์์ ๊ฒฝ์ฃผ์ฅ์ผ๋ก ์ด๋** โ `FinalWinner`๋ผ๋ ์ ์ฐจ์ ํจ์ํ ํด๋์ค์์ ๋๋ฉ์ธ ๊ฐ์ฒด์ ๋ฉ์๋๋ก.
|
|
14
|
+
- **Car๊ฐ ์๋์ฐจ ๋ฐ์ดํฐ์ ์์ง์ธ๋ค๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋๋ค๋ ์ ์๋ฅผ ๋ช
ํํ** โ ๋ฆฌ๋ทฐ์ด๊ฐ "๋ง์ต๋๋ค ๐"๋ก ํ์ธ.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **Model์ ๋จ์ ํ
์คํธ ๋๋ฝ** โ `Car` ๊ฐ์ ๋๋ฉ์ธ ๊ฐ์ฒด์ ๋จ์ ํ
์คํธ๊ฐ ๋ถ์กฑ. ๋๋ฉ์ธ ๋ก์ง์ด ๊ฒ์ฆ ์์ด ์งํ.
|
|
19
|
+
- **`RandomNumberGenerator`๊ฐ Model์ ์ข
์** โ ๋ฌด์์๊ฐ ๋๋ฉ์ธ ์์ ์์ด ๋๋ฉ์ธ ํ
์คํธ๊ฐ ์ด๋ ค์์ง. ์ธํฐํ์ด์ค ์ถ์์ผ๋ก ๋ถ๋ฆฌ ํ์.
|
|
20
|
+
- **`OutputView`๊ฐ Car๋ฅผ ์ง์ ์์ง์ด๋ ค๋ ํ์ ** โ ์ถ๋ ฅ ์ฑ
์์๊ฐ ๋๋ฉ์ธ์ ์กฐ์. ์ถ๋ ฅ์ ๋ฐ์์ ๊ทธ๋ฆฌ๊ธฐ๋ง.
|
|
21
|
+
- **`FinalWinner`๋ผ๋ ์ ์ฐจ ํด๋์ค** โ "์ฐ์น์๋ฅผ ๊ฐ๋ฆฌ๋" ํจ์์ผ ๋ฟ์ธ๋ฐ ํด๋์ค๋ก. ๋จ๋
object๋ก ๋ถ๋ฆฌํ ๋งํผ ์์ง๋ ์ฑ
์์ด ์๋ โ ๊ทธ ํ์์ ์ฃผ์ธ์ ๊ฒฝ์ฃผ์ฅ(`RacingGame`).
|
|
22
|
+
- **๋ฐ์ ๋ฏธ์**: ๋ฆฌ๋ทฐ์ด๊ฐ ๊ฐ์ด๋ํ ์ ๋ต ํจํด/์ถ์ํ ์ ์ฉ์ด ์๊ฐ ๋ถ์กฑ์ผ๋ก ์ผ๋ถ ๋ฏธ๋ฐ์.
|
|
23
|
+
|
|
24
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
25
|
+
|
|
26
|
+
๋ฆฌ๋ทฐ์ด @KwonDae๋ ์ด ๋ผ์ด๋์์ **์ฒด์คํ ๋น์ **๋ก MVC์ ์ฑ
์์ ์๊ฐํํ๋ค. "์ฒด์คํ = ๊ฒฝ์ฃผ์ฅ(RacingGame model), ํ๋ ์ด์ด = Controller". ๋ชจ๋ธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ปจํธ๋กค๋ฌ๋ ๋ช
๋ น๋ง ๋ด๋ฆฐ๋ค. ์ด ํ ๊ฐ์ง ๋น์ ๋ก ๋ชจ๋ ์ฑ
์ ์์น ์ง๋ฌธ์ด ์ ๋ฆฌ๋จ.
|
|
27
|
+
|
|
28
|
+
๋ํ **"์ฐ์น์๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์์ ์ด๋์?"** ๋ผ๋ ์ง๋ฌธ์ ์ธ ํ๋ณด๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์(controller / ๊ฒฝ์ฃผ์ฅ / ์ฐจ)ํด์ reviewee๊ฐ ์ค์ค๋ก ๋ต์ ๋๋ฌํ๊ฒ ํจ. ์ด๋ฐ ์ง๋ฌธ ์ค๊ณ๊ฐ ํ์ต์ ์ ๋.
|
|
29
|
+
|
|
30
|
+
๋๋ค ์์กด์ ๋ํด์๋ **์ถ์ํ(interface)์ ์ ๋ต ํจํด**์ ์ง์ ๋ช
์ํ๋ฉฐ ํ์ต ์๋ฃ ๋งํฌ๊น์ง ํจ๊ป ์ ๊ณต.
|
|
31
|
+
|
|
32
|
+
- **๋ํ ์ธ์ฉ:**
|
|
33
|
+
> ์ฒด์คํ์ ์๋ก ๋ค์ด ๋ณผ๊ฒ์, ์ฒด์ค๋ฅผ ํ๋ ์ดํ๋ ๋ ์ ์ ๋ Controller๊ฐ ๋ ์ ์์๊ฒ์ด๊ณ , ์ฒด์คํ์ RacingGame์ด ๋ ์ ์๊ฒ ์ฃ . ์ฒด์คํ์๋ ํ์ฌ ์ฒด์คํ์ ์ํ(๋๊ฐ ์ด๊ธฐ๊ณ ์๋์ง, ์ด๋ค ๋ง๋ค์ด ์ฃฝ๊ณ ์ด์๋์ง ๋ฑ๋ฑ) ์ํ๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค. ์ ์ ๋ ๋จ์ง ์ฒด์คํ์๊ฒ ์ด๋ค ๋ง์ ์ผ๋ง๋ ์์ง์ด๋ผ๊ณ ๋ช
๋ นํ ๋ฟ์ด์ฃ
|
|
34
|
+
>
|
|
35
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/controller/RacingCarRun.kt`
|
|
36
|
+
|
|
37
|
+
> ํ๋์ ๊ฒฝ์ฃผ์ฅ์๋ ์ฌ๋ฌ๊ฐ์ ์ฐจ๋๋ค์ด ์์๊ฒ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ๋ฌ๊ฐ์ ์ฐจ๋๋ค ์ค ์ฐ์น์๋ฅผ ๊ฐ๋ฆฌ๋ ์ฑ
์์ ์ด๋์ ์์ผ๋ฉด ์ข์๊น์. ๋ช
๋ น์ ํ๋ controller vs ์ ์ฒด์ ์ธ ๊ฒฝ์ฃผ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฃผ์ฅ vs ์ฐจ
|
|
38
|
+
>
|
|
39
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/model/FinalWinner.kt`
|
|
40
|
+
|
|
41
|
+
> ์ค์ ๋ก domain ์์๋ ์ถ์ํ๋ฅผ ํตํ ๋ก์ง์ ํธ์ถํ๊ณ , ์ด๋ฅผ ํตํด ์์กด์ฑ์ ๋ถ๋ฆฌํ์ฌ ํ
์คํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ๋ ํ ์ ์์ฃ . (interface๋ฅผ ํ
์คํธํ๋๊ณณ์์ override๋ฅผ ํ ์ ์๋ค!)
|
|
42
|
+
>
|
|
43
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/model/RandomNumberGenerator.kt`
|
|
44
|
+
|
|
45
|
+
## ์ป์ ๊ตํ
|
|
46
|
+
|
|
47
|
+
- **๋ชจ๋ธ = ์ํ + ํ๋, Controller = ํ๋ฆ ๋ช
๋ น.** ์ฒด์คํ ๋น์ ์ฒ๋ผ ๋ชจ๋ธ์ด ๊ฒ์ ์ํ๋ฅผ ๋ค๊ณ ์๊ณ ์๊ธฐ ๊ท์น์ผ๋ก ํ๋ํ๋ค. Controller๋ "์ด ์นธ์ผ๋ก ์์ง์ฌ"๋ผ๊ณ ๋ช
๋ นํ ๋ฟ. ํ๋ฆ ์ ์ด๋ฅผ ๋ชจ๋ธ์ด ์ ๊ฐ๋๋ค๋ ๊ฒ ํต์ฌ.
|
|
48
|
+
- **"X-er"๋ผ๋ ์ ์ฐจ์ ๋ช
์ฌ ํด๋์ค๋ ํญ์ ์์ฌํ๋ผ.** `FinalWinner`, `Generator`, `Handler`, `Manager` ๊ฐ์ -er ์ ๋ฏธ์ฌ๋ ํ์๋ง ๋ค๊ณ ์ํ๊ฐ ์๋ ํจ์ํ ๊ฐ์ฒด์ผ ๋๊ฐ ๋ง๋ค. ๊ทธ ํ์์ ์ง์ง ์ฃผ์ธ์ด ๋๊ตฌ์ธ์ง ๋ฌผ์ด๋ณด๋ฉด ๋ณดํต ๋ต์ด ๋์จ๋ค.
|
|
49
|
+
- **๋ฌด์์๋ ๋๋ฉ์ธ ๋ฐ.** Random/Clock/HTTP ๊ฐ์ ์ธ๋ถ ์์์ ๋๋ฉ์ธ์ด ์ง์ ์์กดํ๋ฉด ๋๋ฉ์ธ ํ
์คํธ๊ฐ ๋น๊ฒฐ์ ์ ์ด ๋๋ค. ์ธํฐํ์ด์ค๋ก ์ถ์ํ๊ณ ์ฃผ์
.
|
|
50
|
+
- **์ธ ํ๋ณด ์ ์๋ฒ** โ ์ข์ ๋ฆฌ๋ทฐ์ด ํจํด: "A vs B vs C"๋ก ํ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ฉด ํ์์ด ์ค์ค๋ก ๋น๊ต/์ ํํ ์ ์๋ค. "์ ๋ต์ X"๋ณด๋ค ํ์ต ํจ๊ณผ๊ฐ ํฌ๋ค.
|
|
51
|
+
- **ํ์ค ๋น์ ์ ๊ฐ๋ ฅํจ๊ณผ ํ๊ณ.** ์ฒด์คํ/๋งํธ/์ฃผ์ฐจ์ฅ ๊ฐ์ ๋น์ ๋ ์ฑ
์ ์์น ๋ฐ๊ฒฌ์ ์ฒซ ๋๊ตฌ. ๋จ, ๋น์ ์ ๋ฉ์ถ์ง ๋ง๊ณ "๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค"๋ ์ถ์์ผ๋ก ํ ๋ฐ ๋ ๊ฐ์ผ OOP๊ฐ ๋๋ค.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# PR #98 โ [์๋์ฐจ ๊ฒฝ์ฃผ ๊ตฌํ] ์์ก ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@songpink](https://github.com/songpink)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/98
|
|
5
|
+
- **๋จ๊ณ:** 1๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @KwonDae
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 34
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`Car`์ ์์ง์ด๋ ์ฑ
์์ ๋ถ์ฌํ ์๋** โ ๋ฆฌ๋ทฐ์ด๊ฐ "์์ง์ ์ฑ
์์ ์๋์ฐจ์๊ฒ ์์ ํ ๋ถ์ฌํ๋ค์ ๐"๋ผ๋ฉฐ ๋ช
์์ ์นญ์ฐฌ.
|
|
12
|
+
- **์์ํ ์๋ ์์ฒด๋ ๋ช
ํ** โ Settings/Ranges๋ก ๋งค์ง ๋๋ฒ๋ฅผ ์ถ์ถํ๋ ค๋ ๋
ธ๋ ฅ. (์์น ์ ํ์ด ๋ค์ ํ ๋ก )
|
|
13
|
+
- **PR description์ ์๊ธฐ ์๋ฌธ ์ ๊ธฐ** โ "moveRange๊ฐ ์๋๋ผ move์ฌ๋ ์๋ฏธ ์ ๋ฌ์ด ๋๋๊ฐ" ๊ฐ์ ๋ฉํ ์ง๋ฌธ ์ ๊ทน.
|
|
14
|
+
- **๋ฆฌ๋ทฐ ํ๋ฆ์ ๋ํ ์์งํ ์๋ต** โ ์๊ฐ ๋ถ์กฑ, ๋๋ฝ ๋ฑ์ ์ธ์ ํ๊ณ ๋ค์ ์์ฒญํ๋ ํ๋.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **`Run.fun()` ๋ฉ์๋๊ฐ ๋น๋ โ ๋ชจ๋ ์ฑ
์์ด ํ ํจ์์** โ ์ฌ์ฉ์ ์
๋ ฅ + ๊ฒ์ฆ + ๊ฒ์ ์งํ + ๊ฒฐ๊ณผ ์ถ๋ ฅ์ด ํ๊ณณ์ ์์ด ๊ฐ์ฒด์งํฅ์ด ์๋๋ผ ์ ์ฐจ์ ๋ชจ๋๋ฆฌ์ค.
|
|
19
|
+
- **`Ranges` / `Settings`๋ผ๋ ์ ์ ์์ ์ปจํ
์ด๋ ํด๋์ค** โ ์ฌ์ฌ์ฉ๋์ง๋ ์๋๋ฐ public์ผ๋ก ์ด์ด ์ฌ์ฉ์ฒ ๋ชจ๋๊ฐ ๊ฒฐํฉ. ๋๋ฉ์ธ ์์น๋ฅผ ์์ ๋ฐ์ดํฐ.
|
|
20
|
+
- **`Ranges.move`์ฒ๋ผ ์ถ์์ ์ด๋ฆ** โ ๋ฌด์์ ๋ฒ์์ธ์ง ์ฌ์ฉ์๊ฐ ๋ชจ๋ฆ. ๋๋ฉ์ธ ์ดํ๋ฅผ ์์ ๋ค์ด๋ฐ.
|
|
21
|
+
- **`ExceptionHandling`์ด boolean ๋ฐํํ๋ ๊ฒ์ฆ๊ธฐ** โ ๊ฒ์ฆ์ throw๋ก ๋๋์ผ ํธ์ถ์๊ฐ ๋ถ๊ธฐ๋ฅผ ์ ๋ง๋ ๋ค. boolean ๋ฐํ์ ํธ์ถ์์ ์ ์ฝ์ ๋ง๋ฌ.
|
|
22
|
+
- **๊ฒ์ฆ์ด Controller ์์์ ์ง์ ์ผ์ด๋จ** โ ์
๋ ฅ ๊ฒฝ๊ณ(InputView)๋ ๋๋ฉ์ธ ๊ฐ์ฒด(Car)๊ฐ ์๋๋ผ ํ๋ฆ ์ ์ด์๊ฐ invariants๋ฅผ ๋ค๊ณ ์์.
|
|
23
|
+
- **`Car`๊ฐ `var` ํ๋กํผํฐ** โ ์ธ๋ถ์์ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ ์ํ. ์บก์ํ ๋ฏธํก.
|
|
24
|
+
- **์ต์ข
์ฐ์น์ ์ถ๋ ฅ + ๋ผ์ด๋ ํ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ํจ์์** โ ๋ ์ฑ
์์ ๊ฒฐํฉ.
|
|
25
|
+
|
|
26
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
27
|
+
|
|
28
|
+
๋ฆฌ๋ทฐ์ด @KwonDae๋ ๋ ๊ฐ์ง ํฐ ๋ฉํ ๊ฐ์ด๋๋ฅผ ์ผ๊ด๋๊ฒ ์ ์ํ๋ค.
|
|
29
|
+
|
|
30
|
+
1. **"๊ฐ์ฒด์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ผ"** โ Car ๊ฐ์ฒด์ ๋งค์ธ์ง๋ฅผ ๋ณด๋ด ์ค์ค๋ก ํ๋จํ๊ฒ ํ๋ค๋ ์์น(slipp ๊ธ ์ธ์ฉ). ์ํ๋ฅผ ๊บผ๋ด ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ ์ฐจ์ ์ฌ๊ณ ๋ฅผ ๊นจ๋ ๋ฐฉํฅ.
|
|
31
|
+
2. **"๊ฒ์ฆ์ ์ฑ
์ ๋ถ๋ฆฌ์ ์์"** โ Validation์ ๊ฒ์ฆ๋ง ํ๋ค(์ ์ ์งํ or throw), ์ฌ์
๋ ฅ ๊ฐ์ ํ๋ฆ์ ํธ์ถ์์ ์ผ์ด๋ค. ๋งํธ ๋น์ ๋ก ํค์ค์คํฌ/์ค์บ๋/๋ชจ๋ํฐ์ ๋ถ๋ฆฌ๋ฅผ ์ค๋ช
.
|
|
32
|
+
|
|
33
|
+
๋ํ ๋งค์ง ๋๋ฒ์ ๋ํ ๊ฐ์ด๋๋ฅผ ๋จ์ "์์ํ ๋ฌด์กฐ๊ฑด"์ด ์๋๋ผ **"์๋ฏธ๊ฐ ์์ ๋๋ง ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ผ"** ๋ ์์ผ๋ก ๊ท ํ ์๊ฒ ์ ์.
|
|
34
|
+
|
|
35
|
+
- **๋ํ ์ธ์ฉ:**
|
|
36
|
+
> ์ํ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด ๋ก์ง์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌํํ์ง ๋ง๊ณ ๊ฐ์ฒด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ์ผ์ ํ๋๋ก ๋ฆฌํฉํ ๋งํ๋ค. ... Car ๊ฐ์ฒด์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋์ ธ ์ค์ค๋ก ํ๋จํ๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋ด๊ฒ๋ ํ๋๊ฒ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๊ฒ ์ฃ ?
|
|
37
|
+
>
|
|
38
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/controller/Car.kt:12`
|
|
39
|
+
|
|
40
|
+
> Validation(๊ฒ์ฆ)์ ํ๋ ๋ถ๋ถ์์๋ ์ ์ ๋์์ด๋ผ๋ฉด ์งํ, ์์ธ ๋ฐ์์ IllegalArgumentException ๋ง ๋ฐ์์ํค๋๊ฒ ๋ด๋น ์ญํ ์
๋๋ค. ๊ทธ ์ดํ์๋ ๊ฒ์ฆ์ ํธ์ถํ๊ณณ์์ ํ ์ผ์
๋๋ค.
|
|
41
|
+
>
|
|
42
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/controller/ExceptionHandling.kt`
|
|
43
|
+
|
|
44
|
+
> ์ฐ๋ฆฌ๊ฐ ๋งํธ๋ฅผ ๊ฐ์ ๊ณ์ฐ๋์ ๋ฌผ๊ฑด์ ์ฌ๋ ค๋์์ด์ ... ๊ทธ๋ผ ๋ฌผ๊ฑด์ ์ฌ๋ ค๋๋ ๊ณณ, ์ค์บํ๋ ์ฅ์น, ๋ณด์ฌ์ฃผ๋ ๋ชจ๋ํฐ ๋ชจ๋ ๋ถ๋ฆฌ๊ฐ ๋์ด์๋๋ฐ ์ด๊ฒ์ฒ๋ผ ๊ฐ์ ํ ์ผ์ ๋ถ๋ฆฌํด๋ณผ๊น์?
|
|
45
|
+
>
|
|
46
|
+
> โ @KwonDae on `src/main/kotlin/racingcar/controller/Run.kt`
|
|
47
|
+
|
|
48
|
+
## ์ป์ ๊ตํ
|
|
49
|
+
|
|
50
|
+
- **๊ฒ์ฆ์ ์ฑ
์์ "์ ์ ํต๊ณผ ๋๋ throw" ๋ ๊ฐ์ง๋ฟ.** ์ฌ์
๋ ฅ/์๋ฌ ํ์๋ ํธ์ถ์์ ์ฑ
์. ๊ฒ์ฆ์ด boolean์ ๋ฐํํ๋ฉด ํธ์ถ์๊ฐ if๋ฅผ ๋ง๋ค์ด ๋ ๋ถ๊ธฐ ๊ฒฐ์ ์ ํด์ผ ํ๋ค โ ๊ฒฐํฉ๋ ์ฆ๊ฐ.
|
|
51
|
+
- **๊ฐ์ฒด์ค๋ฌ์ = ๋ฉ์์ง๋ก ์ผ์ ์ํจ๋ค.** ๊ฐ์ฒด์ ์ํ๋ฅผ ๊บผ๋ด์ ์ธ๋ถ๊ฐ ๊ฐ๊ณตํ๋ ์ฝ๋๋ ์ ์ฐจ์ ์ด๋ค. `car.move()`๋ฅผ ํธ์ถํด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๊ฒ์ด ๊ฐ์ฒด์๊ฒ ์์จ์ฑ์ ์ฃผ๋ ๊ฐ์ฅ ๋จ์ํ ํํ.
|
|
52
|
+
- **์์์ ์๋ฆฌ๋ ๊ทธ ๋๋ฉ์ธ์ ์ฃผ์ธ ๊ณ.** "์ฌ์ฌ์ฉ๋๋๊ฐ"๊ฐ ์ฒซ ์ง๋ฌธ. ์ฌ์ฌ์ฉ๋์ง ์์ผ๋ฉด ์ฌ์ฉ์ฒ์ private์ผ๋ก. ์ฌ์ฌ์ฉ๋๋ฉด ๊ทธ ๋๋ฉ์ธ์ companion์ผ๋ก.
|
|
53
|
+
- **์ด๋ฆ์ ๋๋ฉ์ธ ์ดํ๋ฅผ ์ด๋ฆฐ๋ค.** `move`๋ณด๋ค `moveCondition` ๋๋ `moveThreshold` โ ์ด ๋ณ์๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ธ๋ถ ์ปจํ
์คํธ ์์ด ๋ณด์ด๊ฒ.
|
|
54
|
+
- **ํจ์ ํ ๊ฐ์ง ์ฑ
์ = ์์ ํจ์.** "15๋ผ์ธ + ํ ๊ฐ์ง ์ผ"์ด๋ผ๋ ์ฐํ
์ฝ์ ์๊ตฌ๋ ํจ์ํ ์ฌ๊ณ ๊ฐ ์๋๋ผ ์ฑ
์ ๋ถ๋ฐฐ์ ์ฒซ ํ๋ จ. ํฐ ํจ์๋ ํญ์ ์ฑ
์ ์๋ณ์ ์ ํธ.
|
|
55
|
+
- **ํ์ค ๋น์ ๋ ์ฑ
์ ๋ถ๋ฐฐ์ 1์ฐจ ๋๊ตฌ.** ๋งํธ์ ํค์ค์คํฌ/์ค์บ๋/๋ชจ๋ํฐ ๋น์ ์ฒ๋ผ, ํ์ค์์ ๋๊ฐ ๋ฌด์์ ํ๋์ง ๊ทธ๋ฆฌ๋ฉด ๊ฐ์ฒด ๋ถ๋ฆฌ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ผ์จ๋ค โ ๋จ, ๋น์ ์ ๊ฐํ์ง ๋ง๊ณ ๋ฉ์์ง ๋ชจ๋ธ๋ก ํ ๋จ๊ณ ๋ ์ถ์ํํ ๊ฒ.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# PR #52 โ [์๋์ฐจ ๊ฒฝ์ฃผ] ์์ง ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@sujin9](https://github.com/sujin9)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/52
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @vagabond95
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 13
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`RacingCar`, `RacingGame`, `Validator`, `InputView`, `OutputView` ์ฑ
์ ๋ถ๋ฆฌ**.
|
|
12
|
+
- **์์ `Const`๋ก ๋ชจ์** (์ดํ ํ์์ด ๋ถ์ฐ).
|
|
13
|
+
- **ํ
์คํธ ์ฝ๋ ๋ช
ํ์ฑ**.
|
|
14
|
+
|
|
15
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
16
|
+
|
|
17
|
+
- **`Validator` ๋ชจํธํ ์ด๋ฆ** โ `InputValueValidator`๋ก ๋ณ๊ฒฝ (god-object ์ํ).
|
|
18
|
+
- **`Const.kt` ๋จ์ผ ํ์ผ์ ๋ชจ๋ ์์** โ ์์ง๋ ๋ฎ์.
|
|
19
|
+
- **`RacingCar`์ ์ถ๋ ฅ ํ์ (toString) ๋ณด์ ** โ OutputView ์ฑ
์ ์นจ๋ฒ.
|
|
20
|
+
- **`maxOf` ๋ฏธ์ฌ์ฉ (์๋ ๋น๊ต)**.
|
|
21
|
+
- **`it` ์ฐ์ ์ฌ์ฉ์ผ๋ก ๊ฐ๋
์ฑ ์ ํ**.
|
|
22
|
+
|
|
23
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
24
|
+
|
|
25
|
+
๋ฆฌ๋ทฐ์ด @vagabond95์ ํต์ฌ:
|
|
26
|
+
|
|
27
|
+
1. **๋ชจํธํ ์ด๋ฆ = god-object์ ์ ํธ** โ Validator โ InputValueValidator โ "์ง๊ธ์ ์ถฉ๋ถํ์ง๋ง, ๋ ์ธ๋ถํํ๋ฉด ์ค๋ฒ์์ง๋์ด๋ง."
|
|
28
|
+
|
|
29
|
+
2. **์์์ ์๋ฆฌ = ์ฌ์ฌ์ฉ์ฑ**. ํ ๊ณณ๋ง ์ฐ๋ฉด ๊ทธ ์๋ฆฌ์. ์ฌ๋ฌ ๊ณณ์ด๋ฉด ํ์ผ ๋ถ๋ฆฌ, ๋จ *๊ณตํต ์ฑ๊ฒฉ์ด ๋๋ฌ๋๋ ์ด๋ฆ*.
|
|
30
|
+
|
|
31
|
+
3. **์ถ๋ ฅ ํ์ ์ฑ
์ = OutputView**. `toString()`์ด ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ค์ด๊ฐ๋ฉด ์ถ๋ ฅ ๋ณ๊ฒฝ ์ ๋๋ฉ์ธ ๋ณ๊ฒฝ.
|
|
32
|
+
|
|
33
|
+
4. **`maxOf` ๊ฐ์ ์ปฌ๋ ์
ํจ์ ์ ๊ทน ํ์ฉ**.
|
|
34
|
+
|
|
35
|
+
- **๋ํ ์ธ์ฉ:**
|
|
36
|
+
> ๋ฌด์์ ๊ฒ์ฆํ๋์ง๊ฐ ์ด๋ฆ์ ์ข ๋ ๋๋ฌ๋๋ฉด ์ข๊ฒ ์ด์. ๋ค์ด๋ฐ์ด ๋ชจํธํ ์๋ก ์ํฐํจํด์ธ god-object ๊ฐ ๋๊ธฐ ์ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค.
|
|
37
|
+
>
|
|
38
|
+
> โ @vagabond95 on `src/main/kotlin/racingcar/domain/Validator.kt`
|
|
39
|
+
|
|
40
|
+
> ์ด๋ถ๋ถ์ '์ด๋ป๊ฒ ๊ทธ๋ฆด์ง'์ ๋ํ ๋ด์ฉ์ด๋ฏ๋ก OutputView ์์ ์ํํ๋ ๊ฒ์ด ์ ์ ํ์ง ์์๊น์~?
|
|
41
|
+
>
|
|
42
|
+
> โ @vagabond95 on `src/main/kotlin/racingcar/domain/RacingCar.kt`
|
|
43
|
+
|
|
44
|
+
## ์ป์ ๊ตํ
|
|
45
|
+
|
|
46
|
+
- **๋ชจํธํ ์ด๋ฆ โ god-object ์ํ**. "Manager", "Util", "Validator"๋ ๋ฌด์์ *Manage/Util/Validate*ํ๋์ง ๋ช
์ํด์ผ ํจ.
|
|
47
|
+
- **์์์ ์์ง๋ = ์ฌ์ฉ์ฒ์์ ๊ฑฐ๋ฆฌ**. ํ ํด๋์ค์์๋ง ์ฐ๋ฉด ๊ทธ ํด๋์ค์ companion object. ์ฌ๋ฌ ๊ณณ์ด๋ฉด *๋ชฉ์ ๋ณ ํ์ผ*. `Const.kt`์ฒ๋ผ ์กํ์ ๊ฐ์ฅ ๋์ ํํ.
|
|
48
|
+
- **toString์ ํจ์ ** โ ๋๋ฉ์ธ์ ๋๋ฉด "๋๋ฉ์ธ์ด ์๊ธฐ ํํ ๋ฐฉ์์ ์์์ผ ํจ" โ ์ถ๋ ฅ ๋ณ๊ฒฝ์ด ๋๋ฉ์ธ ๋ณ๊ฒฝ. ๋ฐฑ์๋ ์ปจ๋ฒค์
์ OutputView๋ก.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# PR #61 โ [์๋์ฐจ ๊ฒฝ์ฃผ - ๋ฆฌํฉํ ๋ง] ์์ง ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@sujin9](https://github.com/sujin9)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/61
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ (๋ฆฌํฉํ ๋ง)
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @vagabond95
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 12
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`_movingState` + custom getter (backing property)** โ Kotlin idiom ๋์
.
|
|
12
|
+
- **`InputValueValidator`๋ก ์ด๋ฆ ๋ช
ํํ**.
|
|
13
|
+
- **์์ ์ฌ์ฉ์ฒ์ ๋ถ์ฐ**.
|
|
14
|
+
- **ํ์ฅ ํจ์ ์ ์ฉ** โ `"89".isNumber()`.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **ํ์ฅ ํจ์๊ฐ `NumberValidator` ํด๋์ค ๋ด๋ถ์** โ top-level์ด ๋ ์ ํฉ.
|
|
19
|
+
- **`NumberValidator` ์์ฒด ์ฑ
์ ๋ถ์ฌ** โ ํ์ฅ ํจ์ ํธ์คํ
ํ๋ ๋น ํด๋์ค.
|
|
20
|
+
|
|
21
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
22
|
+
|
|
23
|
+
๋ฆฌ๋ทฐ์ด @vagabond95์ ๋ฉ์์ง:
|
|
24
|
+
|
|
25
|
+
1. **๋จ์ผ ์ฑ
์ ์๋ฌธ ์์ฒด๊ฐ ๊ฒฝ๊ณ ์ ํธ** โ "ํด๋์ค์ ์ญํ ์ ์ด๋๊น์ง ์ธ๋ถํํด์ผํ ์ง ๊ณ ๋ฏผ๋๋ ๋ถ๋ถ ์์ฒด๊ฐ SRP๋ฅผ ๋ชป ์งํค๊ณ ์๋ ์ ํธ์ผ ์ ์๋ค."
|
|
26
|
+
|
|
27
|
+
2. **ํ์ฅ ํจ์์ ์๋ฆฌ = top-level** โ `String.isNumber()`๋ ํด๋์ค ๋ด๋ถ์ ๋ ํ์ ์์.
|
|
28
|
+
|
|
29
|
+
3. **์์ ํ์ผ์ *๊ณตํต ์ฑ๊ฒฉ ์ด๋ฆ*** โ `Const`๋ณด๋ค `MessageConst`, `LimitConst` ๊ฐ์ด.
|
|
30
|
+
|
|
31
|
+
4. **backing property** โ `_xxx`/`xxx` ํจํด์ด Kotlin idiom. ๋จ, ๋จ์ผ ๋ณ์ + custom setter๋ก๋ ๋์ผ ํจ๊ณผ.
|
|
32
|
+
|
|
33
|
+
- **๋ํ ์ธ์ฉ:**
|
|
34
|
+
> ํด๋์ค์ ์ญํ ์ ์ด๋๊น์ง ์ธ๋ถํํด์ผํ ์ง ๊ณ ๋ฏผ๋๋ ๋ถ๋ถ ์์ฒด๊ฐ ๋จ์ผ ์ฑ
์ ์์น์ ์งํค์ง ๋ชปํ๊ณ ์๊ฑฐ๋, ํด๋์ค ์์ฒด๊ฐ ๋๋ฌด ์ปค์ง ์ ์๋ ์ ์ฌ์ฑ์ ๊ฐ์ง๊ฒ ๋๋ ์ ํธ์ผ์๋ ์๋ค๊ณ ์๊ฐํด์!
|
|
35
|
+
>
|
|
36
|
+
> โ @vagabond95 on `src/main/kotlin/racingcar/domain/InputValueValidator.kt`
|
|
37
|
+
|
|
38
|
+
> ํด๋น extension function ์ ๊ตณ์ด NumberValidator ๋ด๋ถ์ ์กด์ฌํ์ง ์์๋ ๋๊ณ NumberValidator ์ญํ ์์ฒด๋ ํ์ฌ๋ ๋ฌด์๋ฏธํ๋ฏ๋ก ์ ๊ฑฐํด๋ ๊ด์ฐฎ์ ๋ณด์ฌ์!
|
|
39
|
+
>
|
|
40
|
+
> โ @vagabond95 on `src/main/kotlin/racingcar/domain/validator/NumberValidator.kt`
|
|
41
|
+
|
|
42
|
+
## ์ป์ ๊ตํ
|
|
43
|
+
|
|
44
|
+
- **"์ด๋๊น์ง ๋ถ๋ฆฌํ ๊น"์ ๊ณ ๋ฏผ ์์ฒด๊ฐ SRP ์๋ฐ ์ ํธ์ผ ์ ์๋ค**. ์์ฐ์ค๋ฌ์ด ์ฑ
์ ๋ถ๋ฆฌ๋ ์๋ช
ํจ. ๊ณ ๋ฏผ์ด ๊ธธ์ด์ง๋ฉด ํด๋์ค๊ฐ ์๋ชป ๋๋ ์ํ์ผ ๊ฐ๋ฅ์ฑ.
|
|
45
|
+
- **ํ์ฅ ํจ์์ ์๋ฆฌ = top-level**. ํด๋์ค ๋ด๋ถ ํ์ฅ ํจ์๋ *๊ทธ ํด๋์ค์ ๋ฉค๋ฒ์ฒ๋ผ* ๋์ํ์ง๋ง, ์ง์ง *์ ํธ*์ด๋ฉด top-level์ด ๊น๋.
|
|
46
|
+
- **๋น ํด๋์ค (ํ์ฅ ํจ์๋ง ํธ์คํ
)๋ ๊ฐ์ฒด ์๋**. ๋ฉค๋ฒ ์์ด ํจ์๋ง ์์ผ๋ฉด ๊ทธ๊ฑด ํจ์ ๋ชจ์ = top-level ๋๋ object.
|
|
47
|
+
- **backing property** = `private var _xxx` + `val xxx: Type get() = _xxx`. Kotlin์์ ์ธ๋ถ read-only + ๋ด๋ถ mutable์ ํ์ค ํจํด.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# PR #47 โ [๋ถ๋] ์ฝํ๋ฆฐ ์๋์ฐจ ๊ฒฝ์ฃผ ์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@tmdgh1592](https://github.com/tmdgh1592)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/47
|
|
5
|
+
- **๋จ๊ณ:** 1๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @namjackson
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 38
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **์์ฑ์ ์ฃผ์
๊ณผ ๊ธฐ๋ณธ๊ฐ ํ์ฉ** โ ์์กด์ฑ์ ๋ช
์์ ์ผ๋ก ๋ฐ๋ ์๋. ๋ฆฌ๋ทฐ์ด๊ฐ ๋ช
์์ ์ผ๋ก ์นญ์ฐฌ.
|
|
12
|
+
- **๋๋ค ๊ฒฐ๊ณผ๋ฅผ `isMove` ํํ๋ก ๋ณํํด ๋
ธ์ถ** โ ์ธ๋ถ์ raw ๋์๋ฅผ ํ๋ฆฌ์ง ์๊ณ ์๋ฏธ ์๋ boolean์ผ๋ก ๋ณํํ ์ ์ ์บก์ํ ์๋๋ก ๊ธ์ ์ (๋ค๋ง Random ์์ฒด ์์กด์ ๋จ์).
|
|
13
|
+
- **ํ
์คํธ ์ฝ๋๋ฅผ ์ ๊ทน ์์ฑ** โ ๋จ์ happy path๊ฐ ์๋๋ผ ์์ธ ์ํฉ๊น์ง ๋ค๋ฃจ๋ ค๋ ์๋.
|
|
14
|
+
- **๋ฆฌ๋ทฐ์ ์๋๋ฅผ ๊น๊ฒ ๊ณฑ์น๋ ์๋ต** โ ๋จ์ "์์ ํ์ต๋๋ค"๊ฐ ์๋๋ผ DTO ๊ฒฝ๊ณ, Repository ํ์์ฑ ๋ฑ์ ๋ณธ์ธ์ ์ธ์ด๋ก ์ฌ์ ๋ฆฌํ ๊ธด ์๋ต์ ๋จ๊น.
|
|
15
|
+
|
|
16
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
17
|
+
|
|
18
|
+
- **`Random`์ ๋ํ ์ง์ ์์กด** โ `RacingService`๊ฐ `Random`์ ์ง์ ํธ์ถ. ๋จ์ํ
์คํธ์์ ๊ฒฐ๊ณผ๋ฅผ ํต์ ํ ์ ์์ (non-newable).
|
|
19
|
+
- **`BlankRemover`, `Strings`, `Dimens`, `Validator` ๊ฐ์ ์ ํธ ํด๋์ค๊ฐ ์ฐ์ฌ** โ ์ฑ
์์ด ๋ถ์ฐ๋๊ณ ๊ฐํ ๊ฒฐํฉ์ด ์๊ธฐ๋ ๊ตฌ์กฐ. ํนํ `Validator`๋ ์ด๋ฆ์ด ๋๋ฌด ๊ด๋ฒ์ํด ์ฌ์ฉ์ฒ๊ฐ ๋ชจ๋ ์์กด.
|
|
20
|
+
- **`Validator` ๊ฐ์ ํฌํผ ๊ฐ์ฒด๊ฐ ๋๋ฉ์ธ ์์ ์ด์ ์์** โ ๊ฒ์ฆ์ ๋ณ๋ ๊ฐ์ฒด๋ก ๋นผ๋์ผ๋ "๊ฒ์ฆ์ ๋๊ฐ ํ๋๊ฐ"๊ฐ ํฉ์ด์ง. ์ ์ ๋๋ฉ์ธ ๊ฐ์ฒด(Car)๋ ์๊ธฐ invariants๋ฅผ ์ ์งํค๋ ๋ฌด๋ฐฉ๋น ์ํ.
|
|
21
|
+
- **Controller โ Service.createCars โ Service.insertCars ์ ์ฐจ ํธ์ถ** โ ์ธ๋ถ๊ฐ service์ ์ ์ฐจ๋ฅผ ์๊ณ ์์๋๋ก ํธ์ถ. Tell-Don't-Ask ์๋ฐฐ.
|
|
22
|
+
- **`getWinners` ํ
์คํธ๊ฐ `insertCars`/`getAll`์ ์์กด** โ ๋ค๋ฅธ ํจ์์ ๊ฒฐํจ์ด ์๊ธฐ๋ฉด ๋ฌด๊ดํ ํ
์คํธ๋ ๊นจ์ง. ํ
์คํธ ๊ฒฉ๋ฆฌ ๋ถ์กฑ.
|
|
23
|
+
- **private ํจ์๋ฅผ ํ
์คํธํ๋ ค๊ณ ๊ฐ์์ฑ์ ํ์ด๋ฒ๋ฆผ** โ "ํ
์คํธ๋ฅผ ์ํ ์ฝ๋"๊ฐ production ํ๋ฉด์ ์ ๋๋ฆฌ๋ ์ํฐํจํด.
|
|
24
|
+
- **View ํ์์ฉ ๋ฌธ์์ด("-" ๋ฑ)์ด Model ์์์ ๋ง๋ค์ด์ง** โ View๊ฐ ์์์ผ ํ ํํ ์ฑ
์์ด ๋๋ฉ์ธ์ผ๋ก ์์ด ๋ค์ด์ด.
|
|
25
|
+
|
|
26
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
27
|
+
|
|
28
|
+
๋ฆฌ๋ทฐ์ด @namjackson์ **"Random์ ๋ํ ๊ฐํ ์์กด"** ๊ณผ **"Service์ ๋ฉ์์ง๋ก ์์"** ์ ๋ฐ๋ณต์ ์ผ๋ก ์ง์๋ค. ๋ํ ์ ํธ์ฑ ํด๋์ค(Validator, BlankRemover)๊ฐ ๋ง๋๋ ๋ถ์ฐ๋ ์ฑ
์๊ณผ ๊ฒฐํฉ๋ ๊ฒฝ๊ณ . ํ
์คํธ ๊ด์ ์์๋ (1) ๋ค๋ฅธ ํจ์์ ์์กดํ๋ ํ
์คํธ์ ์ทจ์ฝ์ฑ, (2) private ํจ์ ๋
ธ์ถ์ด ํ
์คํธ ์ค๊ณ์ ์ ํธ์์ ๊ฐ์กฐ.
|
|
29
|
+
|
|
30
|
+
- **๋ํ ์ธ์ฉ:**
|
|
31
|
+
> Randomํด๋์ค์ ๋ํ ๊ฐํ ์์กด์ด ์๊ฒผ๋ค์! Randomํจ์๋ ํ
์คํธํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ์์กด๋๋ฅผ ์ค์ผ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์๊ฑฐ๊ฐ์์!
|
|
32
|
+
>
|
|
33
|
+
> โ @namjackson on `src/main/kotlin/racingcar/service/RacingService.kt`
|
|
34
|
+
|
|
35
|
+
> racingService์๊ฒ ๋ฉ์ธ์ง๋ฅผ ์ฃผ์ด ํด๋น ๊ธฐ๋ฅ์ ํ๋๋ก ์ฑ
์์ ์์ํด๋ณด๋ฉด์ด๋จ๊น์?
|
|
36
|
+
>
|
|
37
|
+
> โ @namjackson on `src/main/kotlin/racingcar/controller/RacingController.kt:16`
|
|
38
|
+
|
|
39
|
+
> ํ
์คํธ๋ฅผ ์ํ ํจ์๋, ํ
์คํธ๋ฅผ ์ํ ์ฝ๋๋ ์ง์ํด์ฃผ์ธ์! ํด๋น ํจ์๋ฅผ ๊ณต๊ฐํ์ง์๊ณ ํ
์คํธํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์๊ฒ ๊ฐ์์!
|
|
40
|
+
>
|
|
41
|
+
> โ @namjackson on `src/main/kotlin/racingcar/service/RacingService.kt:10`
|
|
42
|
+
|
|
43
|
+
## ์ป์ ๊ตํ
|
|
44
|
+
|
|
45
|
+
- **ํ
์คํธํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๋ ์ค๊ณ์ ์ ํธ๋ค.** Random/Clock ๊ฐ์ ์ธ๋ถ ์์์ ์ธํฐํ์ด์ค๋ก ์ถ์ํํ๊ณ ์ฃผ์
๋ฐ์ผ๋ฉด, ๋๋ฉ์ธ์ ์์ํด์ง๊ณ ํ
์คํธ๋ ๊ฒฐ์ ์ ์ด ๋๋ค.
|
|
46
|
+
- **์ ํธ๋ฆฌํฐ ํด๋์ค๋ ์ฑ
์์ ํฉ์ด๋๋๋ค.** "์ด๋ ๋์ง ๋ชจ๋ฅผ ๋ ์์๋ก ๋ฝ์ ๋ ์๋ฆฌ"๊ฐ ๊ตณ์ด์ง๋ฉด, ๋ชจ๋ ์ฌ์ฉ์ฒ๊ฐ ๊ทธ ์ ํธ์ ๊ฒฐํฉ๋์ด ๋ ์ด์ ์ฎ๊ธธ ์ ์๊ฒ ๋๋ค. ๊ฒ์ฆ ๊ฐ์ invariant๋ ๊ทธ invariant๋ฅผ ๊ฐ์ง ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ ๋ค๊ณ ์์ด์ผ ํ๋ค.
|
|
47
|
+
- **"createX ํ useX"๋ ๋ฉ์์ง๋ฅผ ๋ ๋ฒ ๋ณด๋ด๋ผ๋ ์ ํธ๊ฐ ์๋๋ค.** ์ธ๋ถ๊ฐ ๊ฐ์ฒด์ ์ ์ฐจ๋ฅผ ์๊ณ ์์๋๋ก ํธ์ถํ๋ค๋ฉด, ๊ทธ ์ ์ฐจ๋ ๊ฐ์ฒด ๋ด๋ถ๋ก ๋ค์ด๊ฐ์ผ ํ๋ค (Tell-Don't-Ask).
|
|
48
|
+
- **ํ
์คํธ๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๊ฒ์ฆ ๋์์ ๋๋ฌํ ์ ์์ด์ผ ํ๋ค.** ์์กด์ด ๊ธธ์ด์ง์๋ก ํ
์คํธ๋ ๋ค๋ฅธ ์ฝ๋์ ์ธ์ง์ด ๋๋ค. ์์ฑ์ ์ฃผ์
์ผ๋ก ๊ฒฉ๋ฆฌํ๋ผ.
|
|
49
|
+
- **private ํจ์๋ฅผ ํ
์คํธํ๊ณ ์ถ๋ค๋ฉด ๊ทธ๊ฑด ๋ณ๊ฐ์ ์ฑ
์์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.** ๊ฐ์์ฑ์ ํธ๋ ๋์ , ๊ทธ ์ฑ
์์ ๋ณ๊ฐ์ ํด๋์ค๋ก ์ถ์ถํ๋ ํธ์ด ๋ณดํต ๋ ์ณ๋ค.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# PR #64 โ [๋ถ๋] 2๋จ๊ณ ์๋์ฐจ ๊ฒฝ์ฃผ ์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@tmdgh1592](https://github.com/tmdgh1592)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/64
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @namjackson
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 24
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **์ด์ ๋ผ์ด๋ ํผ๋๋ฐฑ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ผ๋ก ํก์** โ Repository ๋ ์ด์ด ์ ๊ฑฐ, `CarName`/`CarsDto` ๋ฑ ๊ฐ ๊ฐ์ฒดํยทDTO ๋ถ๋ฆฌ๋ฅผ ์ง์ ๋จํ.
|
|
12
|
+
- **๊ฒ์ฆ์ด ํ์ํ ์์๊ฐ์ ๊ฐ์ฒด๋ก ๊ฐ์** โ `CarName`์ฒ๋ผ ๋๋ฉ์ธ invariants๋ฅผ ๋ค๊ณ ์๋ ๊ฐ ๊ฐ์ฒด๋ฅผ ๋์
ํด ์์ ๊ฐ๋ฐ์ ํด์ํ๋ ค๋ ์๋.
|
|
13
|
+
- **Fake ๊ฐ์ฒด๋ก Mock ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ฒด** โ ํ
์คํธ ๋๋ธ์ ๋ํ ์ดํด๋ฅผ ํ๋์ผ๋ก ์ฎ๊ธด ๋ชจ๋ฒ ์ฌ๋ก. `CarMoveCondition` ์ธํฐํ์ด์ค + `FakeForSuccess`/`FakeForFailed` ๊ตฌํ.
|
|
14
|
+
- **OCP๋ฅผ ์์ํ ์ ๋ต ์ถ์ํ** โ `CarMoveCondition`, `MoveStep`(sealed) ๋ฑ ๋ณํ ๊ฐ๋ฅ ์ง์ ์ ์ธํฐํ์ด์ค๋ก ๊ฒฉ๋ฆฌํ ์๋.
|
|
15
|
+
- **๋ฆฌ๋ทฐ์ ์๋๋ฅผ ๋ณธ์ธ ์ธ์ด๋ก ๊น๊ฒ ๊ณฑ์น์** โ ๋จ์ ์ ์ฉ์ด ์๋๋ผ ์์ ์ด ์ด๋ป๊ฒ ์ดํดํ๋์ง ๊ธธ๊ฒ ์ ๋ฆฌํ๋ฉฐ ํ ๋ก ์ ๋์ด๊ฐ.
|
|
16
|
+
|
|
17
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
18
|
+
|
|
19
|
+
- **Domain Model์ด DTO๋ฅผ ์๊ณ ์์** โ `Car`๊ฐ `CarDto`์ ์์กด. ๋ ์ด์ด ๊ฒฝ๊ณ๊ฐ ์๊ณ , ๋๋ฉ์ธ์ด ์ธ๋ถ ํ์์ ๋ณํ์ ๋๋ ค๋ค๋๊ฒ ๋จ.
|
|
20
|
+
- **์ธํฐํ์ด์ค ์ด๋ฆ์ ๊ตฌํ ๋จ์๊ฐ ๋ฐํ** โ `RandomGenerator`์ฒ๋ผ "์ด๋ป๊ฒ ๋ง๋๋๊ฐ"๊ฐ ์ธํฐํ์ด์ค ์ด๋ฆ์ ๋ค์ด๊ฐ๋ฉด, ๊ตฌํ์ด ๋ฐ๋๋ฉด ์ด๋ฆ์ด ๋ฌด์๋ฏธํด์ง. ์ถ์์ "๋ฌด์์ ํ๋ค"๋ก.
|
|
21
|
+
- **"์ด๋ ๊ฒฐ์ "์ ์ฑ
์ ์์น๊ฐ ํ๋ค๋ฆผ** โ `Cars`๊ฐ `generateNumber`๋ฅผ ๊ฐ์ง๋ฉด์, Car๋ ๋จ์ง ๋ฐ์ ์๋ฅผ ๋น๊ต๋ง ํจ. "์ ์งํ ์ง ๋ง์ง"์ ์์ฌ๊ฒฐ์ ์ฃผ์ฒด๊ฐ ๋ชจํธ.
|
|
22
|
+
- **YAGNI ์๋ฐฐ ๊ฐ๋ฅ์ฑ โ ๊ณผํ ์ฌ์ ์ถ์ํ** โ `MoveStep` sealed๋ก 0/1๋ง ํํํ๋๋ฐ ์ด๋ฏธ ๋ ํด๋์ค๋ฅผ ๋ง๋ฆ. ๊ฐ๋ณ์ฑ์ด ์ค์ ๋ก ๋ค์ด์์ ๋ ์ถ๊ฐํ๋ ํธ์ด ๋ณดํต ๋ ์์ .
|
|
23
|
+
- **Fake ๊ฐ์ฒด๊ฐ production ํจํค์ง์ ์์น** โ ์ค ๋ฐฐํฌ ์ฝ๋์ ํ
์คํธ์ฉ ๊ตฌํ์ด ์์ด๋ฉด production ์์กด ๊ทธ๋ํ๊ฐ ์ค์ผ.
|
|
24
|
+
|
|
25
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
26
|
+
|
|
27
|
+
๋ฆฌ๋ทฐ์ด @namjackson์ ์ด ๋ผ์ด๋์์ ๋ ๊ฐ์ง ํฐ ์ฃผ์ ๋ฅผ ์ง์๋ค.
|
|
28
|
+
|
|
29
|
+
1. **์ถ์ํ์ ์๋** โ ์ธํฐํ์ด์ค ์ด๋ฆ์ด "์ด๋ป๊ฒ"๋ฅผ ๋
ธ์ถํ์ง ๋ง ๊ฒ(`RandomGenerator` โ `NumberGenerator`), Fake๋ฅผ production ํจํค์ง์ ๋์ง ๋ง ๊ฒ.
|
|
30
|
+
2. **์ฑ
์์ ์ง์ง ์๋ฆฌ** โ `Cars`๊ฐ number๋ฅผ ์์ฑํ๋ฉด์ Car๊ฐ ๋ฐ๊ธฐ๋ง ํ๋ค๋ฉด "Car ์์ ์ ์์ฌ๊ฒฐ์ "์ด ์ฌ๋ผ์ง๋ค๋ ์ . ๊ทธ๋ฆฌ๊ณ ๋ณํ ๊ฐ๋ฅ์ฑ(์๋์ฐจ๋ง๋ค ๋ค๋ฅธ ์กฐ๊ฑด, ์ด๋ ๊ฑฐ๋ฆฌ ๋ค๋ฆ)์ ์๋ก ๋ค์ด "์ด๋์ ์ฑ
์์ ๋๋ฉด ๋ณํ์ ์ ์ฐํ๊ฐ"๋ฅผ ๋ฌป๋ ์.
|
|
31
|
+
|
|
32
|
+
๋ํ YAGNI๋ฅผ ๋ช
์์ ์ผ๋ก ์ธ๊ธ โ "๋ณ๊ฒฝ ์์ํด ๋ฏธ๋ฆฌ ์ง๋ ๊ฒ๋ณด๋ค, ์ฑ
์์ ์ ๋๋ ์ฝ๋ + ํ
์คํธ๊ฐ ๋ ํฐ ์์ ๋ง."
|
|
33
|
+
|
|
34
|
+
- **๋ํ ์ธ์ฉ:**
|
|
35
|
+
> ์ธํฐํ์ด์ค์์๋ Random์ผ๋ก ์์ฑ๋๋ค๋ ์ ๋ณด๋ฅผ ํฌํจํ๋๊ฒ ์ข์ ๋ฐฉ๋ฒ์ผ๊น์? ํด๋น ์ธํฐํ์ด์ค์ ์ฃผ์๊ธฐ๋ฅ์ Number๋ฅผ generateํด์ฃผ๋๊ฒ์ด์ง, ํด๋น Number๊ฐ Random์ผ๋ก ๋ฐ์ํ๋์ง, ์ผ์ ํ Number๊ฐ ๋ฐ์ํ๋์ง๋ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ ์ฑ
์์ด์ง ์์๊น์ค?
|
|
36
|
+
>
|
|
37
|
+
> โ @namjackson on `src/main/kotlin/racingcar/utils/random/RandomGenerator.kt`
|
|
38
|
+
|
|
39
|
+
> number๋ฅผ ๊ฐ์ง๊ณ ์ ์งํ ์ง ๋ง์ง์ ๋ํ ์ฑ
์์ ์ด๋์ ์๋๊ฒ์ด ์ข์๊น์? Car๊ฐ ์์ง์ด๋ ๊ธฐ์ค์ด ๋๋ค๋ฒํธ๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ๋๋ค๋ฉด, Car๋ง๋ค ์์ง์ด๋ ๊ธฐ์ค์ด ๋ฌ๋ผ์ง๋ค๋ฉด, Car๋ง๋ค ํ๋ฒ์ ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋ค๋ฉด, ์ด๋ค๊ตฌ์กฐ๊ฐ ์ข๋ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋๊ณ ...
|
|
40
|
+
>
|
|
41
|
+
> โ @namjackson on `src/main/kotlin/racingcar/service/RacingService.kt`
|
|
42
|
+
|
|
43
|
+
> YAGNI ... ํ์ฅ์ ์์ํด์ ์ค๋ฒ ์์ง๋๋งํ์ฌ ๊ตฌํํ๊ฒ๋๋ฉด, ์์๋ ํ์ฅ์ด ์๋ ๊ฒฝ์ฐ, ๋ ์์ข์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ์๋ ์์ด์!
|
|
44
|
+
>
|
|
45
|
+
> โ @namjackson on `src/main/kotlin/racingcar/service/RacingService.kt`
|
|
46
|
+
|
|
47
|
+
## ์ป์ ๊ตํ
|
|
48
|
+
|
|
49
|
+
- **์ถ์์ ์ด๋ฆ์ What์ด์ง How๊ฐ ์๋๋ค.** "Random"์ด๋ผ๋ ๊ตฌํ ๋จ์๊ฐ ์ธํฐํ์ด์ค๋ช
์ ๋ค์ด๊ฐ๋ ์๊ฐ, ๊ทธ ์ถ์์ ์ ์ฌ์ ๊ตฌํ ํ ๊ฐ์ง์ ์ข
์๋๋ค. `NumberGenerator`๋ผ๊ณ ๋ถ๋ฅด๋ฉด fake/random/sequential์ด ๋ชจ๋ ์์ฐ์ค๋ฝ๋ค.
|
|
50
|
+
- **๋ ์ด์ด ์ฌ์ด๋ ๋จ๋ฐฉํฅ ์์กด์ด์ด์ผ ํ๋ค.** Domain์ DTO๋ฅผ ๋ชจ๋ฅด๊ณ , DTO๋ง ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋งคํํ๋ mapper๊ฐ ๊ฒฝ๊ณ๋ฅผ ์ฑ
์์ง๋ค. ๋๋ฉ์ธ์ด DTO๋ฅผ ์๋ฉด ์ธ๋ถ ํ์์ด ๋ฐ๋ ๋๋ง๋ค ๋๋ฉ์ธ์ด ํ๋ค๋ฆฐ๋ค.
|
|
51
|
+
- **OCP๋ ์์ธก์ด ์๋๋ผ ์ ํธ์ ๋ตํ๋ค.** ํ ๊ฐ์ง ๋ณํ ๊ฐ๋ฅ์ฑ์ ๋ฏธ๋ฆฌ ์ถ์ํํ๋ ๊ฒ์ ์ข
์ข
YAGNI ์๋ฐ์ด๋ค. ์ค์ ๋ก ๋ ๋ฒ์งธ ๋ณํ์ด ๋ฑ์ฅํ ๋ ์ถ์ํํ๋ฉด, ์ถ์์ ํํ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐ์ ๋๋ค.
|
|
52
|
+
- **Fake๋ production ์ฝ๋๊ฐ ์๋๋ค.** ํ
์คํธ ํจํค์ง(`src/test/...`)์ ๋์ด์ผ production ์์กด ๊ทธ๋ํ๊ฐ ๊นจ๋ํด์ง๋ค. "์ ์ ๋๋ฉด mock ๋ผ์ด๋ธ๋ฌ๋ฆฌ"๋ผ๋ ํ์ค์ ๊ฐ์ด๋๋ ํจ๊ป ๊ธฐ์ตํ ๊ฒ.
|
|
53
|
+
- **ํ
์คํธ๊ฐ ์ข์ผ๋ฉด ๋ฏธ๋์ ์์ ๊ฐ ๋์ด๋๋ค.** ๋ณ๊ฒฝ์ ๋ซํ ์๊ณ ํ์ฅ์ ์ด๋ฆฐ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋๋ ๊ฒ๋ณด๋ค, **์ฑ
์ ๋ถ๋ฆฌ + ๋น ๋ฅธ ํ
์คํธ**๊ฐ ๋ฆฌํฉํฐ๋ง์ ์์ ๋ฅผ ๋ ๋ง์ด ๋ง๋ ๋ค.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# PR #151 โ [์๋์ฐจ ๊ฒฝ์ฃผ ๊ตฌํ] ํ ๋ฐ์ ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@tobae-time](https://github.com/tobae-time)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/151
|
|
5
|
+
- **๋จ๊ณ:** 1๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @hyemdooly
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 25
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **`Racecourse`๋ก ๋๋ฉ์ธ ๊ฐ์ฒดํ** โ ๋ ์ด์ค ์ค๋น๋ฌผ์ ๋ฐ์. ๋ฆฌ๋ทฐ์ด ์นญ์ฐฌ.
|
|
12
|
+
|
|
13
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
14
|
+
|
|
15
|
+
- **`!!` ์ฌ์ฉ** โ ๊ฒ์ฆ ํจ์๊ฐ ๋ฐ๋ก ์๋ค๊ณ ์์ฌํ์ง ๋ง ๊ฒ. ํจ์ ๋ก์ง์ด ๋ฐ๋๋ฉด NPE.
|
|
16
|
+
- **`Main.kt`๊ฐ ๋น๋** โ ์
๋ ฅ + ๊ฐ๊ณต + ๊ฒ์ฆ + ์คํ.
|
|
17
|
+
- **`Car`๊ฐ ๋๋ฌด ๋ง์ ์ผ** โ ๋๋ค ์์ฑ + ์์ง์ ํ๋จ + ์ ์ง + ๊ฒฐ๊ณผ ์ถ๋ ฅ.
|
|
18
|
+
- **`Car`์ hashCode/equals ๋๋ฉ์ธ ํ์ ์์ด ๊ตฌํ**.
|
|
19
|
+
- **`Car`๊ฐ ํ์์ฉ String ์์ฑ** โ View ์ฑ
์ ์นจํด ("-".repeat(distance) ๊ฐ์ ํ์ ํจ์).
|
|
20
|
+
- **`ApplicationTest`์ ๋ชจ๋ ํ
์คํธ** โ Main/Car/Racecourse ์ ๋ถ ํ ํ์ผ.
|
|
21
|
+
- **ํ
์คํธ๊ฐ "์ ์ง ๊ฐ๋ฅ vs ๋ถ๊ฐ" ์ผ์ด์ค ๋ถ๋ฆฌ ์ ๋จ** โ ๊ฐ๋ฐ์ ์ค์ ๊ฒ์ฆ ์ด๋ ค์.
|
|
22
|
+
- **ํ
์คํธ ์ด๋ฆ์ด ๊ฒฐ๊ณผ๋ฅผ ์ ๋๋ฌ๋**.
|
|
23
|
+
|
|
24
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
25
|
+
|
|
26
|
+
๋ฆฌ๋ทฐ์ด @hyemdooly๋ **"๊ฐ๋ฐ์ ์ค์ ๊ฒ์ฆ ๊ฐ๋ฅํ ํ
์คํธ"** ๋ผ๋ ๋ณธ์ง ์ง๋ฌธ โ "์๋์ฐจ๊ฐ ๋ฌด์กฐ๊ฑด ์ ์ง๋ง ํ๊ฑฐ๋ ๋ฌด์กฐ๊ฑด ๋ฉ์ถ๋ค๋ฉด ์ด ํ
์คํธ๊ฐ ์ก์๋ผ๊น?" ์ด ์ง๋ฌธ ํ ์ค์ด ํ
์คํธ์ ๊ฐ์น๋ฅผ ์ง๋จ.
|
|
27
|
+
|
|
28
|
+
๋ํ **`!!`์ ์ํ** โ ๊ฒ์ฆ ํจ์๊ฐ ๋ฐ๋ก ์์ด๋ ๊ทธ ๋ก์ง์ด ๋ฐ๋๋ฉด NPE. ์์ ์ฑ์ ๋ํ false sense.
|
|
29
|
+
|
|
30
|
+
**Car๊ฐ ์ก์
์ ๋๋ฌด ๋ง์ด ํจ** โ ๊ฐ์ฒด ์ฑ
์ ๋จ์ ๋ถํด ๊ฐ์ด๋.
|
|
31
|
+
|
|
32
|
+
- **๋ํ ์ธ์ฉ:**
|
|
33
|
+
> ๊ฐ๋ฐ์์ ์ค์๋ก ํ์ฌ ์ฝ๋๊ฐ ์๋์ฐจ๊ฐ ๋ฌด์กฐ๊ฑด ์ ์ง๋ง ํ๊ฑฐ๋, ๋ฉ์ถ ์ ๋ฐ์ ์๋ค๋ฉด ์ด ํ
์คํธ ์ฝ๋๋ ๊ฐ๋ฐ์์ ์ค์๋ฅผ ๊ฒ์ฆํ ์ ์๋ ํ
์คํธ ์ฝ๋์ผ๊น์?
|
|
34
|
+
>
|
|
35
|
+
> โ @hyemdooly on `src/test/kotlin/ApplicationTest.kt`
|
|
36
|
+
|
|
37
|
+
> ์ฐจ๊ฐ ์ง์ ๋๋ค ์๋ฅผ ์์ฑํ๊ณ , ์์ง์ผ ์ ์๋์ง ํ๋จํ๊ณ , ์ ์ง๋ ํ๊ณ , ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ๋ ํ๊ณ ์๋ค์! ์ก์
์ ๋ ์๊ฒ ๋๋ ๋ณผ ์ ์์๊น์?
|
|
38
|
+
>
|
|
39
|
+
> โ @hyemdooly on `src/main/kotlin/Car.kt`
|
|
40
|
+
|
|
41
|
+
> `checkRoundValid` ํจ์๋ก ๊ฒ์ฌ๋ฅผ ํ๋ฒ ํด์คฌ๋๋ผ๋, ๋ง์ฝ ์ด ํจ์์ ๋ก์ง์ด ๋ฐ๋๋ค๋ฉด `readRound`์์ Exception์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
|
|
42
|
+
>
|
|
43
|
+
> โ @hyemdooly on `src/main/kotlin/Main.kt`
|
|
44
|
+
|
|
45
|
+
## ์ป์ ๊ตํ
|
|
46
|
+
|
|
47
|
+
- **ํ
์คํธ์ ๋ณธ์ง = ์ค์ ์ก๊ธฐ.** "์ด ์ฝ๋๊ฐ ์๋์ ๋ค๋ฅด๊ฒ ๋์ํ๋ฉด ์ด ํ
์คํธ๊ฐ ์๋ ค์ฃผ๋๊ฐ?"๊ฐ ํต์ฌ ์ง๋ฌธ. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ
์คํธ๋ ๊ฒ์ฆ์ด ์๋๋ผ ๋์ด๋ฐ๋ณต.
|
|
48
|
+
- **`!!`๋ false sense of safety.** "์ด๋ฏธ ๊ฒ์ฆํ์ผ๋ ์์ "์ด๋ผ๋ ๊ฐ์ ์ ๊ทธ ๊ฒ์ฆ ๋ก์ง์ด ๋ฐ๋ ๋ ๊นจ์ง๋ค. nullable ์ฒ๋ฆฌ๋ ์ฝ๋ ์์น์์ ํญ์ ๋ช
์์ .
|
|
49
|
+
- **Car๊ฐ ๋ง์ ์ก์
= ์ฑ
์ ๋ถ๋ฐฐ ์ ํธ.** "๋๋ค + ๊ฒฐ์ + ์ด๋ + ์ถ๋ ฅ"์ด ํ ๊ฐ์ฒด๋ฉด (1) ๋จ์ ํ
์คํธ ์ด๋ ค์, (2) ๋ณ๊ฒฝ ์ํฅ ํผ, (3) Tell-Don't-Ask ๊นจ์ง. ๋จ์๋ก ๋ถ๋ฆฌ.
|
|
50
|
+
- **`"-".repeat(distance)` ๊ฐ์ ํ์ค ๋๊ตฌ.** Kotlin ํ์ค ํจ์๊ฐ ๊ฐ๋
์ฑ + ์์ .
|
|
51
|
+
- **ํ
์คํธ ํ์ผ ๋ถ๋ฆฌ = ํด๋์ค ๋ถ๋ฆฌ์ ๊ฑฐ์ธ.** Application์ ๋ชจ๋ ํ
์คํธ๊ฐ ์์ผ๋ฉด production๋ ๋ถ๋ฆฌ ์ ๋์ ๊ฐ๋ฅ์ฑ.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# PR #167 โ [์๋์ฐจ ๊ฒฝ์ฃผ 2๋จ๊ณ] ํ ๋ฐ์ ๋ฏธ์
์ ์ถํฉ๋๋ค
|
|
2
|
+
|
|
3
|
+
- **Reviewee:** [@tobae-time](https://github.com/tobae-time)
|
|
4
|
+
- **PR:** https://github.com/woowacourse/kotlin-racingcar/pull/167
|
|
5
|
+
- **๋จ๊ณ:** 2๋จ๊ณ
|
|
6
|
+
- **๋ฆฌ๋ทฐ์ด:** @hyemdooly
|
|
7
|
+
- **๋ผ์ธ ์ฝ๋ฉํธ:** 6
|
|
8
|
+
|
|
9
|
+
## ์ํ ์ (์ค๊ณ ๊ด์ )
|
|
10
|
+
|
|
11
|
+
- **์๋ชป๋ ๊ฐ ๋ฐ๋ณต ์ฒ๋ฆฌ๋ฅผ Controller๋ก** โ ๋ฆฌ๋ทฐ์ด ์นญ์ฐฌ.
|
|
12
|
+
- **InputView/OutputView ๋ถ๋ฆฌ** โ 1๋จ๊ณ์ ํตํฉ ํจํด ์ ๋ฆฌ.
|
|
13
|
+
|
|
14
|
+
## ๋ชปํ ์ (์ค๊ณ ๊ด์ )
|
|
15
|
+
|
|
16
|
+
- **`Racecourse`๊ฐ ์ถ๋ ฅ ์ฑ
์** โ View ์นจํด ์์กด.
|
|
17
|
+
- **`Controller` ๋ด๋ถ์์ InputView/OutputView ์์ฑ** โ ์ธ๋ถ ์ฃผ์
์ด ๋ ์์ฐ์ค๋ฌ์.
|
|
18
|
+
- **`dooly,hyem` ์ ์ ์
๋ ฅ์ด ์์ธ ์ฒ๋ฆฌ๋จ** โ ๊ณต๋ฐฑ/๊ธธ์ด ๊ฒ์ฆ ๋ก์ง ์ค๋ฅ.
|
|
19
|
+
- **`@get()` ์ปค์คํ
ํ๋กํผํฐ vs ํจ์ โ ํ์์ ๊ฒฐ์ ๊ธฐ์ค ๋ถ์ฌ**.
|
|
20
|
+
|
|
21
|
+
## ๋ฆฌ๋ทฐ์ด ์๊ฒฌ ์์ง
|
|
22
|
+
|
|
23
|
+
๋ฆฌ๋ทฐ์ด @hyemdooly๋ **์ธ๋ถ ์ฃผ์
์ ํตํ ์บก์ํ** โ Controller ๋ด๋ถ์์ InputView ์์ฑํ์ง ๋ง๊ณ ์ธ๋ถ์์ ๋ฐ๊ธฐ. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ธ๋ถ๊ฐ View์ ์ง์ ์ ๊ทผํ ํ์ ์๋ ๊ตฌ์กฐ.
|
|
24
|
+
|
|
25
|
+
๋ํ **๊ฒ์ฆ ์ผ์ด์ค์ ์ค์ ํ
์คํธ** โ `dooly,hyem`์ฒ๋ผ ์ ์ ์ผ์ด์ค๊ฐ ์คํจํ๋ ๋ฒ๊ทธ ๋ฐ๊ฒฌ. ์ผ์ด์ค ๋ถ๋ฆฌ ๋ถ์กฑ.
|
|
26
|
+
|
|
27
|
+
`get() ์ปค์คํ
ํ๋กํผํฐ` vs ํจ์ ์ฐจ์ด โ ํ์์ด ๊ทธ ์ฐจ์ด๋ฅผ ์ธ์งํ๊ณ ์๋์ ์ผ๋ก ์ ํํ๋ ํ๋ จ.
|
|
28
|
+
|
|
29
|
+
- **๋ํ ์ธ์ฉ:**
|
|
30
|
+
> Controller ๋ด๋ถ์์ InputView์ OutputView๋ฅผ ์์ฑํ๊ณ ์๋ค์ ๐ค ์ธ๋ถ์์ ์์ฑํ๊ณ ๋ฐ์์ฌ ์ ์์๊น์? ์ธ๋ถ์์๋ ์ด ๋ทฐ๋ค์ ์ฌ์ฉํ ์ ์๊ฒํ๋ฉด ๋ ์ข๊ฒ ์ด์!
|
|
31
|
+
>
|
|
32
|
+
> โ @hyemdooly on `src/main/kotlin/racingcar/controller/RacingCarController.kt`
|
|
33
|
+
|
|
34
|
+
> `dooly,hyem`์ ๊ฐ์ด ์
๋ ฅํ๋ฉด ์ ์์ผ์ด์ค์ธ๋ฐ `์๋์ฐจ ์ด๋ฆ์ 5์๋ฅผ ์ด๊ณผํ๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ์ ์์ต๋๋ค. ๋ค์ ์
๋ ฅํด์ฃผ์ธ์.`๋ผ๋ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ผ์.
|
|
35
|
+
>
|
|
36
|
+
> โ @hyemdooly on `src/main/kotlin/racingcar/view/InputView.kt`
|
|
37
|
+
|
|
38
|
+
## ์ป์ ๊ตํ
|
|
39
|
+
|
|
40
|
+
- **๊ฒ์ฆ ๋ก์ง์ ์ค์ ํ
์คํธ.** ์ ์ ์ผ์ด์ค๊ฐ ์คํจํ๋ ๋ฒ๊ทธ๋ ๊ฒ์ฆ ๋ก์ง์ ๋จ์ ํ
์คํธ ๋ถ์กฑ ์ ํธ. ๋๋ฉ์ธ invariants๋ฅผ production ์ฝ๋์ ํ
์คํธ๊ฐ ๊ฐ์ด ํฉ์ํด์ผ.
|
|
41
|
+
- **์ธ๋ถ ์ฃผ์
์ ๋ ๊ฐ์ง ํจ๊ณผ.** (1) ํ
์คํธ์์ ํ์ดํฌ ์ฃผ์
, (2) ์ธ๋ถ๊ฐ ๊ทธ ๊ฐ์ฒด์ ์ง์ ์ ๊ทผํ์ง ์๋ ์บก์ํ. ํ์๊ฐ ์ข
์ข
๊ฐ๊ณผ๋จ.
|
|
42
|
+
- **`get() {}` vs ํจ์์ ์ฐจ์ด.** ํ๋กํผํฐ๋ ๋ฐ์ดํฐ ์ ๊ทผ, ํจ์๋ ํ์. `winners`๊ฐ ์ปฌ๋ ์
๋ฐํ = ์ํ ๊ฐ์ง๋ง ๋งค๋ฒ ๊ณ์ฐ์ด๋ผ๋ฉด ํจ์๊ฐ ๋ ๋ช
ํ.
|
|
43
|
+
- **์ด์ ๋ผ์ด๋์ ํก์ ์ ๋.** 1๋จ๊ณ ์ฝ๋ฉํธ๊ฐ ์ผ๋ถ ๊ทธ๋๋ก ์ฌ๋ฑ์ฅ (Racecourse ์ถ๋ ฅ ๋ฑ) โ ํ์ต์ด ๋ถ๋ถ์ ์ด๋ผ๋ ์ ํธ.
|