Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[holee] typescript-racingcar #1

Open
wants to merge 35 commits into
base: main
Choose a base branch
from

Conversation

hochan222
Copy link
Member

@hochan222 hochan222 commented Jun 2, 2021

πŸš— μžλ™μ°¨ κ²½μ£Ό κ²Œμž„ (typescript-racingcar)

κ΅¬ν˜„ 사항

κ΅¬ν˜„ 사항

디렉토리 ꡬ쑰

.
β”œβ”€β”€ LICENSE
β”œβ”€β”€ README.md
β”œβ”€β”€ cypress
β”‚Β Β  β”œβ”€β”€ fixtures
β”‚Β Β  β”‚Β Β  └── example.json
β”‚Β Β  β”œβ”€β”€ integration
β”‚Β Β  β”‚Β Β  └── racingcar.spec.js
β”‚Β Β  β”œβ”€β”€ plugins
β”‚Β Β  β”‚Β Β  └── index.js
β”‚Β Β  └── support
β”‚Β Β      β”œβ”€β”€ commands.js
β”‚Β Β      └── index.js
β”œβ”€β”€ cypress.json
β”œβ”€β”€ dist
β”‚Β Β  β”œβ”€β”€ css
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.css
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ shared
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ button.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ layout.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ sizing.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── typhography.css
β”‚Β Β  β”‚Β Β  └── ui
β”‚Β Β  β”‚Β Β      └── spinner.css
β”‚Β Β  └── js
β”‚Β Β      β”œβ”€β”€ index.js
β”‚Β Β      └── modules
β”‚Β Β          β”œβ”€β”€ @share
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ constants.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ controller.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ dom-dataset.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ init.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ message.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ spinner.js
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ utils.js
β”‚Β Β          β”‚Β Β  └── view.js
β”‚Β Β          β”œβ”€β”€ CarName.js
β”‚Β Β          β”œβ”€β”€ CarNameComponent.js
β”‚Β Β          β”œβ”€β”€ Game.js
β”‚Β Β          β”œβ”€β”€ Race.js
β”‚Β Β          β”œβ”€β”€ Winner.js
β”‚Β Β          └── utils.js
β”œβ”€β”€ docs
β”‚Β Β  └── README.md
β”œβ”€β”€ index.html
β”œβ”€β”€ package.json
β”œβ”€β”€ src
β”‚Β Β  └── js
β”‚Β Β      β”œβ”€β”€ index.ts
β”‚Β Β      └── modules
β”‚Β Β          β”œβ”€β”€ @share
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ constants.ts
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ controller.ts
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ dom-dataset.ts
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ init.ts
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ spinner.ts
β”‚Β Β          β”‚Β Β  β”œβ”€β”€ utils.ts
β”‚Β Β          β”‚Β Β  └── view.ts
β”‚Β Β          β”œβ”€β”€ CarName.ts
β”‚Β Β          β”œβ”€β”€ Game.ts
β”‚Β Β          β”œβ”€β”€ Race.ts
β”‚Β Β          └── Winner.ts
β”œβ”€β”€ tsconfig.json
└── yarn.lock

μ»΄ν¬λ„ŒνŠΈ

μ»΄ν¬λ„ŒνŠΈ λ°©μ‹μœΌλ‘œ λ¬Έμ œμ— μ ‘κ·Όν–ˆμŠ΅λ‹ˆλ‹€. λ³΅μž‘ν•œ 문제λ₯Ό μž‘μ€ λ‹¨μœ„μ˜ 문제둜 λΆ„λ¦¬ν•˜μ—¬ λ‹¨μˆœν™” μ‹œμΌœμ„œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”κ²Œ 큰 μž₯점이라고 μƒκ°ν•©λ‹ˆλ‹€.

  • μ»΄ν¬λ„ŒνŠΈ μ•ˆμ— render, controller, init ꡬ쑰 쑴재.

  • Game μ»΄ν¬λ„ŒνŠΈ: κΈ°λ³Έ 화면을 λ Œλ”λ§ν•˜κ³ , 이벀트 등둝 및 μžμ‹ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • CarName μ»΄ν¬λ„ŒνŠΈ: Game으둜 λΆ€ν„° 전달받은 μžλ™μ°¨ 이름을 κ²€μ¦ν•˜κ³  νŒŒμ‹±ν•˜μ—¬, 화면에 λ Œλ”λ§ν•©λ‹ˆλ‹€.
  • Race μ»΄ν¬λ„ŒνŠΈ: Game으둜 λΆ€ν„° 전달받은 횟수λ₯Ό κ²€μ¦ν•˜κ³  κ²½μ£Ό ν˜„ν™©μ„ λ Œλ”λ§ν•©λ‹ˆλ‹€.
  • Winner μ»΄ν¬λ„ŒνŠΈ: 전체 μžλ™μ°¨ μ€‘μ—μ„œ 우승자λ₯Ό μ°Ύμ•„μ„œ λ‹€μ‹œν•˜κΈ° λ²„νŠΌκ³Ό 같이 λ Œλ”λ§ν•˜κ³ , alertλ₯Ό 2초 후에 좜λ ₯ν•©λ‹ˆλ‹€.

cypress

λ¨Όμ € μˆ˜μ •μ΄ μžˆμ„ λ•Œλ§ˆλ‹€, μˆ˜λ™μœΌλ‘œ ν™•μΈν•˜μ§€μ•Šκ³  μžλ™μœΌλ‘œ κ²€μ‚¬ν•΄μ€€λ‹€λŠ” 점이 λ„ˆλ¬΄ νŽΈν–ˆμŠ΅λ‹ˆλ‹€.

