๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ TypeScript์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ํ์ฉ. ์ด ๊ฐ์ด๋๋ ๊ฐ๋ ฅํ ํ์ ์์ ์ฑ์ ํตํด ํจ์จ์ฑ ํฅ์, ๋ฒ๊ทธ ๊ฐ์, ์ฝ๋ ์ ์ง ๊ด๋ฆฌ ๊ฐ์ ๊ธฐ๋ฒ์ ์ดํด๋ด ๋๋ค.
TypeScript ๋ฆฌ์์ค ์ต์ ํ: ํ์ ์์ ์ฑ์ ํตํ ํจ์จ์ฑ
๋์์์ด ์งํํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ฆฌ์์ค ํ์ฉ์ ์ต์ ํํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. JavaScript์ ์์ ์งํฉ์ธ TypeScript๋ ์ด ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ ์  ํ์ดํ ์์คํ ๊ณผ ๊ณ ๊ธ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์  ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋ฒ๊ทธ๋ฅผ ์ค์ด๋ฉฐ ์ ๋ฐ์ ์ธ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ํ์ ์์ ์ฑ์ ํตํด ํจ์จ์ฑ์ ์ค์ ์ ๋๊ณ TypeScript ์ฝ๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ์ฃผ์ ์ ๋ต์ ์ดํด๋ด ๋๋ค.
๋ฆฌ์์ค ์ต์ ํ์ ์ค์์ฑ ์ดํด
๋ฆฌ์์ค ์ต์ ํ๋ ๋จ์ํ ์ฝ๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์คํํ๋ ๊ฒ์ด ์๋๋ผ ์ง์ ๊ฐ๋ฅํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค. ์ต์ ํ๊ฐ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์๋น ์ฆ๊ฐ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์ ์ด์์ผ๋ก ๋ง์ RAM์ ์๋นํ์ฌ ์ฑ๋ฅ ์ ํ ๋ฐ ์ ์ฌ์ ์ธ ์ถฉ๋์ ์ ๋ฐํ ์ ์์ต๋๋ค.
 - ๋๋ฆฐ ์คํ ์๋: ๋นํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ์๋ต ์๊ฐ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
 - ๋์ ์๋์ง ์๋น: ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ฐ์ผ ์ฅ์น์ ๋ฐฐํฐ๋ฆฌ ์๋ช ์ ๋จ์ถ์ํค๊ณ ์๋ฒ ๋น์ฉ์ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
 - ๋ณต์ก์ฑ ์ฆ๊ฐ: ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๋ ์ข ์ข ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํฉ๋๋ค.
 
๋ฆฌ์์ค ์ต์ ํ์ ์ง์คํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์์ ์ ์ด๋ฉฐ ๋น์ฉ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฆฌ์์ค ์ต์ ํ์์ TypeScript์ ์ญํ
TypeScript์ ์ ์  ํ์ดํ ์์คํ ์ ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ด๊ธฐ ์ค๋ฅ ๊ฐ์ง: TypeScript ์ปดํ์ผ๋ฌ๋ ๊ฐ๋ฐ ์ค์ ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์๋ณํ์ฌ ๋ฐํ์์ผ๋ก ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ ์ ์๋ ์๊ธฐ์น ์์ ๋์ ๋ฐ ์ถฉ๋์ ์ํ์ ์ค์ ๋๋ค.
 - ํฅ์๋ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ: ํ์ ์ด๋ ธํ ์ด์ ์ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๋ฆฌํฉํฐ๋งํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์์ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค.
 - ํฅ์๋ ๋๊ตฌ ์ง์: TypeScript์ ํ์ ์์คํ ์ ์ฝ๋ ์์ฑ, ๋ฆฌํฉํฐ๋ง, ์ ์  ๋ถ์๊ณผ ๊ฐ์ ๋ณด๋ค ๊ฐ๋ ฅํ IDE ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๊ฐ๋ฐ์๊ฐ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์ฝ๋๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ต์ ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
 - ๋ ๋์ ์ฝ๋ ์์ฑ: TypeScript ์ปดํ์ผ๋ฌ๋ ์ต์ ์ธ์ด ๊ธฐ๋ฅ๊ณผ ๋์ ํ๊ฒฝ์ ํ์ฉํ๋ ์ต์ ํ๋ JavaScript ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
 
