[TIL] 09_JS | Module

MJ Kimยท2021๋…„ 8์›” 19์ผ
1

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
9/12
post-thumbnail

๐Ÿ’ก์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ


๋ชจ๋“ˆ(Module)

์ด์ „์— Webpack์„ ๋…ํ•™์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด๋ฉฐ webpack ์ด์ „ JS์—์„œ ์‚ฌ์šฉ๋˜๋˜ ๊ธฐ๋Šฅ์œผ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋‹ค. ์ด๋ฒˆ์— Vanilla JS๋กœ๋งŒ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ์›น์•ฑ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋”ฐ๋กœ ๋ฒˆ๋“ค๋Ÿฌ ์—†์ด ES6 ๋ชจ๋“ˆ(Module)์‹œ์Šคํ…œ์œผ๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉฐ ๊นจ๋‹ฌ์€ ๋ชจ๋“ˆ์‹œ์Šคํ…œ์˜ ํŠน์ง•์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค!

script


<body>
 <script src="./src/bar.js"></script>
 <script src="./src/foo.js"></script>
</body>

์œ„์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ scriptํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ js ํŒŒ์ผ์„ ๋‚˜๋ˆ„์–ด ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ถ„๋ฆฌ๋œ JSํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ JSํŒŒ์ผ ์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค.

  • JS ํŒŒ์ผ๋“ค์€ ํ•˜๋‚˜์˜ ์ „์—ญ์„ ๊ณต์œ ํ•œ๋‹ค.
  • ๊ฐ ํŒŒ์ผ์€ ์˜์กด์„ฑ์— ๋งž๊ฒŒ ์ˆœ์„œ๋Œ€๋กœ ๋กœ๋”ฉ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ํŒŒ์ผ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ผ์ผ์ด ํ™•์ธํ•˜๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณต์žกํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“ˆ(Module) ๋‹จ์œ„ ๊ฐœ๋ฐœ์ด ์ง€ํ–ฅ๋œ๋‹ค.

Module

script ํƒœ๊ทธ์— type="module" ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋กœ๋“œ๋œ JSํŒŒ์ผ์€ ๋ชจ๋“ˆ๋กœ์จ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

<body>
<script type="module" src="./src/bar.js"></script>
<script type="module" src="./src/foo.js"></script>
</body>

Module์˜ scope

script ํƒœ๊ทธ๋กœ ๋ถ„๋ฆฌํ•œ JSํŒŒ์ผ์€ ์ „์—ญ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐ˜๋ฉด, ES6์˜ ๋ชจ๋“ˆ์€ ๋…์ž์ ์ธ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„๋‹ค.

// bar.js (type="module")
const x = 'bar';
console.log(x); // bar


// foo.js (type="module")
console.log(x); // ReferenceError: x is not defined
  • ๋ชจ๋“ˆ ๋‚ด์—์„œ ์„ ์–ธํ•œ ์‹๋ณ„์ž๋Š” ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

export, import

๋ชจ๋“ˆ์€ ๋…์ž์ ์ธ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€์ง€๋งŒ, ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๋ชจ๋“ˆ ๋‚ด๋ถ€ ์‹๋ณ„์ž๋“ค์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด export ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค!
๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ ๋ชจ๋“  ์‹๋ณ„์ž๋ฅผ ๊ฐœ๋ณ„ ๋˜๋Š” ๋ฌถ์Œ์œผ๋กœ export ํ•  ์ˆ˜ ์žˆ๋‹ค.


// hello.js
export function sayHello() {
 console.log('Hello');
}


// index.js
import { sayHello } from './hello.js';

sayHello(); // Hello
  • importํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด import ํ‚ค์›Œ๋“œ์™€ ์ค‘๊ด„ํ˜ธ { }๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

// index.js
import { sayHello as hi } from './hello.js';

hi(); // Hello
  • ๋ชจ๋“ˆ์„ importํ•  ๋•Œ as ํ‚ค์›Œ๋“œ๋กœ ๋ณ„์นญ์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.


// index.js
import * as hello from './hello.js';

hello.sayHello(); // Hello
  • ๋ชจ๋“ˆ ์ „์ฒด๋ฅผ importํ•  ๋•Œ๋Š” *์„ ์‚ฌ์šฉํ•œ๋‹ค.

// hello.js
export default function sayHello() {
  console.log('Hello');
}

// index.js
import sayHello from './hello.js';

sayHello(); // Hello
  • ๋ชจ๋“ˆ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ export ํ•œ๋‹ค๋ฉด, default ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • default ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ฆ„์—†์ด ํ•˜๋‚˜์˜ ๊ฐ’์„ exportํ•œ๋‹ค.
  • var, let, const ํ‚ค์›Œ๋“œ๋Š” ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๋‹ค.
// hello.js
export default const foo = () => {}; // SyntaxError
// export default () => {} ๋กœ ์ž‘์„ฑํ•ด์•ผํ•จ 

entry point

index.js๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ (entry point)์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ script ํƒœ๊ทธ๋กœ ๋กœ๋“œํ•ด์•ผํ•œ๋‹ค. hello.js๋Š” index.js์˜ import ๋ฌธ์— ์˜ํ•ด ๋กœ๋“œ๋˜๋Š” ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

<body>
 <script type="module" src="./index.js" ></script>
</body>


๐Ÿ’ญ๋А๋‚€์ 

๋ฐ๋ธŒ์ฝ”์Šค๋ฅผ ๋“ฃ๊ธฐ ์ „ ์ธํ„ฐ๋„ท ๊ฐ•์˜, ์ž๋ฃŒ๋“ค๋กœ ๋…ํ•™ํ•˜๋ฉฐ ๋ชจ๋“ˆ๋Ÿฌ, ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์„ ๊ฐ„์žฝ์ด(?)๋กœ๋งŒ ๊ฒฝํ—˜ํ•˜๊ณ  ์™œ ํ•„์š”ํ•œ์ง€, ์–ด๋–ค ์ปจ์…‰์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ธ์ง€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋”ฐ๋ผ๊ฐ€๊ธฐ์—๋งŒ ๊ธ‰๊ธ‰ํ–ˆ์—ˆ๋˜(?) ๋‚˜... ์ง„์ •ํ•œ Vanilla JS์˜ ๋งค๋ ฅ์„ ๋ชฐ๋ž๋˜ ๋‚˜...๐Ÿ˜‚
์ด๋ฒˆ์— Vanilla JS๋กœ ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ๋“ค์ด ์–ด๋– ํ•œ ์˜๋ฏธ์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ๊นจ๋‹ซ๊ณ  ์žˆ๋‹ค. ๊ฒฝํ—˜๊ณผ ์ง€์‹์ด ๋ถ€์กฑํ•œ ๋งŒํผ ์กฐ๊ธˆ์€ ๋А๋ฆฌ๋”๋ผ๋„, ์˜ณ์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ฐจ๊ทผ์ฐจ๊ทผ ์„ฑ์žฅํ•ด ๋‚˜๊ฐ€๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ๋‹ค! ๐Ÿ˜ธ


์ฐธ๊ณ 
https://ui.toast.com/fe-guide/ko_DEPENDENCY-MANAGE
https://poiemaweb.com/es6-module
profile
๊ธฐ์ดˆ๊ฐ€ ํŠผํŠผํ•œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ ๐Ÿ’ป ๐Ÿคž

0๊ฐœ์˜ ๋Œ“๊ธ€