๋ฉด์ ‘-JavaScript #04 | ๋ชจ๋“ˆ

๐Ÿ“š ๊ฐœ๋… ์š”์•ฝ

๋ชจ๋˜ JS Deep dive #48 | ๋ชจ๋“ˆ

๐Ÿ’ก ์งˆ๋ฌธ

โ“ JS์˜ ๋ชจ๋“ˆ

(๋ฏธ๊ด„์‹)

๋จผ์ € ๋ชจ๋“ˆ์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์ด ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ์€ ์ž์‹ ๋งŒ์˜ ํŒŒ์ผ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐœ๋ณ„์  ์กด์žฌ๋กœ์„œ ๋ถ„๋ฆฌ์‹œํ‚ค๋ผ, ๊ณต๊ฐœ๊ฐ€ ํ•„์š”ํ•œ ์ž์‚ฐ์— ํ•œ์ •ํ•˜์—ฌ ์„ ํƒ์  ๊ณต๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผํ•˜๊ณ , ๋ชจ๋“ˆ ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“ˆ์ด ๊ณต๊ฐœํ•œ ์ž์‚ฐ ์ค‘ ์ผ๋ถ€๋ฅผ ์ž์‹ ์˜ ์Šค์ฝ”ํ”„๋กœ ๋ถˆ๋Ÿฌ๋“ค์—ฌ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ export์™€ import๋ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ณ„์  ์กด์žฌ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผํ•˜๊ณ , import, export ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์„ JS๋Š” ํƒœ์ƒ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. scriptํƒœ๊ทธ๋กœ ๋กœ๋“œํ•ด๋„ JSํŒŒ์ผ๋“ค์ด ๊ฒฐ๊ตญ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ–ˆ๊ณ , ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Node js๋ผ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ชจ๋“ˆ์˜ ํ•„์š”์„ฑ์„ ๋А๊ปด CommonJS ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ชจ๋“ˆ๊ธฐ๋Šฅ์„ ์ง€์›ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„์— ES6์—์„œ๋„ ๋ชจ๋“ˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๊ณ , ์ด ESM์€ ๊ธฐ์กด scriptํƒœ๊ทธ์— type=โ€œmoduleโ€์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“ˆ๋กœ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โ“ import/export & require/exports

import / export ๋Š” ESM ๋ฐฉ์‹์ด๊ณ  require/exports๋Š” NodeJS์—์„œ ์‚ฌ์šฉ๋˜๋Š” CommonJS ํ‚ค์›Œ๋“œ ์ž…๋‹ˆ๋‹ค.

๋‘๊ฐœ์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์€ ๊ณตํ†ต์ ์œผ๋กœ exports๊ฐ์ฒด๋ผ๋Š” ๊ฒƒ์„ ํ†ตํ•ด ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ๋‚ด๋ณด๋‚ด์ง€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉ์‹์€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฌธ๋ฒ•์ ์ธ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ NodeJS์—์„œ๋„ package.json์— type์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ESM์ฒ˜๋Ÿผ import๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.