CH1 ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ๊ณผ ๋ชจ๋ธ
1.2 ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด
1.2.1 ๋ณ์ ์ ์ธ๊ณผ ์ด๊ธฐํ ~ 1.2.5 ํจ์
์ด์ ์ค์ ๋ถํฐ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ๋ค์ ์์ํ๊ณ ๊นํ์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ฝ๋๋ฅผ ์ฌ๋ ธ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์์ ํจ์ ์์ ์ฝ๋๊น์ง ๋ฐ๋ผ ์ณค๋๋ฐ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ํฌ๊ฒ ๋ค๋ฅธ ์ ์ ์๋ค. switch๋ฌธ์ ํ
์คํธ ๋์ ํํ์์์ ๋ชจ๋ ๋ฐ์ดํฐํ์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด ๋ค๋ฅธ๋ฐ switch๋ฌธ ์์ฒด๊ฐ ํจ์จ์ ์ด์ง๋ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํจ์์ ํ๋ผ๋ฏธํฐ๋ ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ฉฐ ๋ ํผ๋ฐ์ค ์ ์ฉ ํ๋ผ๋ฏธํฐ๋ ์๋ค.(์ฒ์์๋ ํ์คํ ์ดํด๊ฐ ๊ฐ์ง ์์ ๋ถ๋ถ) ํ์ง๋ง ๋ฐฐ์ด์ฒ๋ผ ๊ฐ์ฒด ๋ ํผ๋ฐ์ค๋ฅผ ํจ์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ ๋๋ ๋ ํผ๋ฐ์ค๋ก ์ ๋ฌ๋๋ค.
๋ฒ์ญํ์ด๋ผ์ ๊ทธ๋ฐ ๊ฑด์ง ์ด๋ค ์๋ฏธ์ธ์ง ๋ช
ํํ ์ดํด๊ฐ ์ ๋์ง ์์์ ๋ ์์ธํ ์ฐพ์๋ณด์๋ค. ๋ ํผ๋ฐ์ค ์ ์ฉ ํ๋ผ๋ฏธํฐ๋ผ๋ ์ง ๊ฐ์ฒด ๋ ํผ๋ฐ์ค๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์์๋ณด์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ ํ์
(number, string, boolean, null, undefined)์ ์ ์ธํ ๋ชจ๋ ๊ฐ์ด '๊ฐ์ฒด'์ด๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด, ํจ์, ์ ๊ทํํ์ ๋ฑ์ ๋ชจ๋ ๊ฐ์ฒด๋ก ํํ๋๋ค. ์ด๊ฒ์ย ๊ฐ์ฒด์ ๋ชจ๋ ์ฐ์ฐ์ด ์ค์ ๊ฐ์ด ์๋ ์ฐธ์กฐ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ด๋ค.(์ฌ๊ธฐ์๋ ์ด ๋ง์ง๋ง ๋ฌธ์ฅ์ด ์์ ๋ฌธ์ฅ๊ณผ ์ด๋ค ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ค๋ ๊ฒ์ธ์ง ์ดํด๋์ง ์์๋ค.)
"๊ธฐ๋ณธ ํ์
๊ณผ ์ฐธ์กฐ ํ์
์ ๊ฒฝ์ฐ๋ ํจ์ ํธ์ถ ๋ฐฉ์๋ ๋ค๋ฅด๋ค. ๊ธฐ๋ณธ ํ์
์ย ๊ฐ์ ์ํ ํธ์ถ (Call By Value)๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ํจ์์ ์ธ์๋ก ๊ธฐ๋ณธ ํ์
์ด ๋๊ฒจ์ง ๊ฒฝ์ฐ, ํจ์์ ๋งค๊ฐ๋ณ์๋กย ๋ณต์ฌ๋ ๊ฐ์ด ์ ๋ฌ๋๋ค. ๋ฐ๋ผ์, ํจ์ ๋ด๋ถ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ด์ฉํด ๊ฐ์ ๋ณ๊ฒฝํด๋, ์ค์ ๋ก ํธ์ถ๋ ๋ณ์์ ๊ฐ์ด ์ ์์ ์ฒ๋ผ 100์์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.๋ฐ๋ฉด ๊ฐ์ฒด์ ๊ฐ์ ์ฐธ์กฐ ํ์
์ ๊ฒฝ์ฐ, ํจ์๋ฅผ ํธ์ถํ ๋ย ์ฐธ์กฐ์ ์ํ ํธ์ถ( Call By Reference ) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ฆ, ํจ์๋ฅผ ํธ์ถํ ๋, ๊ฐ์ฒด์ย ์ฐธ์กฐ๊ฐ์ด ์ ๋ฌ๋๊ณ , ํจ์ ๋ด๋ถ์์ ์ฐธ์กฐ๊ฐ์ ์ด์ฉํด์ ์ธ์๋ก ๋๊ธด ์ค์ ๊ฐ์ฒด์ ๊ฐ์ 200์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค."
์ด์ฒ๋ผ call by value, call by reference ๋ฐฉ์์ ๋ํด์๋ ๋ง์ด ๋ค์๊ธฐ ๋๋ฌธ์ ์๊ณ ์์๋ค.
๊ธฐ๋ณธ ํ์
์ ๊ฐ์ ํจ์์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ์์ ๋ ๊ทธ ํ๋ผ๋ฏธํฐ์ ์ด๋ค ๋ค๋ฅธ ๊ฐ์ ํ ๋นํ๋๋ผ๋ ๊ทธ ํจ์ ๋ด์์๋ง ์ํฅ์ด ์๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ฐ์ฒด์ ๊ฐ์ ์ฐธ์กฐ ํ์
์ ํ๋ผ๋ฏธํฐ๋ฅผ ํจ์๋ก ๋๊ฒจ ์ฃผ์์ ๊ฒฝ์ฐ์๋ ํจ์ ์์์ ๊ฐ์ฒด์ ์์ฑ๊ฐ๋ค์ ๋ณ๊ฒฝํ ์ ์๊ณ ํจ์๊ฐ ์ข
๋ฃ๋๋๋ผ๋ ์๋ ๋ฐ์ดํฐ์ ์ํฅ์ ๋ฏธ์น๋ค.
ํ์ง๋ง ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ์์ฑํด ๊ฐ ์์ฒด๋ฅผ ์๋ก ํ ๋นํด์ ๋ณ๊ฒฝํ ์๋ ์๋ค.(์ด ๋ง์ง๋ง ๋ฌธ์ฅ์ ๋ํด์ ์ดํด๊ฐ ์ ๋์ง ์๋๋ค.)
์ ๋ธ๋ก๊ทธ์์ ์ด์ ๋ํ ์์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ์ ๊ณตํด์ฃผ์๋ค.
๋ฐฐ์ด์ด๋ ๊ฐ์ฒดํ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํด์ฃผ์ง๋ง ์์ฑ๊ฐ์ด ์๋๋ผ ๊ทธ ๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋๋ ์ด๋ป๊ฒ ๋ ๊น?
๋ณ๊ฒฝ์ด ๋์ง ์๋๋ค! (์๋ฐ์ ๊ฐ์ ๊ฒฐ๊ณผ์ด๋ค.)
์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ํญ์ Call by value์ด๋ฉฐย ๊ฐ์ฒด๋ ๋ฐฐ์ด ๊ฐ์ Referenceํ ํ์
์ด ๊ฒฝ์ฐ์๋ ์ค์ ๋ก๋ ๊ทธ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด value๋ก function์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋์ function์ผ๋ก ๋๊ฒจ ๋ฐ์ ํ๋ผ๋ฏธํฐ ์์ ์๋ ์์ฑ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ด๋ ์๊ธฐ ์์ ์ ๊ฐ์ ์ด๊ธฐํํด์ ๋ค์ ์๋ก์ด ๊ฐ์ผ๋ก ํ ๋นํ ์ ์๋ ๊ฒ์ด๋ค.
๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด ํจ์๋ก ๋ณด๋ด์ง๋ ํ๋ผ๋ฏธํฐ๊ฐ a๋ผ๋ ๊ฐ์ฒด๋ผ๋ฉด ํ๋ผ๋ฏธํฐ๋ ๊ทธ a๋ผ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ ๋ํ ๋ณต์ฌ๋ณธ(Call by value์ ์ํด)์ธ ๊ฒ์ด๋ค.
๋ง์ฝ ํจ์ ๋ด์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ ์์ฒด๋ฅผ ์ฌํ ๋นํ๋ ค๊ณ ํ๋ฉด ์๋ ๊ฐ์ฒด a๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ ๊ฒ์ด ๋ค๋ฅธ ์ฐธ์กฐ๊ฐ์ ๊ฐ๊ฒ ๋๋ค. ์ฐธ์กฐ๊ฐ ์์ฒด๋ฅผ ์ฌํ ๋นํ๊ฒ ๋๋ ๊ฒ์ด๋ค. ์์ฑ๊ฐ์ ์ ๊ทผํด์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด a๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ฑ๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค. ์ด๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์ด์ ๊ฐ๋ค.
a๋ผ๋ ๋ณ์๊ฐ ๊ฐ์ง ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ๊ณผ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ค์ ๊ฐ
ํจ์์ b๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋๋ ๊ฐ์ฒด a์ b๊ฐ ๊ฐ์ง a์๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ(๊ฐ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ)
b์ "=" ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ๊ฐ์ ํ ๋นํ๊ฒ ๋๋ฉด ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ด ์ฌ๋ผ์ง๊ณ ์๋ก์ด ์ฐธ์กฐ๊ฐ์ 1์ ํ ๋นํ๊ฒ ๋๋ค.
210429 ๋ชฉ์์ผ
๋ธ๋ก๊ทธ ๊ธ์ ์์ฑํ๋ฉด์ 1์ผ์ฐจ ๋ณต์ต์ ์๋ฃํ๊ณ 1.2.6 ๋ณ์ ๋ฒ์๋ถํฐ 2์ผ์ฐจ ๊ณต๋ถ๋ฅผ ์์ํ๋ค.
1.2 ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด
1.2.6 ๋ณ์ ๋ฒ์
๋ณ์์ ๋ฒ์๋ ์ด๋ ์์น์์ ๋ณ์๋ฅผ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ์๋ฏธํ๋ค.ย ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์ ๋ฒ์๋ก ์ ์๋๋ค. ํจ์ ๋ฒ์๋ ๋ณ์๊ฐ ์ ์ธ๋๊ณ ์ ์๋ ํจ์ ๋ด์์ ์์ ๋กญ๊ฒ ๋ณ์์ ๊ฐ์ ์ ๊ทผํ ์ ์์์ ๋ปํ๋ค.
ํจ์์ ์ธ๋ถ์์ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ ์ญ ๋ฒ์๋ฅผ ๊ฐ๋๋ค. ์ด๋์๋ ์ ๊ทผํ ์ ์๋ค.
์ด๋ฌํ ๋ด์ฉ์ ๊ธฐ์กด์ ์๋ ๋ด์ฉ๊ณผ ๊ฐ์๋ค.
๋ณ์ ์ ์์์ var ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ํฉ์ 180๋ ๋ฌ๋ผ์ง๋ค. var ํค์๋ ์์ด ๋ณ์๋ฅผ ์ ์ธํ๋ฉด(ํจ์ ๋ด์ ์ ์ธํ๋ค ํ ์ง๋ผ๋) ๊ทธ ๋ณ์๋ ์๋์ผ๋ก ์ ์ญ ๋ฒ์๋ฅผ ๊ฐ๋๋ค.
ํจ์์์ ์ ์ธํ scope ๋ณ์์ var ํค์๋๊ฐ ์๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ฉ์ธ ํ๋ก๊ทธ๋จ์ ์ ์ญ ๋ณ์ scope์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ค.ย ๋ฐ๋ผ์ ์ด๋ฐ ํผ๋์ ํผํ๊ธฐ ์ํด์ ํญ์ var ํค์๋๋ฅผ ์ฌ์ฉํด ๋ณ์๋ฅผ ์ ์ํด์ผ ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํจ์ ๋ฒ์๋ฅผ ๊ฐ๋๋ค๊ณ ํ๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ธ๋ก ๋ฒ์๋ฅผ ์ง์ํ์ง ์์์ ์๋ฏธํ๋ค.(์ด๊ฒ์ c++, ์๋ฐ ๋ฑ์์ ์ ํด๋ณด์๋ค.)
๊ทธ๋ฐ๋ฐ ES6(ES2015)์์ย ย let์ด ์ง์๋๋ฉด์ ๋ธ๋ก ๋ฒ์์ ๋ณ์๊ฐ ๊ฐ๋ฅํด์ก๋ค.
"let์ย ๋ณ์๊ฐ ์ ์ธ๋ ๋ธ๋ก, ๊ตฌ๋ฌธ ๋๋ ํํ์ ๋ด์์๋ง ์ ํจํ ๋ณ์๋ฅผ ์ ์ธํ๋ค. ์ด๋ย varย ํค์๋๊ฐ ๋ธ๋ก ๋ฒ์๋ฅผ ๋ฌด์ํ๊ณ ์ ์ญ ๋ณ์๋ ํจ์ ์ง์ญ ๋ณ์๋ก ์ ์ธ๋๋ ๊ฒ๊ณผ ๋ค๋ฅธ ์ ์ด๋ค."
๋ํ let์ var์ ๋ฌ๋ฆฌ ์ฌํ ๋น ๋ฌธ์ ๋ ํด๊ฒฐํด์ค๋ค.
๊ทธ ๋ฐ์๋ var์ ํธ์ด์คํ
์ด ์ง์๋๋ค. ํธ์ด์คํ
์ด๋
๋ณ์์ ์ ์๊ฐ ๊ทธ ๋ฒ์์ ๋ฐ๋ผ ์ ์ธ๊ณผ ํ ๋น์ผ๋ก ๋ถ๋ฆฌ๋๋ ๊ฒ์ ๋ปํ๋ค.
๋ณ์๊ฐ ํจ์ ๋ด์์ ์ ์๋ ๊ฒฝ์ฐ๋ ์ ์ธ์ด ํจ์์ ์ต์์๋ก, ํจ์ ๋ฐ๊นฅ์์ ์ ์๋ ๊ฒฝ์ฐ๋ ์ ์ธ์ด ์ ์ญ ์ปจํ
์คํธ์ ์ต์์๋ก ๋ณ๊ฒฝ๋๋ค๋ ๊ฒ์ด๋ค.
์ฝ๋์ ์์์ ์๊ด ์์ด ๋ณ์์ ํจ์์ ์ธ๋ฌธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จผ์ ํ๋ณดํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ณ์๊ฐ ์ ์ธ๋์ด ์์ ๋ฟย ๊ฐ์ด ํ ๋น๋์ง๋ ์์ ๊ฒ์ด๋ฏ๋ก undefined๋ฅผ ์ถ๋ ฅํ๋ค. ๊ฐ์ ํ ๋น๋์ง ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ํจ์ ์ ์ธ๋ฌธ์ ํธ์ด์คํ
์ด ์ผ์ด๋์ง๋ง ํจ์ ํํ์(๊ฐ์ผ๋ก ํ ๋น๋๋)์ ํธ์ด์คํ
์ด ์ผ์ด๋์ง ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฆ, ๋ช
ํํ๊ณ ์ฌํํ๊ฒ ๋งํ๋ฉดย JS์์ var๋ function scope์ด์ง๋ง es6์์ ์ถ๊ฐ๋ const, let์ block scope์ด๋ค.
1.2.7 ์ฌ๊ท
JS๋ ์ฌ๊ท ํจ์ ํธ์ถ์ ์ง์ํ๋ค.
function factorial(number) {
if(number == 1) {
return number;
}
else {
return number * factorial(number-1);
}
}
console.log(factorial(5));
๋์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
5 * factorial(4)
5 * 4 * factorial(3)
5 * 4 * 3 * factorial(2)
5 * 4 * 3 * 2 * factorial(1)
5 * 4 * 3 * 2 * 15 * 4 * 3 * 25 * 4 * 65 * 24120
JS๊ฐ ์ฒ๋ฆฌํ ์ ์์ ์ ๋๋ก ๊น์ ์ฌ๊ท ํธ์ถ์ ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณต ๊ธฐ๋ฒ์ ์ด์ฉํ์.
1.3 ๊ฐ์ฒด์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
์ด ์ฑ
์์ ์ค๋ช
ํ๋ ์๋ฃ๊ตฌ์กฐ๋ ๊ฐ์ฒด๋ก ๊ตฌํํ๋ค.
๊ฐ์ฒด๋ ์์ฑ์ ํจ์๋ฅผ ์ด์ฉํด ์ ์ํ๋ค. ์์ฑ์ ํจ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ, ํจ์ ์ ์ธ, ํจ์ ์ ์๋ฅผ ํฌํจํ๋ค. ๋ค์์ Checking ๊ฐ์ฒด์ ์์ฑ์ ํจ์ ์์ ์ด๋ค.
function Checking(amount) {
this.balance = amount;// ํ๋กํผํฐthis.deposit = deposit;// ํจ์this.withdraw = withdraw// ํจ์this.toString = toString// ํจ์
}
this ํค์๋๋ ๊ฐ ํจ์์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ฒด ์ธ์คํด์ค๋ก ์ฐ๊ฒฐํ๋ ์ญํ ์ด๋ค.
function deposit(amount) {
this.balance += amount;
}
function withdraw(amount) {
if(amount <= this.balance) {
this.balance -= amount;
}
if(amount > this.balance) {
console.log("Insufficient funds");
}
}
function toString(){
return "Balance: " + this.balance;
}
์ด๋ฒ์๋ ์ด๋ค ๊ฐ์ฒด์ balance ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ธ์ง ์ ์ ์๋๋ก this ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
์ ์ฝ๋์ ์ด์ด ์๋์ ๊ฐ์ ์ฝ๋๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
let account = new Checking(500);
account.deposit(1000);
console.log(account.toString());// Balance : 1500
account.withdraw(750);
console.log(account.toString());// Balance : 750
account.withdraw(800);// "Insufficient funds" ์ถ๋ ฅconsole.log(account.toString());// Balance : 750
CH2 ๋ฐฐ์ด
ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐฐ์ด์ด๋ค. ๋ฐฐ์ด์ ๋ด์ฅ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๋งค์ฐ ํจ์จ์ ์ด๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ ์ฅํ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ด๋ป๊ฒ ๋์ํ๊ณ ์ธ์ ์ฌ์ฉํด์ผ ํ ์ง ์์๋ณธ๋ค.
2.1 ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด ์ ์
๋ฐฐ์ด์ ์ ์ ์ธ๋ฑ์ค(์คํ์
)๋ฅผ ์ด์ฉํด ๊ฐ ์์์ ์ ๊ทผํ ์ ์๊ฒ ์์ฐจ์ ์ผ๋ก ์์๋ฅผ ์ ์ฅํ ์งํฉ์ฒด๋ค. JS๋ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
JS์ ๋ฐฐ์ด์ ํนํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฉฐ ์ ์ ์ธ๋ฑ์ค(๊ฐ์ฒด์ ํ๋กํผํฐ ์ด๋ฆ ์ญํ )๋ก ๊ฐ์ฒด ๋ด ๋ฐ์ดํฐ ์คํ์
์ ํํํ๋ค. ์ ์๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด ์๊ตฌ์ฌํญ์ ๋ง๊ฒย ๋ด๋ถ์ ์ผ๋ก ์ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
์๋ฐํ ๋งํด JS ๋ฐฐ์ด์ JS ๊ฐ์ฒด์ง๋ง ๋ด๋ถ์ ์ผ๋ก๋ ํนํ๋ ๊ฐ์ฒด์ด๋ฏ๋ก ๋ฐฐ์ด๋ก ์ทจ๊ธํ๋ค.(Array : ๋ฏธ๋ฆฌ ์ ์๋ ํ๋กํผํฐ์ ํจ์ ์ด์ฉ ๊ฐ๋ฅ)
2.2 ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ
2.2.1 ๋ฐฐ์ด ๋ง๋ค๊ธฐ
let numbers = [];// or [1,2,3,4,5];console.log(numbers.length);// 0
or
let numbers = new Array();// new Array(1,2,3,4,5);console.log(numbers.length);// 0
or
let numbers = new Array(10);// ๋ง์ฝ ์์ ํ๊ฐ๋ก ๋ง๋๋ ค๋ฉด new Array([10]);console.log(numbers.length);// 10
๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ํ ๋ฐฐ์ด์ด ๋ค์ํ ์ข
๋ฅ์ ์์๋ฅผ ํฌํจํ ์ ์๋ค.(๋๋ถ๋ถ์ ์คํฌ๋ฆฝํธ ์ธ์ด๊ฐ ๊ทธ๋ ๋ค.)
let objects = [1, "Joe", true, null];
Array.isArray()๋ก ํน์ ๊ฐ์ฒด๊ฐ ๋ฐฐ์ด์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
let numbers = 3;
let arr = [ 7, 4, 1776 ];
console.log(Array.isArray(number));// falseconsole.log(Array.isArray(arr));// true
์๋ฐ์คํฌ๋ฆฝํธ ์ ๋ฌธ๊ฐ๋ Array ์์ฑ์๋ณด๋ค [] ์ฌ์ฉ์ด ๋ ํจ์จ์ ์ด๋ผ๊ณ ์ถ์ฒํ๋ค.
2.2.2 ๋ฐฐ์ด ์์ ์ ๊ทผํ๊ณ ๊ฐ ๊ณ ์น๊ธฐ
for๋ฌธ์ ์ด์ฉํด ๋ชจ๋ ๋ฐฐ์ด ์์์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ๋ค. for ๋ฌธ์์๋ ์ซ์ ๋์ length ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ค.ย JS ๋ฐฐ์ด์ ๊ฐ์ฒด์ด๋ฏ๋ก ๋ฐฐ์ด์ ๋ง๋ ๋ค์์ ์ธ์ ๋ ์ง ํฌ๊ธฐ๊ฐ ๋์ด๋ ์ ์๋ค. length ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ ๋ฐฐ์ด์ ์ค์ ์์ ์๊ฐ ์ ํํ ๋ฐํ๋๋ฏ๋ก ์ธ์ ๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ ๊ทผํ ์ ์๋ค.
2.2.3 ๋ฌธ์์ด๋ก ๋ฐฐ์ด ๋ง๋ค๊ธฐ
๋ฌธ์์ด์ split() ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋ฐฐ์ด์ด ์์ฑ๋๋ค.ย ์ด ํจ์๋ ๋ฌธ์์ด์ ํน์ ๊ตฌ๋ถ์(๊ณต๋ฐฑ ๋ฑ)๋ก ๋ถ๋ฆฌํ ๋ค์ ๋ถ๋ฆฌ๋ ๋ฌธ์์ด์ ํฌํจํ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
2.2.4 ๋ฐฐ์ด ์ ์ฒด์ ์ ์ฉ๋๋ ๊ธฐ๋ฅ
๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฐฐ์ด๋ก ํ ๋นํ ์ ์๋ค.
let nums = [];
for (let i = 0; i < 10; ++i) {
nums[i] = i + 1;
}
let samenums = nums;
๋ฐฐ์ด์ ๋ค๋ฅธ ๋ฐฐ์ด๋ก ํ ๋นํ๋ ๊ฒ์ ํ ๋น๋ ๋ฐฐ์ด์ ๋ ํผ๋ฐ์ค๋ฅผ ํ ๋นํ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์๋ ๋ฐฐ์ด์ ๋ฐ๊พธ๊ฒ ๋๋ฉด ํ ๋น๋ ๋ฐฐ์ด๋ ๋ฐ๋๋ค.
let nums = [];
for (let i = 0; i < 10; ++i) {
nums[i] = i + 1;
}
let samenums = nums;
nums[0] = 400;
console.log(samenums[0]);// 400
์ด์ ๊ฐ์ ๋์์ ์์ ๋ณต์ฌ(shallow copy)๋ผ๊ณ ํ๋ค.
๊น์ ๋ณต์ฌ(deep copy), ์๋ ๋ฐฐ์ด ์์๋ฅผ ์๋ก์ด ๋ฐฐ์ด ์์๋ก ๋ณต์ฌํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๋๊ฐ ์๋ค.
function copy(arr1, arr2) {
for (let i = 0; i < arr1.length; ++i) {
arr2[i] = arr1[i];
}
}
let nums = [];
for (let i = 0; i < 10; ++i) {
nums[i] = i + 1;
}
let samenums = [];
copy(nums, samenums);
nums[0] = 400;
console.log(samenums[0]);// 1
๊ทธ ์ธ์๋ print()๋ ๋ฐฐ์ด ์ ์ฒด ์ ์ฉ ๊ธฐ๋ฅ์ด๋ค.
2.3 ์ ๊ทผ์ ํจ์
๋ฐฐ์ด ์์์ ์ ๊ทผํ ์ ์๋ย ๋ค์ํ ํจ์ ์ ๊ณต.ย ์ด๋ค์ย ์ ๊ทผ์ ํจ์(accessor function)์ด๋ผ ํ๋ฉฐ ํน์ ๊ฐ์ ํฌํจํ๋ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
2.3.1 ๊ฐ ๊ฒ์ํ๊ธฐ
๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ํจ์ ์ค ํ๋๊ฐย indexOf()์ด๋ค. ์ธ์๋ก ์ ๊ณต๋ ๊ฐ์ด ๋ฐฐ์ด์ ์กด์ฌํ๋์ง ์๋ ค์ค๋ค.ย ์ธ์๋ก ์ ๊ณต๋ ๊ฐ์ด ๋ฐฐ์ด์ ์์ผ๋ฉด ์ธ๋ฑ์ค ์์น๋ฅผ ๋ฐํํ๊ณ ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
indexOf()๋ก ์ฐพ์ผ๋ ค๋ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ฉดย ์ฒซ ๋ฒ์งธ๋ก ๋ฐ๊ฒฌํ ์ธ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.ย lastIndexOf()๋ ๋ฐฐ์ด์์ ์ผ์นํ๋ ๊ฐ ์ค ๋ง์ง๋ง ์ธ์์ ์์น๋ฅผ ์ฐพ๊ณ ์์ผ๋ฉด -1์ ๋ฐํํ๋ค.
2.3.2 ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ํํํ๊ธฐ
join(), toString() ํจ์๋ ๋ฐฐ์ด์ ๋ฌธ์์ด ํ์์ผ๋ก ๋ฐํํ๋ ํจ์์ด๋ค. ๋ ํจ์ ๋ชจ๋ ๋ฐฐ์ด์ ์์๋ฅผ ์ฝค๋ง๋ก ๊ตฌ๋ถํ๋ ๋ฌธ์์ด์ ๋ฐํํ๋ค.
// join, toString : ๋ฐฐ์ด์ ๋ฌธ์์ด ํ์์ผ๋ก ํํlet names = ["D", "C", "R", "L", "J"];
let namestr = names.join();
console.log(namestr);
namestr = names.toString();
console.log(namestr);
console.log()์ ์ธ์๋ก ๋ฐฐ์ด์ ์ด๋ฆ์ ์ ๊ณตํ๋ฉด ์๋์ผ๋ก ๋ฐฐ์ด์ toString(0์ด ํธ์ถ๋๋ค.
2.3.3 ๊ธฐ์กด ๋ฐฐ์ด์ ์ด์ฉํด ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
concat(), splice()๋ ๊ธฐ์กด ๋ฐฐ์ด์ ์ด์ฉํด ์ ๋ฐฐ์ด์ ๋ง๋๋ ํจ์๋ค. concat()์ ๋ ๊ฐ ์ด์์ ๋ฐฐ์ด์ ํฉ์ณ ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ,ย splice()๋ ๊ธฐ์กด ๋ฐฐ์ด์ ์๋ธ์
์ผ๋ก ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.
๊ธฐ์กด์ ๋ฐฐ์ด์ concat()์ ํธ์ถํ๋ฉด ์ธ์๋ก ๋ ๋ค๋ฅธ ๊ธฐ์กด ๋ฐฐ์ด์ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ฉด ์ธ์๋ก ์ ๊ณต๋ ๋ฐฐ์ด์ด ์๋ concat() ํจ์๋ฅผ ํธ์ถํ ๋ฐฐ์ด ๋ค๋ก ์ถ๊ฐ๋๋ค.
์ฒ์์ dmpDept๊ฐ ๋ค์ ๋ถ๊ณ ๊ทธ ๋ค์์ ์์ ๋ถ๋๋ค.
splice()๋ ๊ธฐ์กด ๋ฐฐ์ด์ ์์๋ก ์ ๋ฐฐ์ด์ ๋ง๋ ๋ค.ย splice()๋ ์ฌ์ฉํ ์ฒซ ์์์ ์์น, ๊ธฐ์กด ๋ฐฐ์ด์์ ์ฌ์ฉํ ์์์ ์๋ฅผ ์ธ์๋ก ๋ฐ๋๋ค.
dmpDept์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด๋ฉด L๋ถํฐ ์์๋๊ณ ์๋๋ฐ ๊ธฐ์กด ๋ฐฐ์ด์ ์์์ ์์น๋ฅผ 3์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค. itDiv[3]์ ์ค์ ๋ก ๋ค ๋ฒ์งธ ์์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ธ์๋ก 3์ ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ฒซ ์์๋ถํฐ 3๊ฐ์ ์์๋ฅผ ๋ฝ์์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ค ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ์์๋ค์ด ์ ๊ฑฐ๋ ๊ธฐ์กด ๋ฐฐ์ด itDiv์ ๋ณด๋ฉด ์ํ๋ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ฉ๋๋ก๋ ์ฌ์ฉํ ์ ์์์ ์ ์ ์๋ค.