ES6-import&export-example.md

๐Ÿก

Modern JavaScript Development: Modules and Tooling

Import & Export ์‹ค์Šต

  • ํ•˜์œ„ ๋ชจ๋“ˆ๋“ค์˜ import์™€ ๋‹ค์šด๋กœ๋“œ, ๋งํฌ, ์‹คํ–‰์ด ์ด๋ค„์ง„ ํ›„, ๋ฉ”์ธ ๋ชจ๋“ˆ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

image

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
    • script.js : ๋ฉ”์ธ ๋ชจ๋“ˆ

      import { addToCart, cart } from "./shoppingCart.js"; 
      // a. importํ•˜๊ณ  downloadํ•ฉ๋‹ˆ๋‹ค.
      // b. exports๋ฅผ import์™€ linkํ•ฉ๋‹ˆ๋‹ค.
      // c. ํ•˜์œ„ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. => shoppingCart๋กœ
      ...
      // e. ํ•˜์œ„ ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ exportํ•ฉ๋‹ˆ๋‹ค.
      // f. ๋ฉ”์ธ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      
      console.log("import & download - ๋ฉ”์ธ ๋ชจ๋“ˆ");
      addToCart(600, "apple"); // addToCart๋Š” shoppingCart์—์„œ importํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 
      addToCart(1, "pineapple");
      
      console.log(
        "cart: " +
          cart.map((e) => `\n{product: ${e.product} quantity: ${e.quantity}}`)
      		// cart๋Š” [{{product: 600 quantity: apple}, {product: 1 quantity: pineapple}] ์ž…๋‹ˆ๋‹ค.
      		// ํ•ด๋‹น ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜ํ™˜๊ฒฝ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(ํด๋กœ์ €)
      		// importํ•œ cart๋Š” exports์˜ cart์™€ link๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, 
      		// ์ดํ›„์— ๋ฐ”๋€ ๊ฐ’์„ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      );
      
      ๐Ÿ‘‰ console.log(cart)
      
      ํ•ด๋‹น ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์˜ ๋ณ€์ˆ˜ํ™˜๊ฒฝ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(ํด๋กœ์ €)
      importํ•œ cart๋Š” exports์˜ cart์™€ link๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—,  ์ดํ›„์— ๋ฐ”๋€ ๊ฐ’์„ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      
    • shoppingCart.js : ํ•˜์œ„ ๋ชจ๋“ˆ

      console.log("importํ•œ ๋ชจ๋“ˆ ์‹คํ–‰"); // c. ํ•˜์œ„ ๋ชจ๋“ˆ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      const shippingCost = 3500;
      export const cart = [];
      // e. ํ•˜์œ„ ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ exportํ•ฉ๋‹ˆ๋‹ค.
      
      export const addToCart = (product, quantity) => {
        // e. ํ•˜์œ„ ๋ชจ๋“ˆ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ํ›„, ๊ฒฐ๊ณผ๋ฅผ exportํ•ฉ๋‹ˆ๋‹ค.
        cart.push({ product, quantity });
        console.log(`${quantity} ${product} added to cart`);
      };
      
      console.log("cart: " + cart);
      // d. ํ•˜์œ„ ๋ชจ๋“ˆ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ cart๋Š” []์ž…๋‹ˆ๋‹ค.
      console.log("exporting - importํ•œ ๋ชจ๋“ˆ๊ณผ link");
      

      image

  • import ๋ณ€์ˆ˜๋ช…์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    import { addToCart as ๋”ํ•˜๊ธฐ, cart as ๋ฐ”๊ตฌ๋‹ˆ } from "./shoppingCart.js";
    
    console.log("import & download - ๋ฉ”์ธ ๋ชจ๋“ˆ");
    ๋”ํ•˜๊ธฐ(600, "apple");
    ๋”ํ•˜๊ธฐ(1, "pineapple");
    
    console.log(
      "cart: " +
        ๋ฐ”๊ตฌ๋‹ˆ.map((e) => `\n{product: ${e.product} quantity: ${e.quantity}}`)
    );
    
  • ์™€์ผ๋“œ์นด๋“œ๋กœ ์ „๋ถ€ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ, ์ฒซ๊ธ€์ž ๋Œ€๋ฌธ์ž๋กœ conventionํ•œ ๋’ค, public API์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    import * as ShoppingCart from './shoppingCart'
    ...
    ShoppingCart.totalPrice
    
  • default export์™€ export๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋ณต์žกํ•ด์ง€๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
    import add, { cart } from "./shoppingCart.js";