TypeScript ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ ์ฃผ์ ์ ๋ต
๋ค์์ TypeScript ์ฝ๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ฃผ์ ์ ๋ต์ ๋๋ค.
1. ํ์ ์ด๋ ธํ ์ด์  ํจ๊ณผ์ ์ผ๋ก ํ์ฉ
ํ์ ์ด๋ ธํ ์ด์ ์ TypeScript ํ์ ์์คํ ์ ์ด์์ ๋๋ค. ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ์ฝ๋ ๋ช ํ์ฑ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ๋ณด๋ค ์ ๊ทน์ ์ธ ์ต์ ํ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
์์ :
// ํ์
 ์ด๋
ธํ
์ด์
 ์์
function add(a, b) {
  return a + b;
}
// ํ์
 ์ด๋
ธํ
์ด์
 ์์
function add(a: number, b: number): number {
  return a + b;
}
๋ ๋ฒ์งธ ์์ ์์ : number ํ์
 ์ด๋
ธํ
์ด์
์ a ๋ฐ b ๋งค๊ฐ๋ณ์๊ฐ ์ซ์์ด๊ณ  ํจ์๊ฐ ์ซ์๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ๋ช
์์ ์ผ๋ก ์ง์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ๋ฌ๋ ํ์
 ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ  ๋ณด๋ค ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ  ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ํญ์ ํ์ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฌ์ ๊ฐ๋ฅํ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ญ์์ค. ์ด๋ ์ฝ๋ ํ์ง์ ํฅ์์ํฌ ๋ฟ๋ง ์๋๋ผ ๋ณด๋ค ํจ๊ณผ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
2. ์ธํฐํ์ด์ค ๋ฐ ํ์ ํ์ฉ
์ธํฐํ์ด์ค ๋ฐ ํ์ ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ง์  ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ํ์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์์ :
interface User {
  id: number;
  name: string;
  email: string;
}
type Product = {
  id: number;
  name: string;
  price: number;
};
function displayUser(user: User) {
  console.log(`User: ${user.name} (${user.email})`);
}
function calculateDiscount(product: Product, discountPercentage: number): number {
  return product.price * (1 - discountPercentage / 100);
}
์ด ์์ ์์ User ์ธํฐํ์ด์ค์ Product ํ์
์ ์ฌ์ฉ์ ๋ฐ ์ ํ ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค. displayUser ๋ฐ calculateDiscount ํจ์๋ ์ด๋ฌํ ํ์
์ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ  ์์๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋์ง ํ์ธํฉ๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ์ธํฐํ์ด์ค์ ํ์ ์ ์ฌ์ฉํ์ฌ ๋ช ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ณ ํ์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ์ญ์์ค. ์ด๋ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
3. ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ ์ต์ ํ
์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ฒ์ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์ ์ฌํญ์ ๊ณ ๋ คํ์ญ์์ค.
- ๋ฐฐ์ด vs. ๊ฐ์ฒด: ์ ๋ ฌ๋ ๋ชฉ๋ก์๋ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ณ ํค-๊ฐ ์์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
 - ์งํฉ vs. ๋ฐฐ์ด: ํจ์จ์ ์ธ ๋ฉค๋ฒ์ญ ํ ์คํธ์๋ ์งํฉ์ ์ฌ์ฉํฉ๋๋ค.
 - ๋งต vs. ๊ฐ์ฒด: ํค๊ฐ ๋ฌธ์์ด ๋๋ ์ฌ๋ณผ์ด ์๋ ํค-๊ฐ ์์๋ ๋งต์ ์ฌ์ฉํฉ๋๋ค.
 - ์๊ณ ๋ฆฌ์ฆ ๋ณต์ก๋: ๊ฐ๋ฅํ ๊ฐ์ฅ ๋ฎ์ ์๊ฐ ๋ฐ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ ํํฉ๋๋ค.
 
์์ :
// ๋นํจ์จ์ : ๋ฉค๋ฒ์ญ ํ
์คํธ์ ๋ฐฐ์ด ์ฌ์ฉ
const myArray = [1, 2, 3, 4, 5];
const valueToCheck = 3;
if (myArray.includes(valueToCheck)) {
  console.log("Value exists in the array");
}
// ํจ์จ์ : ๋ฉค๋ฒ์ญ ํ
์คํธ์ ์งํฉ ์ฌ์ฉ
const mySet = new Set([1, 2, 3, 4, 5]);
const valueToCheck = 3;
if (mySet.has(valueToCheck)) {
  console.log("Value exists in the set");
}
์ด ์์ ์์ Set.has() ๋ฉ์๋๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ธ ๋ฐ๋ฉด Array.includes() ๋ฉ์๋๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)์ด๋ฏ๋ก ๋ฉค๋ฒ์ญ ํ
์คํธ์ Set์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ํจ์จ์ ์
๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ญ์์ค. ํน์  ์ฌ์ฉ ์ฌ๋ก์ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ต์ ์ ์ ํํ์ญ์์ค.
4. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ต์ํ
๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฑ๋ฅ ์ ํ ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์  ์ค๋ฒํค๋๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ถํ์ํ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด ์์ฑ์ ํผํ๊ณ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ์ญ์์ค.
์์ :
// ๋นํจ์จ์ : ๊ฐ ๋ฐ๋ณต์์ ์ ๋ฐฐ์ด ์์ฑ
function processData(data: number[]) {
  const results: number[] = [];
  for (let i = 0; i < data.length; i++) {
    results.push(data[i] * 2);
  }
  return results;
}
// ํจ์จ์ : ์๋ณธ ๋ฐฐ์ด์ ์ ์๋ฆฌ์์ ์์ 
function processData(data: number[]) {
  for (let i = 0; i < data.length; i++) {
    data[i] *= 2;
  }
  return data;
}
๋ ๋ฒ์งธ ์์ ์์ processData ํจ์๋ ์ ๋ฐฐ์ด ์์ฑ์ ํผํ๊ณ  ์๋ณธ ๋ฐฐ์ด์ ์ ์๋ฆฌ์์ ์์ ํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ค์ด๊ณ  ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ๋ถํ์ํ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด ์์ฑ์ ํผํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ต์ํํ์ญ์์ค.
5. ์ฝ๋ ๋ถํ ๋ฐ ์ง์ฐ ๋ก๋ฉ
์ฝ๋ ๋ถํ ๋ฐ ์ง์ฐ ๋ก๋ฉ์ ์ฌ์ฉํ๋ฉด ํน์  ์์ ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์ : TypeScript์์ ๋์  ๊ฐ์ ธ์ค๊ธฐ ์ฌ์ฉ:
async function loadModule() {
  const module = await import('./my-module');
  module.doSomething();
}
// ๋ชจ๋์ ์ฌ์ฉํด์ผ ํ  ๋ loadModule() ํธ์ถ
์ด ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด my-module ๋ก๋๋ฅผ ์ค์ ๋ก ํ์ํ  ๋๊น์ง ์ฐ๊ธฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ์ฝ๋ ๋ถํ ๋ฐ ์ง์ฐ ๋ก๋ฉ์ ๊ตฌํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค์ญ์์ค.
6. `const` ๋ฐ `readonly` ํค์๋ ํ์ฉ
`const` ๋ฐ `readonly`๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ ๋ฐ ๋ฐํ์ ํ๊ฒฝ์ด ๋ณ์ ๋ฐ ์์ฑ์ ๋ถ๋ณ์ฑ์ ๋ํ ๊ฐ์ ์ ํ ์ ์๋๋ก ๋์ ์ ์ฌ์ ์ธ ์ต์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
์์ :
const PI: number = 3.14159;
interface Config {
  readonly apiKey: string;
}
const config: Config = {
  apiKey: 'YOUR_API_KEY'
};
// PI ๋๋ config.apiKey๋ฅผ ์์ ํ๋ ค๊ณ  ํ๋ฉด ์ปดํ์ผ ์๊ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
// PI = 3.14; // ์ค๋ฅ: 'PI'๋ ์์์ด๋ฏ๋ก ํ ๋นํ  ์ ์์ต๋๋ค.
// config.apiKey = 'NEW_API_KEY'; // ์ค๋ฅ: 'apiKey'๋ ์ฝ๊ธฐ ์ ์ฉ ์์ฑ์ด๋ฏ๋ก ํ ๋นํ  ์ ์์ต๋๋ค.
PI๋ฅผ const๋ก, apiKey๋ฅผ readonly๋ก ์ ์ธํจ์ผ๋ก์จ ์ด๋ฌํ ๊ฐ์ ์ด๊ธฐํ ํ์ ์์ ํด์๋ ์ ๋๋ค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ์ ์๋ฆฌ๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ๋ฌ๋ ์ด ์ง์์ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ํ๋ฅผ ์ํํ  ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ์ฌํ ๋นํด์๋ ์ ๋๋ ๋ณ์์๋ const๋ฅผ ์ฌ์ฉํ๊ณ  ์ด๊ธฐํ ํ์ ์์ ํด์๋ ์ ๋๋ ์์ฑ์๋ readonly๋ฅผ ์ฌ์ฉํ์ญ์์ค. ์ด๋ ์ฝ๋ ๋ช
ํ์ฑ์ ๊ฐ์ ํ๊ณ  ์ ์ฌ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ  ์ ์์ต๋๋ค.
7. ํ๋กํ์ผ๋ง ๋ฐ ์ฑ๋ฅ ํ ์คํธ
ํ๋กํ์ผ๋ง ๋ฐ ์ฑ๋ฅ ํ ์คํธ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ฌ๋ฌ ๋ถ๋ถ์ ์คํ ์๊ฐ์ ์ธก์ ํ๊ณ ์ต์ ํ๊ฐ ํ์ํ ์์ญ์ ์๋ณํ์ญ์์ค. ์ฑ๋ฅ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋๊ตฌ: Chrome DevTools, Node.js Inspector, Lighthouse.
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ์ฝ๋์ ์ฑ๋ฅ์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ ํ ์คํธํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ํด๊ฒฐํ์ญ์์ค.
8. ๊ฐ๋น์ง ์ปฌ๋ ์  ์ดํด
JavaScript(๋ฐ TypeScript)๋ ์๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ต์ํํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ฃผ์ ๊ฐ๋ :
- ๋๋ฌ ๊ฐ๋ฅ์ฑ: ๊ฐ์ฒด๋ ๋ฃจํธ ๊ฐ์ฒด(์: ์ ์ญ ๊ฐ์ฒด)์์ ๋ ์ด์ ๋๋ฌํ ์ ์์ ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ฉ๋๋ค.
 - ๋ฉ๋ชจ๋ฆฌ ๋์: ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ง๋ง ์ฌ์ ํ ๋๋ฌ ๊ฐ๋ฅํ์ฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ง ์๋๋ก ํ๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
 - ์ํ ์ฐธ์กฐ: ์ํ ์ฐธ์กฐ๋ ๊ฐ์ฒด๊ฐ ๋ ์ด์ ํ์ํ์ง ์๋๋ผ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์ง ์๋๋ก ๋ฐฉ์งํ ์ ์์ต๋๋ค.
 
