
๐ป I wanna go to a dance party.
Subclass Dance Party ๊ณผ์ ์๋ฃDOM๊ณผ CSS๋ฅผ ์ฐ์ตํ ์ ์์๋ค.
lineUp() ๋ฉ์๋๋ฅผ ํตํด Dancer instance๋ค์ ์์น๋ฅผ ์ผ๋ ฌ๋ก ๋ง๋ค์ด ์ค์ ์ธ์ ๋ค. (CSS ์์ฑ์ DOM์ผ๋ก ์กฐ์ํ๋ค)
ํ์ด ๋ถ๊ณผ ๋ฏธ๋์ ๋ํ ๊น์ด ์๋ ์ด์ผ๊ธฐ๋ฅผ ๋ง์ด ๋๋ด๋ค. ์๋ก ์ข์ ์ ๋ณด๋ ๊ณต์ ํ๋ค. ์๋ก๊ฐ ์์ฐ์ ์ด๊ณ ๊ฑด์ค์ ์ธ ์ด์ผ๊ธฐ๋ผ๋ฉฐ ์ ์ด ๋์ ๋ ๋ค์๋ค. ์ด๋ฐ ์๊ธฐ๋ ์ ๋ง ์ฌ๋ฐ๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฐ ์๊ธฐ๋ฅผ ๋๋ ์ ์๋ ํ์ด๊ฐ ์์ด์ ์ข๋ค.
๊ณผ์ ๋ฅผ ์ํํ๋ฉด์ ๋๋ฌด์ง ๋์๋ค์ด ๊น๋นก์ด์ง ์์์ ์ ๋ง angry, irritation ํ๊ณ upset ํ๋ค. ๊ทธ๋ฐ๋ฐ ์ญ์ ๋ฑ์ ๋ฐ์ด ์ด๋์ ๋ค. ๊น๋นก์ด๋ ํจ๊ณผ๋ฅผ ๋ํ๋ด๋ step() ๋ฉ์๋ ์์ ๋ฌธ์ ๊ฐ ์์๋ค. ๊ทธ๊ฒ์ ๋ค๋ฆ ์๋ setTimeout...
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด bind๋ฅผ ์ด์ฉํด this ๊ฐ์ ๋๊ฒจ์ฃผ์๋ค. ํ์ดํ ํจ์๋ก๋ ๊ฐ๋ฅํ๋ค. ๋ค์๋ถํฐ ์กฐ์ฌํ์ this...!!!
setTimeout(this.step.bind(this), this.timeBetweenSteps);
setTimeout(() => {
this.step();
}, this.timeBetweenSteps);

์, ์ฌ์ง์ ๋ณด๋ฉด 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) ๋ณ์์ ๋ํด ์ดํดํ ์ ์์๊ณ , ์ธ์งํ ์ ์์๋ค.