ES6 lessons 8. 모듈

2023. 4. 3. 12:38·프로그래밍/js

2023.04.02

자바스크립트 스터디 11회차

공부 사이트: https://poiemaweb.com/

 

 

8. 모듈

모듈: 애플리케이션을 구성하는 개별적 요소. 재사용 가능한 코드 조각을 의미한다.

 

1) 모듈 스코프

HTML에서 자바스크립트 파일 2개를 로드하면 해당 파일들은 하나의 전역을 공유한다.

그러니 ES6의 모듈은 파일 자체의 스코프를 제공하기에, 독자적은 모듈 스코프를 갖는다.

모듈 내에서 var 키워드로 선언한 변수는 전역 변수가 아니게 되며, window 객체의 프로퍼티가 아니게 된다.

 

// m1.mjs

var x = 'test';

console.log(x);
//console.log(window.x);   //window is not defined
// m2.mjs

var x = 'TEST';

console.log(x);
//console.log(window.x);  //window is not defined
// test.html
<!DOCTYPE html>
<html>
<body>
  <script type="module" src="m1.mjs"></script>
  <script type="module" src="m2.mjs"></script>
</body>
</html>

 

위 코드를 로컬에서 실행하면 CORS 문제가 발생한다.

서버에서 실행시켜주어야 콘솔에 로그가 찍힌다. (express 사용)

실행결과

 

2) export 키워드

모듈 안에 선언한 식별자를 외부에 공개하여 다른 모듈이 참조할 수 있게 하고 싶다면 export 키워드를 사용한다. 함수, 변수, 클래스 모두 export할 수 있다.

export 방법은 두 가지가 있는데, ①각각 export 키워드를 붙여주는 것과 ②마지막에 하나의 객체로 구성하여 한번에 export 하는 것이다.

// #1
export const pi = Math.PI;

export function square(x) { 
    return x * x;
}

export class Person {
    constructor(name){
        this.name = name;
    }
}
// #2
const pi = Math.PI;

function square(x) { 
    return x * x;
}

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

// 하나의 객체로 구성하여 공개할 수 있다.
export {pi, square, Person};

 

 

3) import 키워드

export된 대상을 로드하기 위해 import 키워드를 사용한다.

 

① 개별 import

// m2.mjs

// 개별 import
import {pi, square, Person} from './m1.mjs';

console.log(pi);
console.log(square(10));
console.log(new Person('홍길동'));

 

② 한번에 모두 import

이 경우, as 뒤에 지정한 이름의 객체(코드에선 m1) 프로퍼티로 할당된다.

// m2.mjs

// 한번에 import
import * as m1 from './m1.mjs';

console.log(m1.pi);
console.log(m1.square(10));
console.log(new m1.Person('홍길동'));

 

③ 이름을 변경하여 import 가능

// m2.mjs

import {pi as PI} from './m1.mjs';

console.log(PI);

 

④ default

모듈에서 하나만을 export할 때, default 키워드를 사용할 수 있다. 기본적으로 내보내는 값을 정의한다.

 

 

저작자표시 (새창열림)

'프로그래밍 > js' 카테고리의 다른 글

ES6 lessons 10. 심볼  (0) 2023.04.03
ES6 lessons 9. 프로미스  (1) 2023.04.03
ES6 lessons 7. 클래스  (0) 2023.03.28
ES6 lessons. 6 Destructuring  (0) 2023.03.28
ES6 lessons 5. 향상된 객체 리터럴  (0) 2023.03.26
'프로그래밍/js' 카테고리의 다른 글
  • ES6 lessons 10. 심볼
  • ES6 lessons 9. 프로미스
  • ES6 lessons 7. 클래스
  • ES6 lessons. 6 Destructuring
병뚜
병뚜
열정!
  • 병뚜
    열려라 뚜껑
    병뚜
  • 전체
    오늘
    어제
    • all (372)
      • 일상X사랑X돈 (0)
        • 보안이슈 (114)
        • 뜨거운감자 (9)
        • 맛집 (2)
        • 혼잣말 (16)
      • 보안 (87)
        • 웹·모바일 (46)
        • 인프라 (19)
        • 리버싱 (8)
        • Security-Gym (10)
        • 리뷰 (4)
      • 프로그래밍 (66)
        • python (14)
        • java (12)
        • js (40)
      • System (47)
        • OS (14)
        • 침투 (33)
      • Play (20)
        • wargame (20)
      • 기타 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바스크립트 상속
    파이썬입문
    혼공학습단
    보안이슈
    혼공
    파이썬
    악성코드
    혼공파
    커널디버깅
    드림핵리버싱
    it이슈
    공급망공격
    혼자공부하는파이썬
    뉴스요약
    리버싱
    혼공단
    정보보호
    정보보안교육
    정보보안
    파이썬초보
    프로세스
    jwt
    리버싱초보
    보안뉴스
    파이썬공부
    windows internals
    kisa
    랜섬웨어
    윈도우인터널스
    IT뉴스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
병뚜
ES6 lessons 8. 모듈
상단으로

티스토리툴바