From b7d7a68ae86b9ce16a9a67bd275cf11dd36ea0fc Mon Sep 17 00:00:00 2001 From: narinn-star Date: Wed, 24 Jan 2024 22:57:12 +0900 Subject: [PATCH] docs : Day 17 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 48์žฅ ๋ชจ๋“ˆ --- .../\354\235\264\353\202\230\353\246\260.md" | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 "docs/48_\353\252\250\353\223\210/\354\235\264\353\202\230\353\246\260.md" diff --git "a/docs/48_\353\252\250\353\223\210/\354\235\264\353\202\230\353\246\260.md" "b/docs/48_\353\252\250\353\223\210/\354\235\264\353\202\230\353\246\260.md" new file mode 100644 index 00000000..90327b77 --- /dev/null +++ "b/docs/48_\353\252\250\353\223\210/\354\235\264\353\202\230\353\246\260.md" @@ -0,0 +1,112 @@ +# ๐ŸŽฏ 48 ๋ชจ๋“ˆ + +[48.1 ๋ชจ๋“ˆ์˜ ์ผ๋ฐ˜์  ์˜๋ฏธ](#1-๋ชจ๋“ˆ์˜-์ผ๋ฐ˜์ -์˜๋ฏธ) +[48.2 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ชจ๋“ˆ](#2-์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€-๋ชจ๋“ˆ) +[48.3 ES6 ๋ชจ๋“ˆ(ESM)](#3-es6-๋ชจ๋“ˆesm) + +## 1. ๋ชจ๋“ˆ์˜ ์ผ๋ฐ˜์  ์˜๋ฏธ + +**๋ชจ๋“ˆ?** + +์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„์  ์š”์†Œ๋กœ์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋งํ•œ๋‹ค. +์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“ˆ์€ ๊ธฐ๋Šฅ์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ์ผ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ์ด๋•Œ ๋ชจ๋“ˆ์ด ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ์€ ์ž์‹ ๋งŒ์˜ ํŒŒ์ผ ์Šค์ฝ”ํ”„(๋ชจ๋“ˆ ์Šค์ฝ”ํ”„)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. + +์ž์‹ ๋งŒ์˜ ํŒŒ์ผ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ์ž์‚ฐ์€ ์บก์Šํ™”๋˜์–ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ๋ชจ๋“ˆ์€ ๊ฐœ๋ณ„์  ์กด์žฌ๋กœ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์กด์žฌํ•œ๋‹ค. + +๋ชจ๋“ˆ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ•ด ์žฌ์‚ฌ์šฉ๋˜์–ด์•ผ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“ˆ์€ ๊ณต๊ฐœ๊ฐ€ ํ•„์š”ํ•œ ์ž์‚ฐ์— ํ•œ์ •ํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒ์  ๊ณต๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ *export*๋ผ ํ•œ๋‹ค. + +๊ณต๊ฐœ๋œ ๋ชจ๋“ˆ์˜ ์ž์‚ฐ์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋•Œ ๊ณต๊ฐœ๋œ ๋ชจ๋“ˆ์˜ ์ž์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋ชจ๋“ˆ ์‚ฌ์šฉ์ž๋ผ ํ•œ๋‹ค. ๋ชจ๋“ˆ ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“ˆ์ด ๊ณต๊ฐœํ•œ ์ž์‚ฐ ์ค‘ ์ผ๋ถ€ ๋˜๋Š” ์ „์ฒด๋ฅผ ์„ ํƒํ•ด ์ž์‹ ์˜ ์Šค์ฝ”ํ”„ ๋‚ด๋กœ ๋ถˆ๋Ÿฌ๋“ค์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ *import*๋ผ ํ•œ๋‹ค. + +๐Ÿ‘‰๐Ÿป ์ฝ”๋“œ์˜ ๋‹จ์œ„๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹์•„์„œ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. + +## 2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ชจ๋“ˆ + +์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“ˆ์ด ์„ฑ๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ์ผ ์Šค์ฝ”ํ”„์™€ import, export๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•˜๋‹ค. + +์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด script ํƒœ๊ทธ๋กœ ๋กœ๋“œํ•ด๋„ ๋ถ„๋ฆฌ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋“ค์€ ๊ฒฐ๊ตญ ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋‚ด์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰, ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ ํ•˜๋‚˜์˜ ์ „์—ญ์„ ๊ณต์œ ํ•œ๋‹ค. ์ด๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. + +๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์— ๊ตญํ•œํ•˜์ง€ ์•Š๊ณ  ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์›€์ง์ž„์ด ์ƒ๊ธฐ๋ฉด์„œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ๋ฐ˜๋“œ์‹œ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ํ•ต์‹ฌ ๊ณผ์ œ๊ฐ€ ๋˜์—ˆ๊ณ  CommonJS์™€ AMD(Asynchronous Module Definition)์ด ์ œ์•ˆ๋๋‹ค. + +Node.js๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ธ CommonJS๋ฅผ ์ฑ„ํƒํ–ˆ๊ณ , ํ˜„์žฌ๋Š” 100% ๋™์ผํ•˜์ง€ ์•Š์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ CommonJS ์‚ฌ์–‘์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค. ์ฆ‰, Node.js๋Š” ECMAScript ํ‘œ์ค€ ์‚ฌ์–‘์€ ์•„๋‹ˆ์ง€๋งŒ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ง€์›ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Node.js ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ํŒŒ์ผ ์Šค์ฝ”ํ”„(๋ชจ๋“ˆ ์Šค์ฝ”ํ”„)๋ฅผ ๊ฐ–๋Š”๋‹ค. + +## 3. ES6 ๋ชจ๋“ˆ(ESM) + +ESM์€ script ํƒœ๊ทธ์— type="module" ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋กœ๋“œ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ ๋ชจ๋“ˆ๋กœ์„œ ๋™์ž‘ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ์•„๋‹Œ ESM์ž„์„ ๋ช…ํ™•ํ•˜๊ธฐ ์œ„ํ•ด ESM์˜ ํŒŒ์ผ ํ™•์žฅ์ž๋Š” mjs๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. + +ESM์—๋Š” ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ strict mode๊ฐ€ ์ ์šฉ๋œ๋‹ค. + +### 3.1 ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„ + +ESM์€ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š”๋‹ค. ESM์ด ์•„๋‹Œ ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ script ํƒœ๊ทธ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๋กœ๋“œํ•ด๋„ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค. + +```javascript +// foo.js +// x ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‹ค. +var x = 'foo'; +console.log(window.x); // foo +``` + +```javascript +// bar.js +// x ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋‹ค. foo.js์— ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜ x์™€ ์ค‘๋ณต๋œ ์„ ์–ธ์ด๋‹ค. +var x = 'bar'; + +// foo.js์—์„œ ์„ ์–ธํ•œ ์ „์—ญ ๋ณ€์ˆ˜ x์˜ ๊ฐ’์ด ์žฌํ• ๋‹น๋˜์—ˆ๋‹ค. +console.log(window.x); // bar +``` + +```html + + + + + + + +``` + +์œ„ ์˜ˆ์ œ์˜ HTML์—์„œ script ํƒœ๊ทธ๋กœ ๋ถ„๋ฆฌํ•ด ๋กœ๋“œ๋œ 2๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์€ ํ•˜๋‚˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋‚ด์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ foo.js์—์„œ ์„ ์–ธํ•œ x ๋ณ€์ˆ˜์™€ bar.js์—์„œ ์„ ์–ธํ•œ x ๋ณ€์ˆ˜๋Š” ์ค‘๋ณต ์„ ์–ธ๋˜๋ฉฐ ์˜๋„์น˜ ์•Š๊ฒŒ x ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฎ์–ด์จ์ง„๋‹ค. + +ESM์€ ํŒŒ์ผ ์ž์ฒด์˜ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ ๋‚ด์—์„œ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๋”์ด์ƒ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ window ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋„ ์•„๋‹ˆ๋‹ค. + +```javascript +// foo.mjs +// x ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ window ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋„ ์•„๋‹ˆ๋‹ค. +var x = 'foo'; +console.log(x); // foo +console.log(window.x); // undefined +``` + +```javascript +// bar.mjs +// x ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ window ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋„ ์•„๋‹ˆ๋‹ค. +// foo.mjs์—์„œ ์„ ์–ธํ•œ x ๋ณ€์ˆ˜์™€ ์Šค์ฝ”ํ”„๊ฐ€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋‹ค. +var x = 'bar'; +console.log(x); // bar +console.log(window.x); // undefined +``` + +```html + + + + + + + +``` + +๋ชจ๋“ˆ ๋‚ด์—์„œ ์„ ์–ธํ•œ ์‹๋ณ„์ž๋Š” ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜๋Š” ์—†๋‹ค. + +### 3.2 export ํ‚ค์›Œ๋“œ + +๋ชจ๋“ˆ์€ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•œ ์‹๋ณ„์ž๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค์ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด export ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. + +### 3.3 import ํ‚ค์›Œ๋“œ + +๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๊ณต๊ฐœ(export)ํ•œ ์‹๋ณ„์ž๋ฅผ ์ž์‹ ์˜ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„ ๋‚ด๋ถ€๋กœ ๋กœ๋“œํ•˜๋ ค๋ฉด import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด exportํ•œ ์‹๋ณ„์ž ์ด๋ฆ„์œผ๋กœ importํ•ด์•ผ ํ•˜๋ฉฐ ESM์˜ ๊ฒฝ์šฐ **ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์ƒ๋žต**ํ•  ์ˆ˜ ์—†๋‹ค. + +- ๋ชจ๋“ˆ์ด exportํ•œ ์‹๋ณ„์ž ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด import ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. +- ๋ชจ๋“ˆ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ exportํ•œ๋‹ค๋ฉด default ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. default ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฆ„ ์—†์ด ํ•˜๋‚˜์˜ ๊ฐ’์„ exportํ•œ๋‹ค. +- defualt ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ var, let, const ํ‚ค์›Œ๋“œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. +- default ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ exportํ•œ ๋ชจ๋“ˆ์€ {}์—†์ด ์ž„์˜์˜ ์ด๋ฆ„์œผ๋กœ importํ•œ๋‹ค.