GitHub์ ์๋ 33 Concepts Every JavaScript Developer Should Know ๋ผ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ด์ฉ ์ค ๊ณต๋ถํ๊ณ ์ถ์ ์ํฐํด์ ๋ด๊ฐ ์ ๋ฆฌํ ๊ฒธ ๊ธฐ์ตํ ๊ฒธ ์์ฑํ๋ ๋ฒ์ญ๊ธ์ด๋ค. 33๊ฐ์ง ์ค ๋ค ๋ฒ์งธ์ธ Implicit, Explicit, Nominal, Structuring and Duck Typing๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด๋ค.
โป ๋ด๋ณด๋ด๋ฒ(๋ด๊ฐ ๋ณด๋ ค๊ณ ๋ด๊ฐ ๋ฒ์ญํ): ์์ด ์ ๊ณต์๋ ํด์ธ ์ ํํ๋ ์๋๊ธฐ์ ๋ฒ์ญ์๋ ์์ญ, ์ค์ญ, ๊ตฌ๊ธ ๋ฒ์ญ์ด ๋ฌด์ํ ๋ง์ ์ ์์ผ๋ฉฐ, ์คํ๋ ๋ง์ ์ ์๋ค. ์ ํํ ๋ด์ฉ์ ์๋ฌธ์ ์ง์ ์ดํด๋ณด๊ฑฐ๋ ๋ค๋ฅธ ์ ๋ณด๋ค์ ๋ ์ฐพ์๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
(ํ์ง๋ง ๋๊ธ ํผ๋๋ฐฑ๋ ํ์ํฉ๋๋ค๐ )
์ด๋ฒ์ ๊ณ ๋ฅธ ์ํฐํด์ Ben Garrison ๋์ด ์์ฑํ์ Javascript Coercion Explained ์ด๋ค. ๋ด์ฉ ์ค๊ฐ์ค๊ฐ ๐ค์ด ์์ด์ฝ์ ๋ณธ๋ฌธ์ ๋์ ์์ง ์์ ๋ฒ์ญ ํ๋ฉฐ ์ถ๊ฐํ ๋ง์ด๋ค.
๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์์ ํจ๊ป
JS์ ๊ฐ์ ํ ๋ณํ์ ๋ํด์ ํ์ฌ๋ฅผ ์์ํ๊ธฐ์ ์์ ์ด ํฌ์คํธ๋ JS๊ฐ untyped language(๊ฐ์ธ์ ์ ์์ ๋ฐ๋ผ ์๋ง weakly-typed ์ผ์๋)์ด๊ธฐ ๋๋ฌธ์ ์กด์ฌํ๋ ๊ฒ์ด๋ค. (๐ค: untyped์ ๋ํ ํ๊ตญ์ด ํํ์ ์ฐพ๋ค๊ฐ untyped๋ผ๋ ๋ง์ ์ ์์๋ ์ฌ๋ฌ ํด์์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์ด ๊ธ์ ์ฐธ์กฐํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค.)
Typed Language
strongly-typed programming language๋ ๊ฐ ๋ฐ์ดํฐ ํ์ (์ ์ํ, ๋ฌธ์ํ, 16์ง์, ๋ฌถ์ ์ญ์ง๋ฒ ๋ฑ)์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ผ๋ถ๋ถ์ผ๋ก์ ๋ฏธ๋ฆฌ ์ ์๋์ด ์๊ณ ์ฃผ์ด์ง ํ๋ก๊ทธ๋จ์ ๋ํ ๋ชจ๋ ์ ์๋ ์์์ ๋ณ์๋ค์ ๋ฐ๋์ ๋ฐ์ดํฐ ํ์ ์ค ํ๋๋ก ์ค๋ช ๋์ด์ผ ํ๋ค.
JS ์ฌ์ฉ์๋ก์ ์ด๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ์๋ฏธํ๋ ๊ฒ์ ์ธ์ด๊ฐ ์ปดํ์ผ ์๊ฐ์ ํน์ ๊ท์น ๊ธฐ๋ฐ์ ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋๋ก ๊ฐ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด ํฌ์คํธ์์๋ 2๊ฐ์ง ๋ค๋ฅธ ๊ฐ์ ํ ๋ณํ, ๋ช ์์ (Explicit)๊ณผ ์์์ (Implicit)์ ๋ํด์ ๋ค๋ฃฐ ๊ฒ์ด๋ค.
๋ช ์์ ๊ฐ์ ํ ๋ณํ์ ์ฝ๋ ์์ฑ์์ ์ํด ๊ฐ์ ํ ํ์ ์์ ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ฐ๊พธ๋ ค๋ ๋ช ํํ ์๋์ด๋ค. ์์์ ๊ฐ์ ํ ๋ณํ์ ๋ค๋ฅธ ์์ ์ ๋ํ ๋ ๋ถ๋ช ํ(less-obvious) ๋ถ์์ฉ์ผ๋ก์ ๋ฐ์ํ๋ค. ์๋์ ์์ ๋ฅผ ๋ณด๋ผ(gist):
์์ ์์ ์์ ๋ ๊ฐ์ง ์ ๊ทผ, ์์์ ๊ณผ ๋ช ์์ ๋ชจ๋ ๊ฐ์ ๊ฒฐ๊ณผ์์ ์ ์ํ๋ผ. ์ด๊ฒ์ ํฅ๋ฏธ๋ก์ฐ๋ฉด์๋ ๋ ผ์๋ค์ ๋ถ๋ฌ์ผ์ผํจ๋ค. ์ฆ ๊ฐ๋ ์ฑ์ด ๋ ผ์์ ํฌ์ธํธ์ด๋ค. ๊ฑฐ์ ํญ์ ๋ค๋ฅธ ์ฌ๋๋ณด๋ค๋ ๋น์ ์ด ์์ ์ ์ฝ๋๋ฅผ ๋ณผ ๊ฒ์ด๋ค. ์์ ๋ฐฉ๋ฒ ์ค ์ด๋ ๊ฒ์ด ๋ ์ฝ๊ธฐ ์ฌ์ด๊ฐ?
์ด์ JS๊ฐ ==์ ===๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํ์ ๊ฐ ๋น๊ต๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง, ์ธ์ null๊ณผ undefined๋ฅผ ์ฌ์ฉํ๋์ง ์ดํด๋ณด์.
null vs. undefined
์ฌ๊ธฐ ๋ช ๊ฐ์ง ์ฝ๋ ์์ ๋ค์ด ์๋ค. ์๋์ ๋ ์์ธํ ์ค๋ช ์ด ๋์ด ์๋ค(gist):
์์ ์ฝ๋์์ ์ฃผ์์ ์:
- null์ ๊ฐ์ฒด์ด๋ค
- undefined๋ ๊ณ ์ ํ ํ์ ์ด๋ค.
๋น๊ต
์ด์ ๋ค๋ฅธ ์ ํ์ ๊ฐ์ ๋๋ฑ ์ฐ์ฐ์ ==์ ์ผ์น ์ฐ์ฐ์ ===๋ก ๋น๊ตํ ๊ฒฐ๊ณผ์ ๋ํด ์ดํด๋ณผ ๊ฒ์ด๋ค.
JS ์ธํฐํ๋ฆฌํฐ๊ฐ ์ฐ๋ฆฌ์ ์๋์ ๋ํด ๋ช ๊ฐ์ง ์ถ์ธกํ๋๋ก ํด๋ณด์.
undefined์ null์ ๋ํด ๋๋ฑ ์ฐ์ฐ์(4,5ํ)๋ก๋ ์ผ์นํ๊ณ ์ผ์น ์ฐ์ฐ์(8,9ํ)๋ก๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ ์ ์ํ๋?
String, Number, Boolean์ ๋ํด์๋ ๋น๊ตํด๋ณด์:
์ง๊ธ ์ฏค์ด๋ฉด ํจํด์ ๋์น์ฑ์ ๊ฒ์ด๋ค. ๋ค๋ฅธ ํ์ ์ ๊ฐ๋ค์ ๋๋ฑ ์ฐ์ฐ์๋ก ๋น๊ตํ๋ฉด, JS๋ ๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์ ํ ๋ณํํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ ํ์ฑ์ ์ผ์น ์ฐ์ฐ์๋ฅผ ํตํด ๋ฌ์ฑํ ์ ์๋ค.
๊ฒฐ๋ก
๊ฒฐ๊ตญ untyped ์ธ์ด์์ ๊ฐ์ ํ ๋ณํ์ ํ์์ ์ด๋ค.
๋์ ์ ์์:
์ฝ๋๋ฅผ ์์ฑํ ๋ ์ผ์น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํ๋ ์ด์ ์ ๋ํด ์ ๋นํํ ์ ์๋ค๋ฉด ํญ์ ์ผ์น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ผ.