티스토리 뷰

require

require는 모듈을 가져오는 방식이다.

노드에서는 각 파일 하나를 모듈로 취급한다. 그리고 그 모듈을 가져오는 함수가 require 이다.

모듈을 사용하는 키워드를 보면 require 도 볼 수 있지만 importfrom 을 사용하는 것도 볼 수 있다.
require 는 Node에서 사용되고 있는 CommonJS 방식이고, import 는 ES6에 새로 도입된 방식이다. 두 개의 키워드 모두 다른 파일의 코드를 불러 오는 모듈의 역할을 한다.

하지만, 만약 <script> 태그를 사용하는 브라우저 환경이나, CommonJS를 기본 모듈시스템으로 채택하고 있는 Node같은 경우에는 Babel과 같은 transpile 도구를 사용하지 않는 한 require 를 사용해야 한다.

그럼 require 함수가 어떻게 작동하는지 조금 더 자세히 살펴보자.

일단 변수를 하나 만들고 해당 변수를 모듈로서 사용해보자.

food.js 파일을 만들고 그 아래에 아래와 같이 변수를 만들고 export 했다.

const foods = ['chicken', 'pizza']

module.exports = foods

이제 main.js 에서 해당 모듈을 사용 해 보자.

const foods = require('./food')

console.log(foods)

이렇게 불러와 사용해보았다.

node main.js 
[ 'chicken', 'pizza' ]

결과가 잘 출력되는 것을 확인할 수 있다.

이번엔, 모듈을 여러번 호출해서 사용해 보겠다.

const foods1 = require('./food')
const foods2 = require('./food')

console.log(foods1 === foods2)

결과가 어떻게 찍혔을까? 결과는 true 로 찍혔다.

우리는 분명 모듈을 각각 따로 require하여 다른 변수에 담았는데 같다고 나오는 것이다.

이 이유는 우리가 각각 다른 변수에서 require하더라도 저 파일은 딱 한번만 실행되어 동일한 객체로서 사용되어 진다는 것이다. 즉 require할 때마다 파일이 실행되지 않는다.

const foods = ['chicken', 'pizza']

console.log('foods module loaded')

module.exports = foods

foods.js 를 위와 같이 수정하고 다시한번 테스트해보면 딱 한번만 load되는 것을 확인할 수 있다.

exports 와 module.exports

모듈을 내보내는 방법에는 exportsmodule.exports 가 있다.

사실 exports객체와 module.exports객체는 동일하다.

exports가 module.exports객체를 참조하고 있으며 최종적으로 리턴하는 값은 module.exports 이다.

쉽게 요약하자면 여러개의 객체를 내보내려고 할때 exports 의 변수의 속성으로 할당할 수 있다.

단일 객체를 내보낼 경우 module.exports 변수 자체에 할당할 수 있다.

그렇기에 위 두개의 코드는 같은 결과를 내는 코드가 되게 된다.

const foods = ['chicken', 'pizza']
const drinks = ['water', 'juice']

exports.foods = foods
exports.drink = drinks
const foods = ['chicken', 'pizza']
const drinks = ['water', 'juice']

module.exports = {
  foods,
  drinks,
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함