Skip to content

Latest commit

ย 

History

History
75 lines (50 loc) ยท 4.08 KB

File metadata and controls

75 lines (50 loc) ยท 4.08 KB

๋ชจ๋“ˆ ์‹œ์Šคํ…œ (Module System)

๋ชจ๋“ˆ์ด๋ž€ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์— ๊ด€ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์œ ์ง€๋ณด์ˆ˜์„ฑ

๊ธฐ๋Šฅ๋“ค์ด ๋ชจ๋“ˆํ™”๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์˜์กด์„ฑ์„ ๊ทธ๋งŒํผ ์ค„์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•œ๋‹ค๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ ํ›จ์”ฌ ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋„ค์ž„์ŠคํŽ˜์ด์Šคํ™”

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ „์—ญ๋ณ€์ˆ˜๋Š” ์ „์—ญ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ฒน์น˜๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ๋ชจ๋“ˆ๋งŒ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์žฌ์‚ฌ์šฉ์„ฑ

๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ์žฅ์ ๋“ค์„ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ชจ๋“ˆ ๊ฐœ๋…์ด ํ•„์š”ํ–ˆ๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ๋ชจ๋“ˆ์ผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์‹œ๋„๋“ค์ด ์žˆ์—ˆ๋‹ค. ๊ทธ ์ค‘ CommonJS, AMD, UMD ๋ฐ ES6์˜ import&export๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์‹œ๋„๋“ค์ด๋‹ค.


CommonJS

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ณต์‹ ์ŠคํŽ™์ด ๋ธŒ๋ผ์šฐ์ €๋งŒ ์ง€์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ฐ ๋ฐ์Šคํฌํƒ‘ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๊ฑธ ์œ„ํ•ด ๋งŒ๋“  ๊ทธ๋ฃน์ด CommonJS์ด๋ฉฐ ์—ฌ๊ธฐ์„  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋ฒ”์šฉ์ ์ธ ์–ธ์–ด๋กœ ์“ฐ์ด๊ธฐ ์œ„ํ•œ ์ŠคํŽ™์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” require๋ฅผ, ๋ชจ๋“ˆ์„ ํ•ด๋‹น ์Šค์ฝ”ํ”„ ๋ฐ–์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ์—๋Š” module.exports๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, Node.js์—์„  ํ˜„์žฌ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.


AMD

CommonJS ๊ทธ๋ฃน์—์„œ ์˜๊ฒฌ์ด ๋งž์ง€ ์•Š์•„ ๋‚˜์˜จ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“  ๊ทธ๋ฃน์œผ๋กœ, ๋น„๋™๊ธฐ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ํ‘œ์ค€์•ˆ์„ ๋‹ค๋ฃจ๋Š” ๊ทธ๋ฃน์ด๋‹ค. CommonJS๊ฐ€ ์„œ๋ฒ„์ชฝ์—์„œ ์žฅ์ ์ด ๋งŽ์€ ๋ฐ˜๋ฉด, AMD๋Š” ๋ธŒ๋ผ์šฐ์ € ์ชฝ์—์„œ ๋” ํฐ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์ด ๋‹ค ๋กœ๋”ฉ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ๋ชจ๋“ˆ ๋กœ๋”ฉ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•ด๋†“์•˜๋‹ค.

์ด ๋ฐฉ์‹์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” define()๊ณผ require()์ด๋ฉฐ AMD ์ŠคํŽ™์„ ๊ฐ€์žฅ ์ž˜ ๊ตฌํ˜„ํ•œ ๋ชจ๋“ˆ๋กœ๋”๋Š” RequireJS ์ด๋‹ค.


UMD

๋ชจ๋“ˆ ๊ตฌํ˜„ ๋ฐฉ์‹์ด CommonJS์™€ AMD๋กœ ๋‚˜๋‰˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฑธ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ํŒจํ„ด์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ์‹์€ 2๊ฐœ์˜ ์ธ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” Browser ์ชฝ์„ ๊ตฌํ˜„ํ•  root์— ๋„˜๊ธธ ๊ฐ’์œผ๋กœ undefined์ด๋ฉด this๋กœ, ์•„๋‹ˆ๋ผ๋ฉด window๋กœ ์„ค์ •ํ•œ๋‹ค. ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ๋นˆ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ณด๋‚ธ๋‹ค.

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋‘ ๋ชจ๋“ˆ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


ES6 ๋ฐฉ์‹

import์™€ export ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Babel์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๋ณ€ํ™˜์‹œ์ผœ ์‚ฌ์šฉํ•œ๋‹ค.

default ์œ ๋ฌด์— ๋”ฐ๋ฅธ ์‚ฌ์šฉ๋ฒ•

export๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” named export์™€ default export๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, default export๋Š” ๋ชจ๋“ˆ ๋‚ด์—์„œ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  named export๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

default export๋กœ ๋‚ด๋ณด๋‚ด๋ฉด import์—์„  ๋‚ด๋ณด๋‚ธ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, named export๋กœ ๋‚ด๋ณด๋‚ด๋ฉด {}๋กœ ๋ฌถ์–ด์„œ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•œ๋‹ค.

๋˜๋‹ค๋ฅธ ์‚ฌ์šฉ๋ฒ•

๋ณ„์นญ(alias)๋ฅผ as๋กœ ์ฃผ์–ด์„œ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , * ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜ ๋‚ด๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Ÿฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณ€ํ˜•๊ธฐ๋ฒ•์˜ ์‚ฌ์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

  • default export
// moduleA.js
const A = () => {};
export default A;

// index.js
import A from 'moduleA';
  • named export
// moduleB.js
export const B = () => {};

// index.js
import { B } from 'moduleB';

์ฐธ๊ณ