BDDλ°©μ‹μœΌλ‘œ κΈ°λŠ₯ κ΅¬ν˜„μ„ ν•˜κΈ°μ „μ— ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆλŠ”λ°, Given, When, Then 으둜 μž‘μ„±ν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. λ™μž‘μ„ μ€‘μ‹¬μœΌλ‘œ λ¨Όμ € 정해놓고 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ—, ν•œλ²ˆ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ λ†“μœΌλ©΄ 좔가적인 생각없이 정해진 λ²”μœ„ μ•ˆμ—μ„œ ν•„μš”ν•œ κΈ°λŠ₯만 λ§Œλ“œλŠ”κ²Œ 큰 μž₯점이라고 μƒκ°ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ... 쉽지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.. μž‘μ„±ν•˜λ©΄μ„œ 어렀움이 μžˆμ—ˆλŠ”λ°, cypressλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ λ‹€μŒκ³Ό 같은 어렀움이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  • 문법에 μ΅μˆ™ν•˜μ§€ μ•Šμ•˜λ‹€.
  • 처음 λΆ€ν„° λ„ˆλ¬΄ μ„ΈλΆ€μ μœΌλ‘œ λ‚˜λˆ„λ €λ‹€λ³΄λ‹ˆ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ”λ° μ‹œκ°„μ΄ 였래 κ±Έλ Έλ‹€.

cypress 문법을 λͺ°λΌμ„œ λ°˜λ‚˜μ ˆμ„ κ³΅μ‹λ¬Έμ„œλ₯Ό 보며 μ½”λ“œ μž‘μ„± μ‹œμž‘μ‘°μ°¨ λͺ»ν–ˆλŠ”데 이건 κ²½ν—˜μ΄ μŒ“μ΄λ©΄ 해결될 문제라 μƒκ°ν•©λ‹ˆλ‹€. κ²°κ΅­ ν…ŒμŠ€νŠΈμ½”λ“œλ₯Ό λͺ°μ•„μ„œ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.. 또, λ„ˆλ¬΄ μ„ΈλΆ€μ μœΌλ‘œ μ ‘κ·Όν•΄μ„œ λ°©ν–₯성을 μžƒμ—ˆλŠ”λ°, μ•žμœΌλ‘œλŠ” describe('racing-game base behavior'... 와 같이 전체 큰 주제λ₯Ό 정해놓고 it('μžλ™μ°¨ 이름 μž…λ ₯ ν–ˆμ„ λ•Œ, car name input/button λΉ„ν™œμ„±ν™”' 와 같이 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šκ³  ν–‰λ™λ§Œ μ •μ˜λ§Œν•œ λ‹€μŒ ν•˜λ‚˜μ”© ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± ν›„ μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄ 전체 μ£ΌκΈ°λ₯Ό 쀄일 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 쒋은 κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

κ³ λ―Ό

  1. μ•„λž˜μ™€ 같은 DOMμš”μ†ŒλŠ” HTMLInputElement | null을 λ°˜ν™˜ν•  수 μžˆλŠ”λ°, DOM μš”μ†Œλ₯Ό κ°€μ Έμ˜¬λ•Œ λ‹€μŒκ³Ό 같이 κ°•μ œν˜•λ³€ν™˜μ„ ν–ˆμŠ΅λ‹ˆλ‹€. DOM을 μ‘°μž‘ν•˜λ‹€λ³΄λ©΄ null을 λ°˜ν™˜ν•  κ²½μš°λ„ 생길 수 μžˆμ–΄μ„œ μœ„ν—˜ν•΄λ³΄μž…λ‹ˆλ‹€. if 문으둜 if(carNamesInput) null 체크λ₯Ό ν•΄μ£ΌλŠ” νŒ¨ν„΄λ„ μžˆλŠ”λ° μ–΄λ–€ νŒ¨ν„΄μ΄ 쒋은 μΌ€μ΄μŠ€μΈμ§€ κ³ λ―Όλ©λ‹ˆλ‹€.
const carNamesInput: HTMLInputElement = $('input[type="text"]') as HTMLInputElement;

  1. 큰 규λͺ¨μ˜ μ•±μ—μ„œ νŽ˜μ΄μ§€λ³„λ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‚˜λˆˆλ‹€κ³  ν–ˆμ„λ•Œ, 각각의 νŽ˜μ΄μ§€ λ³„λ‘œ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ°–κ²Œλ©λ‹ˆλ‹€. μ΄λ•Œ ν•˜λ‚˜μ˜ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ μ—¬λŸ¬ νŽ˜μ΄μ§€μ— μ“°μΈλ‹€κ³ ν•˜λ©΄, λ”°λ‘œ util νŒŒμΌμ„ λ§Œλ“€μ–΄μ•Όν• μ§€ μ€‘λ³΅λ˜λ”λΌλ„ νŽ˜μ΄μ§€λ³„λ‘œ 쀑볡 μ½”λ“œλ₯Ό μž‘μ„±ν• μ§€ 고민이 λ©λ‹ˆλ‹€.

view, controller 및 메세지 λ‹€λ₯Έ 파일둜 뢄리
@hochan222 hochan222 changed the title [holee] javascript-racingcar [holee] typescript-racingcar Jun 7, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant