Front-end/Typescript

[TypeScript] ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ž€ ์™œ ์“ฐ์ผ๊นŒ? ๐Ÿ›ก๏ธ

xeunnie 2024. 12. 19. 01:00
728x90
๋ฐ˜์‘ํ˜•

TypeScript: ํ†บ์•„๋ณด๊ธฐ! ๐Ÿ›ก๏ธ

TypeScript(ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ)๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์Šˆํผ์…‹์œผ๋กœ, ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋Œ€ํญ ๊ฐœ์„ ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” TypeScript๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€, ๊ธฐ๋ณธ ๊ฐœ๋…, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ „ ์˜ˆ์ œ๊นŒ์ง€ ๋‹ค๋ฃฐ ๊ฑฐ์˜ˆ์š”. TypeScript๋ฅผ ํ†ตํ•ด ๋” ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ์„ธ๊ณ„๋กœ ๋“ค์–ด๊ฐ€ ๋ณด์„ธ์š”!


TypeScript๋ž€? ๐Ÿค”

TypeScript๋Š” Microsoft๊ฐ€ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋ฉด์„œ๋„ ํƒ€์ž… ๊ฒ€์‚ฌ ๋ฐ ์ฝ”๋“œ ์ž๋™ ์™„์„ฑ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์•ˆ์ •์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์ฃ .

 

์ฃผ์š” ํŠน์ง•

  1. ์ •์  ํƒ€์ž… ๊ฒ€์‚ฌ
    • ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•ด ์‹คํ–‰ ์ „์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ ์ง€์›
    • ES6+ ๋ฌธ๋ฒ•๊ณผ ๋ฏธ๋ž˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋Šฅ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํƒ€์ž… ์ถ”๋ก 
    • ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„, TypeScript๊ฐ€ ํƒ€์ž…์„ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ฐ•๋ ฅํ•œ ๊ฐœ๋ฐœ ๋„๊ตฌ ์ง€์›
    • IDE์™€์˜ ์—ฐ๋™์œผ๋กœ ์ฝ”๋“œ ์™„์„ฑ, ๋ฆฌํŒฉํ† ๋ง, ๋””๋ฒ„๊น…์ด ๋”์šฑ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

TypeScript๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๐Ÿคท‍โ™‚๏ธ

  1. ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ 
    • ํƒ€์ž… ์‹œ์Šคํ…œ ๋•๋ถ„์— ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐœ ์†๋„ ํ–ฅ์ƒ
    • IntelliSense์™€ ๊ฐ™์€ IDE ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™ ์™„์„ฑ, ์‹ค์‹œ๊ฐ„ ์˜ค๋ฅ˜ ๊ฒ€์ถœ ๋“ฑ์ด ๊ฐ€๋Šฅํ•ด์ ธ ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  3. ํ˜‘์—… ํšจ์œจ์„ฑ ์ฆ๊ฐ€
    • ์ฝ”๋“œ์˜ ์˜๋„๋ฅผ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์–ด ํŒ€์› ๊ฐ„ ์ดํ•ด๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
  4. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ํ•„์ˆ˜
    • ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์ค‘์š”ํ•ด์ง€๋Š”๋ฐ, TypeScript๋Š” ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

TypeScript ์„ค์น˜ ๋ฐ ์„ค์ • โš™๏ธ

์„ค์น˜ํ•˜๊ธฐ

TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด typescript ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

npm install -g typescript

 

TypeScript ํŒŒ์ผ ์‹คํ–‰ํ•˜๊ธฐ

 

TypeScript ํŒŒ์ผ์€ .ts ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

1. tsc ๋ช…๋ น์–ด๋กœ TypeScript ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜์„ธ์š”.

tsc filename.ts

 

2. ์ƒ์„ฑ๋œ .js ํŒŒ์ผ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

node filename.js

TypeScript์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๐ŸŒŸ

1. ํƒ€์ž… ์ฃผ์„ (Type Annotations)

TypeScript๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ ๊ฐ’ ๋“ฑ์— ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let username: string = "Alice"; // ๋ฌธ์ž์—ด
let age: number = 25;          // ์ˆซ์ž
let isDeveloper: boolean = true; // ๋ถˆ๋ฆฌ์–ธ

2. ํ•จ์ˆ˜ ํƒ€์ž…

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜ ๊ฐ’์— ํƒ€์ž…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

