Javascript/Javascript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] export default

Rainbow๐ŸŒˆCoder 2022. 5. 17. 10:55
728x90

https://ko.javascript.info/import-export#ref-4122

 

๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ด๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ

 

ko.javascript.info

 

๋ชจ๋“ˆ์€ ํฌ๊ฒŒ ๋‘ ์ข…๋ฅ˜๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. ๋ณต์ˆ˜์˜ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜•ํƒœ์˜ ๋ชจ๋“ˆ(์œ„ ์˜ˆ์‹œ์˜ say.js)
  2. ๊ฐœ์ฒด ํ•˜๋‚˜๋งŒ ์„ ์–ธ๋˜์–ด์žˆ๋Š” ๋ชจ๋“ˆ(์•„๋ž˜์˜ user.js. class User ํ•˜๋‚˜๋งŒ ๋‚ด๋ณด๋‚ด๊ธฐ ํ•จ)

๋Œ€๊ฐœ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์œผ๋กœ ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฑธ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ณ€์ˆ˜ ๋“ฑ์˜ ๊ฐœ์ฒด๋Š” ์ „์šฉ ๋ชจ๋“ˆ ์•ˆ์— ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋ ˆ ํŒŒ์ผ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋”๋ผ๋„ ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ž˜ ์ง€์–ด์ฃผ๊ณ , ํด๋”์— ํŒŒ์ผ์„ ์ž˜ ๋‚˜๋ˆ  ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ฝ”๋“œ ํƒ์ƒ‰์ด ์–ด๋ ต์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋Š” ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์€ export default๋ผ๋Š” ํŠน๋ณ„ํ•œ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. export default๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 'ํ•ด๋‹น ๋ชจ๋“ˆ์—” ๊ฐœ์ฒด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋‹ค’๋Š” ์‚ฌ์‹ค์„ ๋ช…ํ™•ํžˆ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๊ฐœ์ฒด ์•ž์— export default๋ฅผ ๋ถ™์—ฌ๋ด…์‹œ๋‹ค.

 

// ๐Ÿ“ user.js
export default class User { // export ์˜†์— 'default'๋ฅผ ์ถ”๊ฐ€ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.
  constructor(name) {
    this.name = name;
  }
}

ํŒŒ์ผ ํ•˜๋‚˜์—” ๋Œ€๊ฐœ export default๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ default๋ฅผ ๋ถ™์—ฌ์„œ ๋ชจ๋“ˆ์„ ๋‚ด๋ณด๋‚ด๋ฉด ์ค‘๊ด„ํ˜ธ {} ์—†์ด ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

// ๐Ÿ“ main.js
import User from './user.js'; // {User}๊ฐ€ ์•„๋‹Œ User๋กœ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

new User('John');

named exportdefault export

export class User {...} export default class User {...}
import {User} from ... import User from ...

์‚ฌ์‹ค named export์™€ default export๋ฅผ ๊ฐ™์€ ๋ชจ๋“ˆ์—์„œ ๋™์‹œ์— ์‚ฌ์šฉํ•ด๋„ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‹ค๋ฌด์—์„  ์ด๋ ‡๊ฒŒ ์„ž์–ด ์“ฐ๋Š” ์‚ฌ๋ก€๊ฐ€ ํ”์น˜ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ํŒŒ์ผ์—” named export๋‚˜ default export ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ๋‹น ์ตœ๋Œ€ ํ•˜๋‚˜์˜ default export๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‚ด๋ณด๋‚ผ ๊ฐœ์ฒด์—” ์ด๋ฆ„์ด ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ์˜ ๊ฐœ์ฒด์—” ์ด๋ฆ„์ด ์—†์ง€๋งŒ ๋ชจ๋‘ ์—๋Ÿฌ ์—†์ด ์ž˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

export default class { // ํด๋ž˜์Šค ์ด๋ฆ„์ด ์—†์Œ
  constructor() { ... }
}
export default function(user) { // ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†์Œ
  alert(`Hello, ${user}!`);
}
// ์ด๋ฆ„ ์—†์ด ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๊ฐ’์„ ๋‚ด๋ณด๋ƒ„
export default ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

