Javascript - Module

김태수·2021년 9월 15일
0

기타

목록 보기
11/11

Module

모듈이란 어플리케이션을 구성하는 개별적 요소로써, 재사용 가능한 코드 조각을 말한다. 일반적으로 모든 모듈은 기능을 기준으로 파일 단위로 분리한다. 이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다.

어플리케이션과 완전히 분리되어 개별적으로 존재하는 모듈은 재사용이 불가능하므로 존재의 의미가 없다. 모듈은 어플리케이션이나 다른 모듈에 의해 재사용되어야 의미가 있다. 따라서 모듈은 공개가 필요한 자산에 한정하여 명시적으로 선택적 공개가 가능하다. 이를 export라 한다.

공개된 모듈의 자산은 다른 모듈에서 재사용할 수 있다. 이때 공개된 모듈의 자산을 사용하는 모듈을 모듈 사용자라 하며 모듈 사용자는 모듈이 공개한 자산중 일부 또는 전체를 선택해 자신의 스코프 내로 불러들여 재사용할 수 있다. 이를 import라 한다.

자바스크립트의 모듈

자바스크립트는 초기에 웹페이지의 단순한 보조 기능을 처리하기 위한 제한적인 용도를 목적으로 태어났다. 이러한 태생적 한계로 인해 다른 프로그래밍 언어에는 존재하는 파일 스코프와 import, export를 지원하지 않았다.

그러나 자바스크립트를 브라우저 환경에 국한하지 않고 범용적으로 사용하려는 움직임이 생기면서 모듈 시스템은 반드시 해결해야 하는 핵심 과제가 되었다. 이런 상황에서 제안된 것이 CommonJS `ESM 이다.

node.js의 모듈

ES6(ESM) 모듈

ES6 모듈의 사용법은 간단하다. script 태그에 type="module" 어트리뷰트를 추가하면 로드된 자바스크립트 파일은 모듈로써 동작한다. ESM은 독자적인 모듈 스코프를 갖으며 일반적인 자바스크립트 파일을 script 태그로 분리해서 로드해도 독자적인 모듈 스코프를 갖지 않게된다.

모듈 내부에서 선언한 식별자를 외부에 공개하여 다른 모듈들이 재사용할 수 있게 하려면 export 키워드를 사용한다.
export 키워드는 선언문 앞에 사용하며 이로써 변수, 함수, 클래스등 모든 식별자를 export할 수 있다.

export const hello = 'world';

export function kim() {
  console.log('taesu');
}

export class Human {
  constructor(name) {
    this.name = name;
  }
}
const hello = 'world';

function kim() {
  console.log('taesu');
}

class Human {
  constructor(name) {
    this.name = name;
  }
}

export {hello, kim, Human};

위와같이 사용할 수 있다.

다른 모듈에서 공개(export)한 식별자를 자신의 모듈 스코프 내부로 로드하려면 import 키워드를 사용한다. 다른 모듈이 export한 식별자 이름으로 import해야 하며 ESM의 경우 파일 확장자를 생략할 수 없다.

import { hello, kim, Human} from './exports.mjs';

모듈에서 하나의 값만 export 한다면 default키워드를 사용할 수 있다. default 키워드를 사용하는 경우 기본적으로 이름 없이 하나의 값을 export 한다.
default 키워드를 사용하는 경우 var, let const 키워드는 사용할 수 없다.

export default x => x * x;
import square from './exports.mjs';

default 키워드로 export한 모듈은 {}없이 임의의 이름으로 import 한다.

profile
개발학습 일기

0개의 댓글