๐ ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ดํดํ๊ธฐ ๐

์๋ ํ์ธ์, ์ฌ๋ฌ๋ถ! ์ค๋์ ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ๋ํด ๊น์ด ์๊ฒ ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณผ ๊ฑฐ์์. ๐ค ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ํผ์ ์ผ๋ก, ๊ฐ๋ ฅํ ํ์ ์์คํ ๊ณผ ํจ๊ป ๋ชจ๋ํ๋ ์ฝ๋ ์์ฑ์ ์ง์ํฉ๋๋ค. ์ด๋ ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ๋ชจ๋์ฒ๋ผ ์กฐํฉํด ์๋ก์ด ๊ฐ์น๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ๊ณผ ๋น์ทํ์ฃ !
๐ก ์๊ณ ๊ณ์ จ๋์? ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์์ ์ธ ์์์ ๋๋ค. ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์์ผ์ฃผ์ฃ !
์, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ๋ํด ์์๋ณผ๊น์? ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์ฐพ์๋ณด๋ฏ, ์ฐ๋ฆฌ๋ ํ์ ์คํฌ๋ฆฝํธ์ ๋ค์ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ํํํด๋ด ์๋ค! ๐ต๏ธโโ๏ธ
๐ฆ ๋ชจ๋์ด๋ ๋ฌด์์ธ๊ฐ์?
๋ชจ๋์ ๊ฐ๋จํ ๋งํด ์ฝ๋๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์๋ก ๋ถ๋ฆฌํ ๊ฒ์ ๋๋ค. ํ์ ์คํฌ๋ฆฝํธ์์ ๋ชจ๋์ ํ์ผ ๋จ์๋ก ์ ์๋๋ฉฐ, ๊ฐ ํ์ผ์ ํ๋์ ๋ชจ๋๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ชจ๋์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฝ๋์ ์บก์ํ: ๋ชจ๋ ๋ด๋ถ์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ธ๋ถ๋ก๋ถํฐ ์จ๊ธธ ์ ์์ต๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ: ํ ๋ฒ ์์ฑํ ๋ชจ๋์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ๋ชจ๋ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๋ช ํํ ํ ์ ์์ต๋๋ค.
- ๋ค์์คํ์ด์ค ์ ๊ณต: ์ ์ญ ์ค์ฝํ์ ์ค์ผ์ ๋ฐฉ์งํฉ๋๋ค.
๐ ํ: ๋ชจ๋์ ์ ํ์ฉํ๋ฉด, ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์กฐํฉํด ๋ฉ์ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ฒ๋ผ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์กฐํํ ์ ์์ด์!
์ด์ ๋ชจ๋์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์์์ผ๋, ํ์ ์คํฌ๋ฆฝํธ์์ ์ด๋ป๊ฒ ๋ชจ๋์ ์ ์ํ๊ณ ์ฌ์ฉํ๋์ง ์์ธํ ์ดํด๋ณผ๊น์? ๐ง
๐ค ๋ชจ๋ ๋ด๋ณด๋ด๊ธฐ (Exporting)
ํ์ ์คํฌ๋ฆฝํธ์์ ๋ชจ๋์ ์ผ๋ถ๋ฅผ ์ธ๋ถ๋ก ๊ณต๊ฐํ๋ ค๋ฉด 'export' ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ง์น ์ฌ๋ฅ๋ท์์ ์์ ์ ์ฌ๋ฅ์ ๊ณต๊ฐํ๋ ๊ฒ๊ณผ ๋น์ทํ์ฃ ! ๐
๋ชจ๋์ ๋ด๋ณด๋ด๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค:
1. ๊ฐ๋ณ ๋ด๋ณด๋ด๊ธฐ
// math.ts
export const PI = 3.14159;
export function square(x: number): number {
return x * x;
}
export class Circle {
constructor(public radius: number) {}
area(): number {
return PI * this.radius * this.radius;
}
}
์ด๋ ๊ฒ ํ๋ฉด PI, square ํจ์, Circle ํด๋์ค๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ด๋ณด๋ผ ์ ์์ต๋๋ค.
2. ์ด๋ฆ ๋ฐ๊ฟ ๋ด๋ณด๋ด๊ธฐ
// math.ts
function add(a: number, b: number): number {
return a + b;
}
export { add as sum };
add ํจ์๋ฅผ sum์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ด๋ณด๋ ๋๋ค. ์ด๋ ํจ์์ ์ด๋ฆ์ ๋ ๋ช ํํ๊ฒ ๋ง๋ค๊ฑฐ๋, ์ด๋ฆ ์ถฉ๋์ ํผํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
3. ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ
// greeter.ts
export default function greet(name: string): string {
return `Hello, ${name}!`;
}
default ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ๋ชจ๋์ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ๋ชจ๋๋น ํ๋์ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.
๐ก ์ฐธ๊ณ : ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ ํด๋น ๋ชจ๋์ "๋ํ" ๊ธฐ๋ฅ์ ๋ํ๋ผ ๋ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ์์ ์ ๋ํ ์ฌ๋ฅ์ ๋ด์ธ์ฐ๋ ๊ฒ๊ณผ ๋น์ทํ์ฃ !
4. ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด๋ก ๋ด๋ณด๋ด๊ธฐ
// math.ts
const PI = 3.14159;
function square(x: number): number {
return x * x;
}
class Circle {
constructor(public radius: number) {}
area(): number {
return PI * this.radius * this.radius;
}
}
export { PI, square, Circle };
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํญ๋ชฉ์ ํ ๋ฒ์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ๋ชจ๋์ ๋๋ถ๋ถ์์ ํ๊บผ๋ฒ์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ ์ํ ๋ ์ ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋์ ๋ด๋ณด๋ผ ์ ์์ต๋๋ค. ๊ฐ ๋ฐฉ๋ฒ์ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ์ ํํ์ฌ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ์ ํธ๋ฆฌํฐ ํจ์๋ค์ ๊ฐ๋ณ ๋ด๋ณด๋ด๊ธฐ๋ฅผ, ํฐ ํด๋์ค๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์์ผ๋ก์.
๋ค์์ผ๋ก, ์ด๋ ๊ฒ ๋ด๋ณด๋ธ ๋ชจ๋์ ์ด๋ป๊ฒ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋์ง ์์๋ณด๊ฒ ์ต๋๋ค! ๐
๐ฅ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ (Importing)
๋ชจ๋์ ๋ด๋ณด๋๋ค๋ฉด, ์ด์ ๊ทธ๊ฒ์ ๋ค๋ฅธ ํ์ผ์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ฐจ๋ก์ ๋๋ค. ์ด๋ ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค๋ฅธ ์ฌ๋์ ์ฌ๋ฅ์ ํ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ฃ ! ๐
ํ์ ์คํฌ๋ฆฝํธ์์ ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค:
1. ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
// app.ts
import { PI, square, Circle } from './math';
console.log(PI); // 3.14159
console.log(square(4)); // 16
const circle = new Circle(5);
console.log(circle.area()); // ์ฝ 78.54
์ค๊ดํธ {} ์์ ๊ฐ์ ธ์ฌ ํญ๋ชฉ์ ์ด๋ฆ์ ๋์ดํ์ฌ ๊ฐ๋ณ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
2. ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๊ธฐ
// app.ts
import { PI as pi, square as sq, Circle as Circ } from './math';
console.log(pi); // 3.14159
console.log(sq(4)); // 16
const circle = new Circ(5);
console.log(circle.area()); // ์ฝ 78.54
as ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์จ ํญ๋ชฉ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด๋ ์ด๋ฆ ์ถฉ๋์ ํผํ๊ฑฐ๋, ๋ ์งง๊ณ ๊ฐ๊ฒฐํ ์ด๋ฆ์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
3. ๋ชจ๋ ๋ด์ฉ์ ํ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ค๊ธฐ
// app.ts
import * as Math from './math';
console.log(Math.PI); // 3.14159
console.log(Math.square(4)); // 16
const circle = new Math.Circle(5);
console.log(circle.area()); // ์ฝ 78.54
* as ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋์ ๋ชจ๋ ๋ด์ฉ์ ํ๋์ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ผ ํ๊ฑฐ๋, ๋ค์์คํ์ด์ค์ฒ๋ผ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
4. ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ ๊ฐ์ ธ์ค๊ธฐ
// app.ts
import greet from './greeter';
console.log(greet('Alice')); // "Hello, Alice!"
๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ ์ค๊ดํธ {} ์์ด ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ง์ ํ ์ ์์ผ๋ฉฐ, ๋ชจ๋์์ ์ ์ํ ์ด๋ฆ๊ณผ ๋ฌ๋ผ๋ ๋ฉ๋๋ค.
โ ๏ธ ์ฃผ์: ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ์ ์ด๋ฆ ์๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ๋์์ ๊ฐ์ ธ์ฌ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค:
import defaultExport, { namedExport1, namedExport2 } from './module';
5. ๋ถ์ ํจ๊ณผ๋ฅผ ์ํ ๊ฐ์ ธ์ค๊ธฐ
// app.ts
import './polyfills';
๋ชจ๋์์ ์๋ฌด๊ฒ๋ ๊ฐ์ ธ์ค์ง ์๊ณ ๋จ์ํ ์คํ๋ง ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฃผ๋ก ํด๋ฆฌํ(polyfill)์ด๋ ์ ์ญ ์คํ์ผ ๋ฑ์ ์ ์ฉํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฐ ์ํฉ์ ๋ง๋ ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ํจ์๋ ๋ณ์๋ง ํ์ํ ๋๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ๋ฅผ, ์ ์ฒด ๋ชจ๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋๋ * as ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ์์ผ๋ก์.
๋ชจ๋ ์์คํ ์ ์ ํ์ฉํ๋ฉด, ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์กฐํฉํด ๋ฉ์ง ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ฒ๋ผ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์ฒด๊ณ์ ์ผ๋ก ๊ตฌ์กฐํํ ์ ์๋ต๋๋ค! ๐
๋ค์์ผ๋ก, ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์ค๋น๋์ จ๋์? ๐
๐ ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ๊ณ ๊ธ ๊ธฐ๋ฅ
์, ์ด์ ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ๋ ๊น์ ๋ถ๋ถ์ ํํํด๋ณผ ์๊ฐ์ ๋๋ค! ์ด ๋ถ๋ถ์ ๋ง์น ์ฌ๋ฅ๋ท์์ ๊ณ ๊ธ ์ฌ๋ฅ์ ์ฐพ์๋ณด๋ ๊ฒ๊ณผ ๊ฐ์์. ๋ ๋ณต์กํ์ง๋ง, ๊ทธ๋งํผ ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ ๋ง๋๋ณผ ์ ์์ฃ . ๐
1. ๋์ ์ํฌํธ (Dynamic Imports)
๋์ ์ํฌํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ํ ์์ ์ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ , ํ์ํ ๊ธฐ๋ฅ๋ง ํ์ํ ๋ ๋ก๋ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
// app.ts
async function loadMathModule() {
const math = await import('./math');
console.log(math.square(4)); // 16
}
loadMathModule();
import() ํจ์๋ Promise๋ฅผ ๋ฐํํ๋ฏ๋ก, async/await ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
๐ก ํ: ๋์ ์ํฌํธ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๋ ๋ถํ (Code Splitting)์ ๊ตฌํํ ๋ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ฌ๋ฅ๋ท์์ ํ์ํ ์ฌ๋ฅ๋ง ๊ทธ๋๊ทธ๋ ์ฐพ์ ํ์ฉํ๋ ๊ฒ๊ณผ ๋น์ทํ์ฃ !
2. ๋ชจ๋ ์ฆ๊ฐ (Module Augmentation)
ํ์ ์คํฌ๋ฆฝํธ์์๋ ๊ธฐ์กด ๋ชจ๋์ ์๋ก์ด ์ ์ธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ชจ๋ ์ฆ๊ฐ์ด๋ผ๊ณ ํฉ๋๋ค.
// types.d.ts
import { Circle } from './math';
declare module './math' {
interface Circle {
circumference(): number;
}
}
// app.ts
import { Circle } from './math';
const circle = new Circle(5);
circle.circumference(); // ํ์
์๋ฌ ์์!
์ด ๊ธฐ๋ฅ์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋, ๊ธฐ์กด ํ์ ์ ํ์ฅํ ๋ ์ ์ฉํฉ๋๋ค.
3. ์ฐ๋น์ธํธ ๋ชจ๋ (Ambient Modules)
์ฐ๋น์ธํธ ๋ชจ๋์ ํ์ ์คํฌ๋ฆฝํธ์๊ฒ ๋ชจ๋์ ํํ๋ฅผ ์๋ ค์ฃผ๋ ์ ์ธ ํ์ผ์ ๋๋ค. ์ฃผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ ๋ ํ์ฉ๋ฉ๋๋ค.
// types/my-library.d.ts
declare module 'my-library' {
export function doSomething(): void;
export const VERSION: string;
}
// app.ts
import { doSomething, VERSION } from 'my-library';
doSomething();
console.log(VERSION);
์ด๋ ๊ฒ ํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ฒดํฌ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
4. ๋ชจ๋ ํด์ (Module Resolution)
ํ์ ์คํฌ๋ฆฝํธ๋ ๋ชจ๋์ ์ด๋ป๊ฒ ์ฐพ๊ณ ๋ก๋ํ ์ง ๊ฒฐ์ ํ๋ ๋ชจ๋ ํด์ ์ ๋ต์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ ๋ต์ ๋ ๊ฐ์ง์ ๋๋ค:
- Classic: ๊ฐ๋จํ์ง๋ง ์ ํ์ ์ธ ํด์ ์ ๋ต
- Node: Node.js์ ๋ชจ๋ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ชจ๋ฐฉํ ์ ๋ต
tsconfig.json ํ์ผ์์ moduleResolution ์ต์ ์ ํตํด ์ค์ ํ ์ ์์ต๋๋ค:
{
"compilerOptions": {
"moduleResolution": "node"
}
}
โ ๏ธ ์ฃผ์: ๋๋ถ๋ถ์ ๊ฒฝ์ฐ "node" ์ ๋ต์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ Node.js ์ํ๊ณ์์ ํธํ์ฑ์ ๋์ด๊ณ , ๋ ์ ์ฐํ ๋ชจ๋ ํด์์ ์ ๊ณตํฉ๋๋ค.
5. ๊ฒฝ๋ก ๋งคํ (Path Mapping)
๊ฒฝ๋ก ๋งคํ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ํฌํธ ์ ๋ณ์นญ(alias)์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ธด ์๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
// tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@utils/*": ["src/utils/*"],
"@components/*": ["src/components/*"]
}
}
}
// app.ts
import { formatDate } from '@utils/date';
import { Button } from '@components/Button';
์ด๋ ๊ฒ ์ค์ ํ๋ฉด ๊ธด ์๋ ๊ฒฝ๋ก ๋์ ๊ฐ๋จํ ๋ณ์นญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ณต์กํ ์ฌ๋ฅ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ๋จํ ํ๊ทธ๋ก ํํํ๋ ๊ฒ๊ณผ ๋น์ทํ์ฃ !
์ด๋ฌํ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ์ ํ์ฉํ๋ฉด, ๋์ฑ ํจ์จ์ ์ด๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ๊ณ ๊ธ ์ฌ๋ฅ์ ์กฐํฉํด ๋ ๋ณต์กํ๊ณ ํ์ ์ ์ธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ๊ณผ ๊ฐ์ฃ ! ๐
์ด์ ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์ ์ ํ ํ์ฉํ๋ฉด ์ฝ๋์ ๊ตฌ์กฐ์ ๊ฐ๋ ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ค์์ผ๋ก, ๋ชจ๋ ์์คํ ์ ์ค์ ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋์ง ๋ช ๊ฐ์ง ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค! ๐จโ๐ป๐ฉโ๐ป
๐ ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ๋ฒ ์คํธ ํ๋ํฐ์ค
ํ์ ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์๊ฐํฉ๋๋ค. ์ด๋ ๋ง์น ์ฌ๋ฅ๋ท์์ ํ๋ก์ ํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ํ๊ณผ ๊ฐ์ต๋๋ค! ๐
1. ๋จ์ผ ์ฑ ์ ์์น ์ค์
๊ฐ ๋ชจ๋์ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋๋ก ์ค๊ณํ์ธ์. ์ด๋ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ ๋๋ค.
// ์ข์ ์: user.ts
export interface User {
id: number;
name: string;
}
export function createUser(name: string): User {
return { id: Date.now(), name };
}
// ๋์ ์: userAndPost.ts
export interface User { /* ... */ }
export interface Post { /* ... */ }
export function createUser() { /* ... */ }
export function createPost() { /* ... */ }
2. ๋ช ํํ ์ด๋ฆ ์ฌ์ฉ
๋ชจ๋๊ณผ ๋ด๋ณด๋ด๋ ํญ๋ชฉ์ ์ด๋ฆ์ ๋ช ํํ๊ณ ์ค๋ช ์ ์ผ๋ก ์ง์ผ์ธ์. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์ดํด๋ฅผ ๋์ต๋๋ค.
// ์ข์ ์
import { calculateTotalPrice } from './priceCalculator';
// ๋์ ์
import { calc } from './util';
3. ์ธ๋ฑ์ค ํ์ผ ํ์ฉ
๋ณต์กํ ๋ชจ๋ ๊ตฌ์กฐ์์๋ index.ts ํ์ผ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ API๋ฅผ ์ ์ํ์ธ์. ์ด๋ ๋ชจ๋์ ์ฌ์ฉ์ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ณ , ๋ด๋ถ ๊ตฌํ์ ์จ๊ธธ ์ ์์ต๋๋ค.
// src/components/index.ts
export { Button } from './Button';
export { Input } from './Input';
export { Checkbox } from './Checkbox';
// ์ฌ์ฉ
import { Button, Input, Checkbox } from './components';
4. ์ํ ์์กด์ฑ ํผํ๊ธฐ
๋ชจ๋ ๊ฐ์ ์ํ ์์กด์ฑ์ ํผํ์ธ์. ์ด๋ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๊ฐ์ํค๊ณ ์๊ธฐ์น ์์ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
// ๋์ ์
// a.ts
import { funcB } from './b';
export function funcA() { funcB(); }
// b.ts
import { funcA } from './a';
export function funcB() { funcA(); }
// ์ข์ ์: ๊ณตํต ๊ธฐ๋ฅ์ ๋ณ๋์ ๋ชจ๋๋ก ๋ถ๋ฆฌ
// common.ts
export function commonFunc() { /* ... */ }
// a.ts
import { commonFunc } from './common';
export function funcA() { commonFunc(); }
// b.ts
import { commonFunc } from './common';
export function funcB() { commonFunc(); }
5. ํ์ ์ ์ ๋ถ๋ฆฌ
ํฐ ํ๋ก์ ํธ์์๋ ํ์ ์ ์๋ฅผ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค.
// types.ts
export interface User {
id: number;
name: string;
}
// user.ts
import { User } from './types';
export function createUser(name: string): User {
return { id: Date.now(), name };
}
6. ๋ถํ์ํ ์ํฌํธ ์ ๊ฑฐ
์ฌ์ฉํ์ง ์๋ ์ํฌํธ๋ ์ ๊ฑฐํ์ธ์. ์ด๋ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๋๋ถ๋ถ์ IDE์์ ์ด๋ฅผ ์๋์ผ๋ก ์ํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
7. ์ ๋ ๊ฒฝ๋ก ์ํฌํธ ์ฌ์ฉ
ํฐ ํ๋ก์ ํธ์์๋ ์ ๋ ๊ฒฝ๋ก ์ํฌํธ๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ๋ชจ๋ ์ด๋ ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ค์ ๋๋ค.
// tsconfig.json
{
"compilerOptions": {
"baseUrl": "src",
"paths": {
"@components/*": ["components/*"],
"@utils/*": ["utils/*"]
}
}
}
// ์ฌ์ฉ
import { Button } from '@components/Button';
import { formatDate } from '@utils/date';
๐ก ํ: ์ด๋ฌํ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ๋ฐ๋ฅด๋ฉด, ๋ง์น ์ฌ๋ฅ๋ท์์ ํจ์จ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ํ์ ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๋ฅผ ๋ ์ ๊ตฌ์กฐํํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค!
์ด๋ฌํ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ๋ฐ๋ฅด๋ฉด, ํ์ ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ๊ตฌ์กฐ์ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ์กฐ์งํ๊ณ ํ์ฉํ๋ ๊ฒ์ฒ๋ผ, ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ๋์ฑ ์ฒด๊ณ์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ ๊ฑฐ์์! ๐
์ด์ ์ฐ๋ฆฌ๋ ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ๋ํด ๊น์ด ์๊ฒ ์ดํด๋ณด์์ต๋๋ค. ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ๊ณ ๊ธ ๊ธฐ๋ฅ, ๊ทธ๋ฆฌ๊ณ ๋ฒ ์คํธ ํ๋ํฐ์ค๊น์ง, ์ด ์ง์์ ํ์ฉํ๋ฉด ๋ ๋์ ํ์ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๊ฐ ๋ ์ ์์ ๊ฒ์ ๋๋ค. ๋ง์น ์ฌ๋ฅ๋ท์์ ๋ค์ํ ์ฌ๋ฅ์ ์ตํ๊ณ ํ์ฉํ๋ ๊ฒ์ฒ๋ผ, ์ด์ ์ฌ๋ฌ๋ถ๋ ํ์ ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ์์ ์์ฌ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ต๋๋ค! ๐
ํ์ ์คํฌ๋ฆฝํธ์ ์ธ๊ณ๋ ๋๊ณ ๊น์ต๋๋ค. ๊ณ์ํด์ ํ์ตํ๊ณ ์คํํ๋ฉฐ, ์ฌ๋ฌ๋ถ๋ง์ ์ฝ๋ฉ ์คํ์ผ์ ๋ฐ์ ์์ผ ๋๊ฐ์ธ์. ์ฌ๋ฅ๋ท์์ ์๋ก์ด ์ฌ๋ฅ์ ๋ฐ๊ฒฌํ๊ณ ๋ฐ์ ์ํค๋ ๊ฒ์ฒ๋ผ, ํ์ ์คํฌ๋ฆฝํธ์ ์ธ๊ณ์์๋ ๋์์์ด ์ฑ์ฅํ ์ ์์ ๊ฑฐ์์. ํ์ดํ ! ๐ช๐
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