https://ko.javascript.info/import-export#ref-4122
๋ชจ๋ ๋ด๋ณด๋ด๊ณ ๊ฐ์ ธ์ค๊ธฐ
ko.javascript.info
๋ชจ๋์ ํฌ๊ฒ ๋ ์ข ๋ฅ๋ก ๋๋ฉ๋๋ค.
- ๋ณต์์ ํจ์๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ์ ๋ชจ๋(์ ์์์ say.js)
- ๊ฐ์ฒด ํ๋๋ง ์ ์ธ๋์ด์๋ ๋ชจ๋(์๋์ 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 ์์ด ์ด๋ฆ์ ๋ถ์ฌ ๋ด๋ณด๋ด๋ฉด ํผ๋์ ๋ฐฉ์งํ ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ .
์ด๋ฐ ๊ท์น์ ์๋์์ ๋ฐฐ์ธ ๋ชจ๋ ๋ค์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฝ๊ฒ ํด์ค๋ค๋ ์ฅ์ ๋ ์์ต๋๋ค.
'Javascript > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ์คํฌ๋ฆฝํธ] ์ต๋ช ํจ์, ํ์ดํ ํจ์, ์ฝ๋ฐฑํจ์ (0) | 2022.05.22 |
---|---|
[์๋ฐ์คํฌ๋ฆฝํธ] crazy this, ํท๊ฐ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ this ์์ ์ด์ ๋ฆฌ (0) | 2022.05.22 |
[์๋ฐ์คํฌ๋ฆฝํธ] ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐฌ์ฑ (0) | 2022.05.10 |
[์๋ฐ์คํฌ๋ฆฝํธ] module ์ฌ์ฉ๋ฒ 3๊ฐ์ง (0) | 2022.05.09 |
[์๋ฐ์คํฌ๋ฆฝํธ] ์กฐ์ฝ๋ฉ-์นด์นด์คAPI ํ์ฉ์ค์ต (0) | 2022.05.07 |