[20/10/30] - TIL | Subclass Dance Party & TOY Problem 1

NOWANDHEREยท2020๋…„ 10์›” 30์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
38/53
post-thumbnail

10์›” 30์ผ (๊ธˆ)

๐ŸŒป I wanna go to a dance party.


์˜ค๋Š˜ ํ•œ ์ผ

  • Subclass Dance Party ๊ณผ์ œ ์™„๋ฃŒ
    • ๋‹คํ˜•์„ฑ(polymorphism)์˜ ํŠน์ง•์„ ์ฝ”๋“œ๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์˜€๊ณ , DOM๊ณผ CSS๋ฅผ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

  • lineUp() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด Dancer instance๋“ค์˜ ์œ„์น˜๋ฅผ ์ผ๋ ฌ๋กœ ๋งŒ๋“ค์–ด ์ค„์„ ์„ธ์› ๋‹ค. (CSS ์†์„ฑ์„ DOM์œผ๋กœ ์กฐ์ž‘ํ–ˆ๋‹ค)

  • Toy Problem 1 ๋ฌธ์ œ ํ’€์ด
    • ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์™„์ „ ํƒ์ƒ‰ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋Š๋‚€ ์ 

  • ํŽ˜์–ด ๋ถ„๊ณผ ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋งŽ์ด ๋‚˜๋ˆด๋‹ค. ์„œ๋กœ ์ข‹์€ ์ •๋ณด๋„ ๊ณต์œ ํ–ˆ๋‹ค. ์„œ๋กœ๊ฐ€ ์ƒ์‚ฐ์ ์ด๊ณ  ๊ฑด์„ค์ ์ธ ์ด์•ผ๊ธฐ๋ผ๋ฉฐ ์‹ ์ด ๋‚˜์„œ ๋– ๋“ค์—ˆ๋‹ค. ์ด๋Ÿฐ ์–˜๊ธฐ๋Š” ์ •๋ง ์žฌ๋ฐŒ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋Ÿฐ ์–˜๊ธฐ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ํŽ˜์–ด๊ฐ€ ์žˆ์–ด์„œ ์ข‹๋‹ค.

  • ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ๋„๋ฌด์ง€ ๋Œ„์„œ๋“ค์ด ๊นœ๋นก์ด์ง€ ์•Š์•„์„œ ์ •๋ง angry, irritation ํ•˜๊ณ  upset ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ญ์‹œ ๋“ฑ์ž” ๋ฐ‘์ด ์–ด๋‘์› ๋‹ค. ๊นœ๋นก์ด๋Š” ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” step() ๋ฉ”์†Œ๋“œ ์•ˆ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‹ค๋ฆ„ ์•„๋‹Œ setTimeout...

    • setTimeout์€ ์‹œ๊ฐ„ ์ง€์—ฐ์„ ์ผ์œผํ‚จ ํ›„ ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ํ•จ์ˆ˜์ธ๋ฐ, ๋ช…์‹œ์ ์œผ๋กœ ํ•ญ์ƒ window ๊ฐ์ฒด๋ฅผ this ๋ฐ”์ธ๋”ฉํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นŒ๋งฃ๊ฒŒ ์žŠ๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.
  • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด bind๋ฅผ ์ด์šฉํ•ด this ๊ฐ’์„ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค์Œ๋ถ€ํ„ฐ ์กฐ์‹ฌํ•˜์ž this...!!!

setTimeout(this.step.bind(this), this.timeBetweenSteps);

