[JavaScript] ๋ชจ๋“ˆ

๋ฐ•์„ธ์ง„ยท2024๋…„ 3์›” 27์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
10/11
post-thumbnail

๐ŸŒผ๋ชจ๋“ˆ

= ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ

  • ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•ด ์ž‘๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ํŒŒ์ผ๋กœ ๊ตฌ๋ถ„
  • ๋ชจ๋“ˆ์€ ์ž์ฒด์ ์ธ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ ธ ์ฝ”๋“œ์™€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถฉ๋Œ์„ ๋จน์Œ
  • ๊ฐ ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง
  • ํ•„์š”ํ•œ ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ์ •์˜ ๊ฐ€๋Šฅ
  • ์œ ์ง€ ๋ณด์ˆ˜์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ ๊ฐ€๋Šฅ
  • ๋ชจ๋“ˆ ์‚ฌ์šฉ๋ฒ•์€ ํฌ๊ฒŒ CJS(CommonJS)์™€ ESM(ECMAScript) ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰จ

๐ŸŒฑ ESM (ECMAScript)

  • JavaScript์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์ •์˜
    -์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ Node.js์—์„œ ์ง€์›
  • ํ”„๋ก ํŠธ์—”๋“œ ์˜์—ญ์—์„œ ํ‘œ์ค€ํ™” ๋˜์–ด ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ฐฉ์‹
  • import ๋ฐ export ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๊ณ  ๋‚ด๋ณด๋‚ด๊ณ  ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ

์˜ˆ์ œ1 - math.js , main.js

// math.js
export function add(a, b) {
    return a + b;
}
export function subtract(a, b) {
    return a - b;
}

'math.js' ๋ชจ๋“ˆ์€ 'add, substract' ํ•จ์ˆ˜๋ฅผ 'export' ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•จ

// main.js
import { add, subtract } from './math.js';
console.log(add(5, 3)); // ์ถœ๋ ฅ: 8
console.log(subtract(10, 4)); // ์ถœ๋ ฅ: 6

'main.js' ํŒŒ์ผ์—์„œ 'math.js' ๋ชจ๋“ˆ์—์„œ ๋‚ด๋ณด๋‚ธ 'add, subtract' ํ•จ์ˆ˜๋ฅผ 'import' ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ด

๐ŸŸฉ Named Export / import

  • ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋‚ด๋ณด๋‚ผ ๋•Œ ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉ
  • ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์—์„œ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๋‚ด๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉ

์˜ˆ์ œ1 - Named Export, Named Import

// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
// main.js
import { add, subtract } from './math.js';
console.log(add(5, 3)); // ์ถœ๋ ฅ: 8
console.log(subtract(10, 4)); // ์ถœ๋ ฅ: 6

๐ŸŸฉ Default Export / import

  • ๋ชจ๋“ˆ ๋‹น ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋‚ด๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉ
  • ๋ชจ๋“ˆ ์ „์ฒด๊ฐ€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ ์œ ์šฉ
  • import ์‹œ ๋ช…์นญ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

์˜ˆ์ œ1 - Default Export, Default Import

// math.js
const add = (a, b) => a + b;
export default add;
// math.js
const add = (a, b) => a + b;
export default add;

Named Export/import์™€ Default Export/import ์ฐจ์ด์ 

Named Export/importDefault Export/import
์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•ญ๋ชฉํ•˜๋‚˜์˜ ํ•ญ๋ชฉ
๊ฐ€์ ธ์˜ฌ ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •๊ฐ€์ ธ์˜ฌ ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์„ ์ž„์˜๋กœ ์ง€์ •
์ค‘๊ด„ํ˜ธ ์—†์ด ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๊ฐ€์ ธ์˜ฌ ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•ด์•ผ ํ•จ

๐ŸŒผ Tree-shaking

  • ์‚ฌ์šฉ ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ–‰์œ„
  • ESM ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์ž‘๋™
  • ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ์— ๋งค์šฐ ์ค‘์š”ํ•œ ๋‹จ๊ณ„

๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

ํ”„๋กœ์ ํŠธ ์š”๊ตฌ ์‚ฌํ•ญ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ณ ๋ ค

๐ŸŒฑ CommonJS (CJS)

  • ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
  • Node.js๋ฅผ ํ™œ์šฉํ•œ SSR ๊ฐœ๋ฐœ์‹œ ์‚ฌ์šฉ
  • ๊ธฐ์กด node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

๐ŸŒฑ ES Module (ESM)

  • ์ตœ์‹  ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
  • ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ํ™˜๊ฒฝ (Tree-shaking, Code Splitting, Dynamic Imports - Lazy Loading)
  • FE - BE ์Šคํ…์„ ๋งž์ถ”๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

CJS์™€ ESM์˜ ์ฐจ์ด์ 

Named Export/importDefault Export/import
๋™๊ธฐ์ ์œผ๋กœ ํ•„์š”ํ•œ ์‹œ์ ์— ๋ชจ๋“ˆ์ด ํ•œ ๋ฒˆ์— ๋กœ๋“œ๋จ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“ˆ์ด ๋กœ๋“œ๋จ
module.exports ๋ฐ require()๋ฅผ ์‚ฌ์šฉexport ๋ฐ import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉ
Node.js ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ Node.js์—์„œ ๋ชจ๋‘ ์ง€์›๋จ
์ฃผ๋กœ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉ๋จํ”„๋ก ํŠธ์—”๋“œ ๋ฐ ๋ฐฑ์—”๋“œ ๋ชจ๋‘์—์„œ ๋ชจ๋“ˆํ™”๋ฅผ ์œ„ํ•ด ๋„๋ฆฌ ์‚ฌ์šฉ๋จ

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