์์ :
// ์ํ ์ฐธ์กฐ ์์ฑ
let obj1: any = {};
let obj2: any = {};
obj1.reference = obj2;
obj2.reference = obj1;
// obj1๊ณผ obj2๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์๋ก๋ฅผ ํตํด ์ฌ์ ํ ๋๋ฌ ๊ฐ๋ฅํ๋ฏ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์
๋์ง ์์ต๋๋ค.
// ์ํ ์ฐธ์กฐ๋ฅผ ๋์ผ๋ ค๋ฉด ์ฐธ์กฐ๋ฅผ null๋ก ์ค์ ํ์ญ์์ค.
obj1.reference = null;
obj2.reference = null;
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ผ๋์ ๋๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ์ํ ์ฐธ์กฐ๋ฅผ ํผํ์ญ์์ค.
9. ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ Web Worker ํ์ฉ
Web Worker๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋์์ JavaScript ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ ํฅ์์ํค๊ณ ์ฅ๊ธฐ ์คํ ์์ ์ค์ ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์์ :
// main.ts
const worker = new Worker('worker.ts');
worker.postMessage({ task: 'calculatePrimeNumbers', limit: 100000 });
worker.onmessage = (event) => {
  console.log('Prime numbers:', event.data);
};
// worker.ts
// ์ด ์ฝ๋๋ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋ฉ๋๋ค.
self.onmessage = (event) => {
  const { task, limit } = event.data;
  if (task === 'calculatePrimeNumbers') {
    const primes = calculatePrimeNumbers(limit);
    self.postMessage(primes);
  }
};
function calculatePrimeNumbers(limit: number): number[] {
  // ์์ ๊ณ์ฐ ๊ตฌํ
  const primes: number[] = [];
    for (let i = 2; i <= limit; i++) {
        let isPrime = true;
        for (let j = 2; j <= Math.sqrt(i); j++) {
            if (i % j === 0) {
                isPrime = false;
                break;
            }
        }
        if (isPrime) {
            primes.push(i);
        }
    }
    return primes;
}
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: Web Worker๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฅ๊ธฐ ์คํ ์์ ์ ์คํํ๊ณ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ญ์์ค.
10. ์ปดํ์ผ๋ฌ ์ต์  ๋ฐ ์ต์ ํ ํ๋๊ทธ
TypeScript ์ปดํ์ผ๋ฌ๋ ์ฝ๋ ์์ฑ ๋ฐ ์ต์ ํ์ ์ํฅ์ ๋ฏธ์น๋ ์ฌ๋ฌ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํ๋๊ทธ๋ฅผ ์ ์คํ๊ฒ ํ์ฉํ์ญ์์ค.
- `--target` (es5, es6, esnext): ํน์  ๋ฐํ์ ํ๊ฒฝ์ ๋ง๊ฒ ์ต์ ํํ๋ ค๋ฉด ์ ์ ํ ๋์ JavaScript ๋ฒ์ ์ ์ ํํ์ญ์์ค. ์ต์ ๋ฒ์ (์: esnext)์ ๋์์ผ๋ก ํ๋ฉด ์ต์ ์ธ์ด ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ์ป์ ์ ์์ต๋๋ค.
 - `--module` (commonjs, esnext, umd): ๋ชจ๋ ์์คํ ์ ์ง์ ํฉ๋๋ค. ES ๋ชจ๋์ ๋ฒ๋ค๋ฌ์ ์ํ ํธ๋ฆฌ ์์ดํน(์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ ๊ฑฐ)์ ํ์ฑํํ ์ ์์ต๋๋ค.
 - `--removeComments`: ์ถ๋ ฅ JavaScript์์ ์ฃผ์์ ์ ๊ฑฐํ์ฌ ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
 - `--sourceMap`: ๋๋ฒ๊น ์ ์ํ ์์ค ๋งต์ ์์ฑํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ ์ฉํ์ง๋ง ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ํ๋ก๋์ ์์๋ ๋นํ์ฑํํ์ญ์์ค.
 - `--strict`: ํฅ์๋ ํ์ ์์ ์ฑ ๋ฐ ์ ์ฌ์ ์ธ ์ต์ ํ ๊ธฐํ๋ฅผ ์ํด ๋ชจ๋ ์๊ฒฉํ ํ์ ๊ฒ์ฌ ์ต์ ์ ํ์ฑํํฉ๋๋ค.
 