function add(a: number, b: number): number {
  return a + b;
}

 

3. ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ํƒ€์ž…

// ๋ฐฐ์—ด ํƒ€์ž…
let numbers: number[] = [1, 2, 3];

// ๊ฐ์ฒด ํƒ€์ž…
let user: { name: string; age: number } = {
  name: "Alice",
  age: 25,
};

 

4. ์ธํ„ฐํŽ˜์ด์Šค์™€ ํƒ€์ž… (Interfaces & Types)

์ธํ„ฐํŽ˜์ด์Šค

interface User {
  name: string;
  age: number;
}

const user: User = {
  name: "Alice",
  age: 25,
};

 

ํƒ€์ž… ๋ณ„์นญ

type UserType = {
  name: string;
  age: number;
};

const user: UserType = {
  name: "Alice",
  age: 25,
};

 

5. ์œ ๋‹ˆ์˜จ(Union)๊ณผ ์ธํ„ฐ์„น์…˜(Intersection)

์œ ๋‹ˆ์˜จ

let id: number | string; // ์ˆซ์ž ๋˜๋Š” ๋ฌธ์ž์—ด ๊ฐ€๋Šฅ
id = 123;
id = "ABC";

 

์ธํ„ฐ์„น์…˜

type Admin = { role: string };
type User = { name: string };

const admin: Admin & User = {
  role: "admin",
  name: "Alice",
};

 

6. ์ œ๋„ค๋ฆญ (Generics)

์ œ๋„ค๋ฆญ์€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์œ ์—ฐํ•œ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

function identity<T>(arg: T): T {
  return arg;
}

console.log(identity<string>("Hello"));
console.log(identity<number>(123));

TypeScript์˜ ์‹ค์ „ ํ™œ์šฉ ๐Ÿ’ป

1. React์™€ TypeScript

React์™€ TypeScript๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ props์™€ state์— ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

type ButtonProps = {
  label: string;
  onClick: () => void;
};

const Button: React.FC<ButtonProps> = ({ label, onClick }) => (
  <button onClick={onClick}>{label}</button>
);

2. API ์‘๋‹ต ํƒ€์ž… ์ •์˜

TypeScript๋Š” API ์‘๋‹ต ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

type ApiResponse = {
  id: number;
  name: string;
  email: string;
};

async function fetchUser(): Promise<ApiResponse> {
  const response = await fetch("/api/user");
  return response.json();
}

3. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ์˜ ๋ชจ๋“ˆํ™”

ํƒ€์ž… ์ •์˜๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.


TypeScript์˜ ์ฃผ์˜ํ•  ์  ๋ฐ ํ•œ๊ณ„ ๐Ÿšง

  1. ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ๊ฒ€์‚ฌ ์—†์Œ
    • TypeScript๋Š” ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ๋งŒ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ์‹คํ–‰ ์ค‘์—๋Š” ์˜ค๋ฅ˜๋ฅผ ํƒ์ง€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•™์Šต ๊ณก์„ 
    • ๊ธฐ์กด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•๊ณผ ๊ฐœ๋…์„ ์ตํžˆ๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋นŒ๋“œ ๋‹จ๊ณ„ ์ถ”๊ฐ€
    • TypeScript๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ: TypeScript๋กœ ์•ˆ์ „ํ•œ ์ฝ”๋“œ ์ž‘์„ฑ! ๐Ÿ› ๏ธ

 

TypeScript๋Š” ์ฝ”๋“œ ์•ˆ์ •์„ฑ๊ณผ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” ์กฐ๊ธˆ ๋ณต์žกํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ต์ˆ™ํ•ด์ง€๋ฉด ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํŒ€ ํ˜‘์—… ํšจ์œจ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”.

 

TypeScript๋ฅผ ๋ฐฐ์šฐ๋Š” ์—ฌ์ •์— ํ•„์š”ํ•œ ๊ฒƒ์€ ํ˜ธ๊ธฐ์‹ฌ๊ณผ ๊พธ์ค€ํ•จ! ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž์˜ ์ „์„ค๋กœ ๊ฑฐ๋“ญ๋‚˜ ๋ด…์‹œ๋‹ค! ๐Ÿš€

 

๐ŸŒท์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น! ๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•