Named export์™€ Default export

ยท 812 words ยท 2 minute read

๊ฐœ์š” ๐Ÿ”—

๋ชจ๋“ˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฐ˜์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“ˆ ๋ฐฉ์‹์€ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. ํŠนํžˆ default export์™€ named export ๋ผ๋Š” export ๋ฐฉ์‹๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ๋ฌธ๋ฒ• ํ˜ธํ™˜ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ export์™€ import, require๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค.

์ด ๋ฌธ์„œ์—์„œ๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ default, named export ๊ฐ๊ฐ์„ ๊ตฌํ˜„ํ•œ ๋’ค import, require ํ‚ค์›Œ๋“œ ๊ฐ๊ฐ์„ ์ด์šฉํ•˜์˜€์„ ๋•Œ ๋ ˆํผ๋Ÿฐ์Šค ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

์ง์ ‘ ํ™•์ธํ•ด๋ณด์ž ๐Ÿ”—

์ฒซ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๐Ÿ”—

๋จผ์ € exportํ•  ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค.

// Named Export๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค
export class NamedExportClass {
    test() {
        console.log("Named Export Class")
    }
}

// Default Export๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค: ํ‚ค์›Œ๋“œ default๋ฅผ ๊ฐ–๋Š”๋‹ค.
export default class DefaultExportClass {
    test () {
        console.log("Default Export Class")
    }

}

์ด์ œ importํ•˜๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค€๋’ค tsc ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋“ค์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ๋กœ Trans-compile ํ•œ๋‹ค.

import DefaultClass, {NamedExportClass}  from './exportObj'

const defaultObj = new DefaultClass()
const namedObj = new NamedExportClass()

defaultObj.test()
namedObj.test()

์ด ๋•Œ, ๋ˆˆ์—ฌ๊ฒจ ๋ด์•ผํ•  ์ ์€ export default class ...๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ DefaultExportClass๊ฐ€ ์•„๋‹Œ DefaultClass(์ž„์˜ ์ด๋ฆ„)์œผ๋กœ ์ •ํ•˜์—ฌ importํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์†Œ์Šค ๋‚ด์˜ ์ด๋ฆ„ DefaultClass ์ด๋ฆ„ ๋Œ€์‹  ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ๋„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ๊ฐ™๋‹ค.

โžœ  jsImport git:(master) โœ— tsc *.ts && node importTest
Default Export Class
Named Export Class

๋‘ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๐Ÿ”—

์ด๋ฒˆ์—๋Š” import ์‹œ์— require ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

import constObj = require('./exportObj')
console.log(constObj)

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

{ __esModule: true,
  NamedExportClass: [Function: NamedExportClass],
  default: [Function: DefaultExportClass] }

์ฆ‰, export ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

์„ธ ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ ๐Ÿ”—

๊ทธ๋ ‡๋‹ค๋ฉด, ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ defaul export ๋กœ ์ •์˜ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๊ธฐ์กด ์ฝ”๋“œ์—์„œ new DefaultClass()๋Š” ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๊ฐ€ ๋˜๊ณ  DefaultClass ์ž์ฒด๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ require๋ฅผ ์ด์šฉํ•ด ๊ฐ€์ ธ์˜จ constObj๋Š” export๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

Default Export Class
Named Export Class
{ __esModule: true,
  NamedExportClass: [Function: NamedExportClass],
  DefaultExportClass: [Function: DefaultExportClass],
  default: DefaultExportClass {} }

์ •๋ฆฌ ๐Ÿ”—

๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด, require๋ฅผ ์ด์šฉํ•ด import๋ฅผ ํ•  ๊ฒฝ์šฐ์—๋Š” export ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ, default export์™€ named export๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด import๋ฅผ ์ด์šฉํ•ด ๋Œ€๊ด„ํ˜ธ({ })๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

์ถœ์ฒ˜ ๐Ÿ”—