์ค์ฉ์ ์ธ ํต์ฐฐ๋ ฅ: TypeScript ์ปดํ์ผ๋ฌ ์ต์ ์ ์ ์คํ๊ฒ ๊ตฌ์ฑํ์ฌ ์ฝ๋ ์์ฑ์ ์ต์ ํํ๊ณ ํธ๋ฆฌ ์์ดํน๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํ์ฑํํ์ญ์์ค.
์ต์ ํ๋ TypeScript ์ฝ๋ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ฝ๋ ์ต์ ํ๋ ์ผํ์ฑ ์์ ์ด ์๋๋ผ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ๋ค์์ ์ต์ ํ๋ TypeScript ์ฝ๋๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค.
- ์ ๊ธฐ์ ์ธ ์ฝ๋ ๊ฒํ : ์ ์ฌ์ ์ธ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ ๊ฐ์ ์์ญ์ ์๋ณํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ธ ์ฝ๋ ๊ฒํ ๋ฅผ ์ํํฉ๋๋ค.
 - ์๋ํ๋ ํ ์คํธ: ์ฑ๋ฅ ์ต์ ํ๋ก ์ธํด ํ๊ท๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์๋ํ๋ ํ ์คํธ๋ฅผ ๊ตฌํํฉ๋๋ค.
 - ๋ชจ๋ํฐ๋ง: ํ๋ก๋์  ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์  ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ฌ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํฉ๋๋ค.
 - ์ง์์ ์ธ ํ์ต: ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ ์ต์ TypeScript ๊ธฐ๋ฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ต์ ์ํ๋ก ์ ์งํฉ๋๋ค.
 
๊ฒฐ๋ก
TypeScript๋ ๋ฆฌ์์ค ์ต์ ํ๋ฅผ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋ฐ์๋ ์ ์  ํ์ดํ ์์คํ , ๊ณ ๊ธ ์ปดํ์ผ๋ฌ ๊ธฐ๋ฅ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์  ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋ฒ๊ทธ๋ฅผ ์ค์ด๋ฉฐ ์ ๋ฐ์ ์ธ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ์ต์ ํ๋ ์ง์์ ์ธ ํ์ต, ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฐ์ ์ด ํ์ํ ์ง์์ ์ธ ํ๋ก์ธ์ค์์ ๊ธฐ์ตํ์ญ์์ค. ์ด๋ฌํ ์์น์ ์์ฉํจ์ผ๋ก์จ ํจ์จ์ ์ด๊ณ ์์ ์ ์ด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ TypeScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.