[JavaScript] 19. ๋นํธ์ธ ๊ฐ์ฒด
๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ต์ฌ) 21์ฅ. ๋นํธ์ธ ๊ฐ์ฒด
01. ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ถ๋ฅ
* 3๊ฐ์ ๊ฐ์ฒด๋ก ๋ถ๋ฅ
- ํ์ค ๋นํธ์ธ ๊ฐ์ฒด : ECMAScript ์ฌ์์ ์ ์๋ ๊ฐ์ฒด. ์คํํ๊ฒฝ์ ๊ด๊ฒ์์ด ์ธ์ ๋ ์ฌ์ฉ ๊ฐ๋ฅ
- ํธ์คํธ ๊ฐ์ฒด : ์คํ ํ๊ฒฝ (๋ธ๋ผ์ฐ์ ํ๊ฒฝ ๋๋ Node.js ํ๊ฒฝ)์์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ ๊ฐ์ฒด
- ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด : ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๊ฐ์ฒด๊ฐ ์๋, ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ๊ฐ์ฒด
02. ํ์ค ๋นํธ์ธ ๊ฐ์ฒด
- Object, String, Number, Date, Math, RegExp, Array, Map, Set, Promise, Reflect, Proxy, JSON, Error ๋ฑ 40์ฌ ๊ฐ์ ํ์ค ๋นํธ์ธ ๊ฐ์ฒด
- ์์ฑ์ ํจ์ ๊ฐ์ฒด : ํ๋กํ ํ์ ๋ฉ์๋, ์ ์ ๋ฉ์๋ ์ ๊ณต
- ์์ฑ์ ํจ์ ๊ฐ์ฒด๊ฐ ์๋ ๊ฐ์ฒด(Math, Reflect, JSON) : ์ ์ ๋ฉ์๋ ์ ๊ณต
03. ์์๊ฐ๊ณผ ๋ํผ ๊ฐ์ฒด
๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๋ฑ์ ์์๊ฐ์ด ์์์๋ ์ด๋ค์ ์์ฑํ๋ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํ๋ ์ด์ ๋?
(๐ฅ ๊ฒฐ๋ก ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์์ด ๊ถ์ฅํ์ง ์์)
const str = 'hello';
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
// ์์๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ ,
// ์์๊ฐ์ธ ๋ฌธ์์ด์ด ๋ง์น ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๊ฐ๋ ๊ฐ์ฒด์ฒ๋ผ ๋์ํจ
(์ ์ฃผ์์ฒ๋ผ ๊ฐ๋ฅํ ์ด์ )
โก๏ธ ์์๊ฐ์ธ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๊ฐ์ ๊ฒฝ์ฐ) ๋ง์นจํ ํ๊ธฐ๋ฒ ๋๋ ๋๊ดํธ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ผ์์ ์ผ๋ก ์์๊ฐ์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ก ๋ณํํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
๐ก ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ํด ๊ฐ์ฒด์ฒ๋ผ ์ ๊ทผํ๋ฉด ์์ฑ๋๋ ์์ ๊ฐ์ฒด๋ฅผ ๋ํผ ๊ฐ์ฒด(wrapper object)๋ผ๊ณ ํ๋ค.
ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค, ๋ค์ ์์๊ฐ์ผ๋ก ๋๋๋ฆฐ๋ค.
โก๏ธ ๋ํผ ๊ฐ์ฒด์ ์ํด ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ์ ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๐ฅ ํ์ง๋ง,, ์์ฑ์ ํจ์๋ก ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์๊ณ , ๊ถ์ฅํ์ง ์๋๋ค.
04. ์ ์ญ ๊ฐ์ฒด
์ ์ญ ๊ฐ์ฒด(global object) : ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์ด๋ค ๊ฐ์ฒด๋ณด๋ค๋ ๋จผ์ ์์ฑ๋๋ ๊ฐ์ฒด์ด๋ฉฐ, ์ด๋ค ๊ฐ์ฒด์๋ ์ํ์ง ์๋ ์ต์์ ๊ฐ์ฒด
- ๋ธ๋ผ์ฐ์ ํ๊ฒฝ : window๊ฐ ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
- Node.js ํ๊ฒฝ : global์ด ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
- ์ ์ญ ๊ฐ์ฒด๊ฐ ๊ฐ๊ณ ์๋ ํ๋กํผํฐ
- ํ์ค ๋นํธ์ธ ๊ฐ์ฒด
- ํ๊ฒฝ์ ๋ฐ๋ฅธ ํธ์คํธ ๊ฐ์ฒด (ํด๋ผ์ด์ธํธ Web API๋ Node.js์ ํธ์คํธ API)
- var ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์์ ์ ์ญ ํจ์
* ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ ๋๋ window(๋๋ global) ์๋ต ๊ฐ๋ฅ
์ ์ญ ๊ฐ์ฒด๋ ๋ช ๊ฐ์ง ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์๋์์ ์ดํด๋ณด์.
1) ๋นํธ์ธ ์ ์ญ ํ๋กํผํฐ
๋นํธ์ธ ์ ์ญ ํ๋กํผํฐ๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์๋ฏธํ๋ค.
1. Infinity
Infinity ํ๋กํผํฐ๋ ๋ฌดํ๋๋ฅผ ๋ํ๋ด๋ ์ซ์๊ฐ Infinity๋ฅผ ๊ฐ๋๋ค.
2. NaN
NaN ํ๋กํผํฐ๋ ์ซ์๊ฐ ์๋(Not-a-Number)์ ๋ํ๋ด๋ ์ซ์๊ฐ NaN์ ๊ฐ๋๋ค.
3. undefined
undefined ํ๋กํผํฐ๋ ์์ ํ์ undefined๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋๋ค.
2) ๋นํธ์ธ ์ ์ญ ํจ์
๋นํธ์ธ ์ ์ญ ํจ์๋ ์ ์ญ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค.
1. eval
๊ฒฐ๋ก ์, eval ํจ์์ ์ฌ์ฉ์ ๊ธ์งํด์ผ ํ๋ค.
2. isFinite
- ์ ๋ฌ๋ฐ์ ์ธ์๊ฐ ์ ํ์์ธ์ง, ๋ฌดํ์์ธ์ง ๋ถ๋ฆฌ์ธ ํ์ ์ผ๋ก ๋ฐํํ๋ค.
- ์ ๋ฌ๋ฐ์ ์ธ์์ ํ์ ์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์ซ์๋ก ํ์ ์ ๋ณํํ ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค.
3. isNaN
- ์ ๋ฌ๋ฐ์ ์ธ์๊ฐ NaN์ธ์ง ๊ฒ์ฌํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ ํ์ ์ผ๋ก ๋ฐํํ๋ค.
- ์ ๋ฌ๋ฐ์ ์ธ์์ ํ์ ์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ซ์๋ก ํ์ ์ ๋ณํํ ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค.
4. parseFloat
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ์ค์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค.
5. parseInt
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ์ ์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค
6. encodeURI / decodeURI
- URI(Uniform Resource Identifier): ์ธํฐ๋ท์ ์๋ ์์์ ๋ํ๋ด๋ ์ฃผ์
- encodeURI ํจ์ : URI๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌ๋ฐ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ธ์ฝ๋ฉ
- decodeURI ํจ์ : ์ธ์ฝ๋ฉ๋ URI๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋์ฝ๋ฉ
- ์ํ๋ฒณ, 0~9์ซ์, ! ~ * ๋ฑ ๋ฌธ์๋ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ์์ ์ ์ธ
7. encodeURIComponent / decodeURIComponent
- encodeURIComponent ํจ์ : URI ๊ตฌ์ฑ ์์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ์ฝ๋ฉ ์ธ์๋ก ์ ๋ฌ๋ ๋ฌธ์์ด์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ผ๋ถ๋ก ๊ฐ์ฃผํ์ฌ, ์ฟผ๋ฆฌ์คํธ๋ง ๊ตฌ๋ถ์๋ก ์ฌ์ฉ๋๋ =(๋ฑํธ), ?, &(ampersand) ๊น์ง ์ธ์ฝ๋ฉ
- (vs.) encodeURI ํจ์: ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๋ฌธ์์ด์ ์์ ํ URI ์ ์ฒด๋ผ๊ณ ๊ฐ์ฃผํด ์ฟผ๋ฆฌ ์คํธ๋ง ๊ตฌ๋ถ์๋ ์ธ์ฝ๋ฉํ์ง ์๋๋ค.
- decodeURIComponent ํจ์ : ๋งค๊ฐ๋ณ์ ์ ๋ฌ๋ URI ๊ตฌ์ฑ ์์๋ฅผ ๋์ฝ๋ฉ
3) ์๋ฌต์ ์ ์ญ
- ์๋ฌต์ ์ ์ญ : ์ ์ธํ์ง ์์ ์๋ณ์์ ๊ฐ์ ํ ๋นํ๋ฉด ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ ( *์ ์ญ๋ณ์๋ ์๋์ง๋ง, ๋ง์น ์ ์ญ๋ณ์์ธ ๊ฒ์ฒ๋ผ ๋์ )
๐ ์ฐธ๊ณ ์๋ฃ