export default๋Š” ํŒŒ์ผ๋‹น ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์ด ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ํ•˜๋ ค๋Š” ๋ชจ๋“ˆ์—์„  ์ค‘๊ด„ํ˜ธ ์—†์ด๋„ ์–ด๋–ค ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฆ„์ด ์—†์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

default๋ฅผ ๋ถ™์ด์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฐœ์ฒด์— ์ด๋ฆ„์ด ์—†๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

export class { // ์—๋Ÿฌ! (default export๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—” ์ด๋ฆ„์ด ๊ผญ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.)
  constructor() {}
}

‘default’ name

default ํ‚ค์›Œ๋“œ๋Š” ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์šฉ๋„๋กœ ์ข…์ข… ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€์™€ ๋–จ์–ด์ง„ ๊ณณ์—์„œ default ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function sayHi(user) {
  alert(`Hello, ${user}!`);
}

// ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€ ์•ž์— 'export default'๋ฅผ ๋ถ™์—ฌ์ค€ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
export {sayHi as default};

ํ”์น˜ ์•Š์ง€๋งŒ user.js๋ผ๋Š” ๋ชจ๋“ˆ์— ‘default’ export ํ•˜๋‚˜์™€ ๋‹ค์ˆ˜์˜ named export๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ด…์‹œ๋‹ค.

// ๐Ÿ“ user.js
export default class User {
  constructor(name) {
    this.name = name;
  }
}

export function sayHi(user) {
  alert(`Hello, ${user}!`);
}

์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด default export์™€ named export๋ฅผ ๋™์‹œ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๐Ÿ“ main.js
import {default as User, sayHi} from './user.js';

new User('John');

* ๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—” default ํ”„๋กœํผํ‹ฐ๋Š” ์ •ํ™•ํžˆ default export๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

// ๐Ÿ“ main.js
import * as user from './user.js';

let User = user.default; // default export
new User('John');

default export์˜ ์ด๋ฆ„์— ๊ด€ํ•œ ๊ทœ์น™

named export๋Š” ๋‚ด๋ณด๋ƒˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ๊ด€๋ จ ์ •๋ณด๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚ด๋ณด๋‚ด๊ธฐ ํ•  ๋•Œ ์“ด ์ด๋ฆ„๊ณผ ๊ฐ€์ ธ์˜ค๊ธฐ ํ•  ๋•Œ ์“ธ ์ด๋ฆ„์ด ๋™์ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ์ฃ .

import {User} from './user.js';
// import {MyUser}์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ {User}์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

named export์™€๋Š” ๋‹ค๋ฅด๊ฒŒ default export๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import User from './user.js'; // ๋™์ž‘
import MyUser from './user.js'; // ๋™์ž‘
// ์–ด๋–ค ์ด๋ฆ„์ด๋“  ์—๋Ÿฌ ์—†์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ์ž์œ ๋กญ๊ฒŒ ์ด๋ฆ„์„ ์ง“๋‹ค ๋ณด๋ฉด ๊ฐ™์€ ๊ฑธ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ๋„ ์ด๋ฆ„์ด ๋‹ฌ๋ผ ํ˜ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ณ  ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด default export ํ•œ ๊ฒƒ์„ ๊ฐ€์ ธ์˜ฌ ๋• ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋„๋ก ํŒ€์›๋ผ๋ฆฌ ๋‚ด๋ถ€ ๊ทœ์น™์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import User from './user.js';
import LoginForm from './loginForm.js';
import func from '/path/to/func.js';
...

๊ทธ๋Ÿฐ๋ฐ ๊ทœ์น™์ด ์žˆ์–ด๋„ ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํŒ€์€ named export๋งŒ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ฐ•์ œํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ํ•˜๋‚˜์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๋งŒ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์—๋„ default ์—†์ด ์ด๋ฆ„์„ ๋ถ™์—ฌ ๋‚ด๋ณด๋‚ด๋ฉด ํ˜ผ๋ž€์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์ด๋Ÿฐ ๊ทœ์น™์€ ์•„๋ž˜์—์„œ ๋ฐฐ์šธ ๋ชจ๋“ˆ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

728x90