FRONTMANFRONTMAN
  • 태그
  • 방명록
  • 글쓰기
  • 관리자
  • HOME
  • 태그
  • 방명록
JavaScript 모듈이란? (export, import)
hahekaku
JavaScript 모듈이란? (export, import)Language/JavaScript2023. 10. 14. 01:29@hahekaku
Table of Contents

JavaScript 모듈이란?

자바스크립트 모듈은 코드의 재사용성과 유지보수성을 높이기 위해 코드의 일부를 별도의 파일로 분리한 것을 의미합니다. 이 모듈을 통해 특정 코드 블록을 독립적으로 작성하고 관리할 수 있습니다. 모듈은 export와 import를 통해 서로 연결되며, 이를 통해 필요한 기능을 다른 파일에서 가져와 사용할 수 있습니다.

모듈의 필요성

  • 코드 재사용성: 한 번 작성된 코드를 여러 곳에서 재사용 가능.
  • 가독성: 코드를 기능별로 분리해 복잡도를 줄임.
  • 유지보수성: 특정 기능의 코드만 수정하거나 교체 가능.
  • 스코프 관리: 글로벌 스코프를 오염시키지 않음.

export와 import의 기본 사용법

export - 모듈에서 코드 내보내기

export 키워드를 사용해 함수, 변수, 클래스 등을 다른 파일에서 사용할 수 있도록 내보냅니다.

예제: 단일 내보내기 (named export)

// math.js
export const add = (num1, num2) => num1 + num2;
export const subtract = (num1, num2) => num1 - num2;

예제: 기본 내보내기 (default export)

// greet.js
const greet = (name) => `안녕하세요, ${name}!`;
export default greet;

import - 모듈에서 코드 가져오기

import 키워드를 사용해 다른 파일에서 export된 코드를 가져옵니다.

예제: 단일 가져오기 (named import)

// main.js
import { add, subtract } from './math.js';

console.log(add(5, 3)); // 8
console.log(subtract(10, 7)); // 3

예제: 기본 가져오기 (default import)

// main.js
import greet from './greet.js';

console.log(greet('홍길동')); // 안녕하세요, 홍길동!

export와 import의 다양한 형태

별칭 사용하기 (as 키워드)

이름 충돌을 방지하거나 더 이해하기 쉬운 이름으로 사용할 때 유용합니다.

// math.js
export const multiply = (a, b) => a * b;

// main.js
import { multiply as mul } from './math.js';

console.log(mul(4, 5)); // 20

전체 모듈 가져오기

모든 named export를 하나의 객체로 가져옵니다.

// math.js
export const divide = (a, b) => a / b;
export const modulo = (a, b) => a % b;

// main.js
import * as MathUtils from './math.js';

console.log(MathUtils.divide(10, 2)); // 5
console.log(MathUtils.modulo(10, 3)); // 1

모듈의 실제 활용

예제: 쇼핑몰 주문 관리 시스템

상품 데이터 관리 (product.js)

// product.js
export const products = [
  { id: 1, name: '컴퓨터', price: 1000000 },
  { id: 2, name: '키보드', price: 50000 },
];

export const findProductById = (id) =>
  products.find((product) => product.id === id);

주문 처리 (order.js)

// order.js
import { findProductById } from './product.js';

export const createOrder = (productId, quantity) => {
  const product = findProductById(productId);
  if (!product) {
    throw new Error('상품을 찾을 수 없습니다.');
  }
  return {
    product,
    quantity,
    total: product.price * quantity,
  };
};

메인 실행 파일 (main.js)

// main.js
import { createOrder } from './order.js';

const order = createOrder(1, 2);
console.log(order);
// 출력: { product: { id: 1, name: '컴퓨터', price: 1000000 }, quantity: 2, total: 2000000 }

주의사항

  1. 파일 확장자: import할 때 파일 확장자를 포함해야 합니다 (.js).
    import { add } from './math.js'; // O
    import { add } from './math'; // X
  2. 순환 참조: 두 모듈이 서로를 import하면 의존성 문제가 발생할 수 있으므로 주의해야 합니다.
  3. 상대 경로와 절대 경로: ./ 또는 ../로 상대 경로를 사용하는 것이 일반적이지만, 절대 경로를 설정하면 편리합니다.

결론

자바스크립트의 export와 import는 코드 모듈화를 지원하여 대규모 애플리케이션에서 유지보수성과 재사용성을 극대화할 수 있는 중요한 기능입니다. 실제 프로젝트에서 이러한 기능을 효율적으로 사용하려면 파일 구조를 명확히 하고, 모듈 간 의존성을 최소화하는 것이 중요합니다.

 

'Language > JavaScript' 카테고리의 다른 글

HTML, CSS, JavaScript로 계산기 만들기  (0) 2023.10.15
NPM(Node Package Manager)와 라이브러리 설치법  (0) 2023.10.14
JavaScript ES6 주요 문법 (let, const, arrow function)  (0) 2023.10.14
JavaScript의 this 이해하기  (0) 2023.10.14
스코프(Scope)와 호이스팅(Hoisting)  (0) 2023.10.13
Language/JavaScript 추천 글
more
  • HTML, CSS, JavaScript로 계산기 만들기
    HTML, CSS, JavaScript로 계산기 만들기2023.10.15
  • NPM(Node Package Manager)와 라이브러리 설치법
    NPM(Node Package Manager)와 라이브러리 설치법2023.10.14
  • JavaScript ES6 주요 문법 (let, const, arrow function)
    JavaScript ES6 주요 문법 (let, const, arrow function)2023.10.14
  • JavaScript의 this 이해하기
    JavaScript의 this 이해하기2023.10.14
FRONTMAN

검색

250x250

방문자 수

Total
Today
Yesterday

카테고리

  • 분류 전체보기 (54)
    • Language (48)
      • JavaScript (15)
      • TypeScript (14)
      • Python (14)
      • Dart (5)
      • Java (0)
    • FE (6)
      • WEB (4)
      • React (0)
      • Flutter (1)
    • CS (0)
      • Algorithm (0)
      • Network (0)
    • DevOps (0)

공지사항

  • 전체보기

최근 글

인기 글

태그

  • Flutter
  • DART
  • CLASS
  • npm
  • JavaScript
  • frontend
  • 타입
  • function
  • 파이썬
  • Python
  • nodejs
  • Type
  • js
  • tuple
  • 타입스크립트
  • Interface
  • 자바스크립트
  • Object
  • 웹
  • OOP
  • inline frame
  • export
  • web
  • typeScript
  • await
  • list
  • Import
  • async
  • Modules
  • 리스트

최근 댓글

FRONTMAN :: hahekaku
CopyrightBluemivDesigned byBluemiv

티스토리툴바