setTimeout(() => {
  this.step();
}, this.timeBetweenSteps);

  • Toy Problem 1์—์„œ๋„ ์—„์ฒญ๋‚œ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์—ˆ๋‹ค. ํ•จ์ˆ˜ ๋ฐ–์—์„œ ๋งŒ๋“  ๋ฐฐ์—ด(arr)์„ ์žฌ๊ท€ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ˆ˜์ •ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด(newArr)์— ๊ณ„์† pushํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ์ƒˆ๋กœ์šด ๋ฐฐ์—ด(newArr)์„ ๋ฆฌํ„ดํ•˜๋Š” ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ๋ฆฌํ„ด๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด(newArr)์—๋Š” ๋งˆ์ง€๋ง‰์— push๋œ ๋ฐฐ์—ด(arr)๋งŒ ์˜จํ†ต ๋“ค์–ด์žˆ์—ˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ฐธ์œผ๋กœ ์–ด์ฒ˜๊ตฌ๋‹ˆ ์—†๋Š” ์‹ค์ˆ˜์˜€๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋‚ด ์‹ค์ˆ˜๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ž, ์‚ฌ์ง„์„ ๋ณด๋ฉด func() ํ•จ์ˆ˜์—์„œ newArr์— arr์„ pushํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  arr์˜ ๋งจ ๋’ค์—์„œ 4๋ฅผ ํ•˜๋‚˜ popํ•˜๊ณ , 5๋ฅผ pushํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  newArr์„ returnํ•˜๋ฉด? ๋‚œ [1, 2, 3, 4]๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ์ฐธ์œผ๋กœ foolish ํ•˜๋‹ค.

arr์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ ์–ด๋”˜๊ฐ€์— ์žˆ์„ [1, 2, 3, 4]์˜ ์ฃผ์†Œ๊ฐ’(์œ„์น˜)์ด ๋‹ด๊ฒจ์žˆ๋‹ค. arr์—๋Š” [1, 2, 3, 4]๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค! arr์€ ์›์‹œ ํƒ€์ž… ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค! ๊ทธ๋ ‡๋‹ค๋ฉด pop()๊ณผ push(5)๋ฅผ ํ•œ ํ›„์—๋„ arr์— ๋‹ด๊ฒจ ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋ดค์„ ๋•Œ ๊ทธ๊ณณ์— ์žˆ๋Š” ๋ฐฐ์—ด, ์ฆ‰ [1, 2, 3, 4] ์•ˆ์˜ ๊ฐ’์€ [1, 2, 3, 5]๋กœ ๋ฐ”๋€Œ์—ˆ์ง€๋งŒ arr์ด ๋‹ด๊ณ  ์žˆ๋Š” ๊ทธ ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’์€ ๋™์ผํ•˜๋‹ค. ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค!

๊ฒฐ๊ตญ, newArr[0]์—๋„ ์ฃผ์†Œ๊ฐ’์ด ๋‹ด๊ธฐ๋Š” ๊ฒƒ์ด๊ณ , newArr[0]์—๋Š” arr์ด๋ผ๋Š” ๊ฐ’์ด ์žˆ๊ณ , arr์— ๋‹ด๊ธด ๊ฐ’์„ ๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด [1, 2, 3, 5]๋ผ๋Š” ๋ฐฐ์—ด์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค!

๋งŒ์•ฝ pop()๊ณผ push(5) ๋Œ€์‹ ์— arr = [1, 2, 3, 5] ๋ผ๊ณ  ํ•˜๊ณ  answer์„ ํ™•์ธํ•˜๋ฉด [1, 2, 3, 4]๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค. ๋ถ„๋ช… ์•Œ๊ณ  ์žˆ์—ˆ๋˜ ๋‚ด์šฉ์ธ๋ฐ ๋จธ๋ฆฌ๋ฅผ ์Ž„๊ฒŒ ํ•œ ๋Œ€ ๋งž์€ ๊ธฐ๋ถ„์ด์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ arr์„ ๊ทธ๋ƒฅ push ํ•˜์ง€ ์•Š๊ณ , Spread Syntex๋ฅผ ํ†ตํ•ด const copyArr = [...arr]์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด push ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ด๋ฒˆ ์ผ์„ ๊ณ„๊ธฐ๋กœ ์ข€ ๋” ํ™•์‹คํ•˜๊ฒŒ ์ฐธ์กฐ ํƒ€์ž…(Reference Type) ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ธ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


๋‚ด์ผ ํ•  ์ผ

  • Data Structure ๋ณต์Šต ๋ฐ ๋ธ”๋กœ๊น…
  • OOP(Object Oriented Programming) ๋ณต์Šต ๋ฐ ๋ธ”๋กœ๊น…
profile
๐ŸŒป

0๊ฐœ์˜ ๋Œ“๊ธ€