πŸ“˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ κ°œλ… 정리11

seoyoon_leeΒ·2026λ…„ 3μ›” 30일

TypeScript

λͺ©λ‘ 보기
18/21
post-thumbnail

βœ… 1. μ œλ„€λ¦­ (Generics) 핡심 κ°œλ…

πŸ‘‰ ν•œ 쀄 μ •μ˜

β€œνƒ€μž…μ„ λ‚˜μ€‘μ— μ •ν•˜λŠ” ν•¨μˆ˜/νƒ€μž…β€ 즉, μ œλ„€λ¦­ = "μƒμž" 라고 μƒκ°ν•˜κΈ°
ν•¨μˆ˜κ°€ μ•„λ‹ˆλΌ "νƒ€μž… μ‹œμŠ€ν…œ" πŸ‘‰ 싀행이 μ•„λ‹ˆλΌ νƒ€μž… 체크용

function box<T>(item: T): T {
  return item;
}

πŸ“Œ 핡심 νŠΉμ§•

  • νƒ€μž…μ„ λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©
  • 호좜 μ‹œ νƒ€μž… 결정됨
  • μž¬μ‚¬μš©μ„± 증가

πŸ‘‰ 의미

  • T = β€œμ•„μ§ λ­”μ§€ λͺ¨λ₯΄λŠ” νƒ€μž…β€
  • λ‚˜μ€‘μ— λ„£λŠ” κ°’μœΌλ‘œ 결정됨

βœ” μ—¬κΈ°μ„œ = νƒ€μž… λ³€μˆ˜ (μž„μ‹œ νƒ€μž…)

πŸ’‘ μ™œ 쓰냐?

κΈ°μ‘΄ 방식 ❌

  
function func(value: any) {
  return value;
}

πŸ‘‰ 문제: any μ“°λ©΄ νƒ€μž… 정보 λ‹€ 사라짐

μ œλ„€λ¦­ μ‚¬μš© β­•

  
let appleBox = box("apple");   // string
let numberBox = box(100);      // number
let boolBox = box(true);       // boolean
  

πŸ‘‰ 핡심
λ„£λŠ” 값에 따라 νƒ€μž…μ΄ μžλ™μœΌλ‘œ λ°”λ€œ -> μžλ™μœΌλ‘œ νƒ€μž… 맞좰쀌 (νƒ€μž… μΆ”λ‘ )

πŸ“Œ μ œλ„€λ¦­ μž₯점

  • any λŒ€μ‹  μ‚¬μš© β†’ νƒ€μž… μ•ˆμ •μ„± 증가
  • μž¬μ‚¬μš©μ„± 높은 μ½”λ“œ μž‘μ„± κ°€λŠ₯

βœ… 2. μ œλ„€λ¦­ 핡심 (μ€‘μš”πŸ”₯)

πŸ‘‰ ν•¨μˆ˜ ν˜ΈμΆœν•  λ•Œ νƒ€μž…μ΄ 결정됨

func<number>(10)
func<string>("hello")

πŸ‘‰ 보톡은 μžλ™ 좔둠됨

func(10) // number μžλ™

βœ… 3. νŠœν”Œλ‘œ μ •ν™•ν•˜κ²Œ νƒ€μž… κ³ μ •

let arr = func([1, 2, 3]); // number[]

πŸ‘‰ κ·Έλƒ₯ 숫자 λ°°μ—΄

let arr2 = func<[number, number, number]>([1, 2, 3]);

πŸ‘‰ 의미

길이 = 3개 κ³ μ •
μˆœμ„œκΉŒμ§€ κ³ μ •

πŸ‘‰ μ™œ 쓰냐?
πŸ‘‰ β€œμ •ν™•ν•˜κ²Œ ꡬ쑰λ₯Ό μ§€ν‚€κ³  싢을 λ•Œβ€
πŸ‘‰ νŠœν”Œ β†’ κΈΈμ΄κΉŒμ§€ 고정됨

βœ… 4. μ œλ„€λ¦­ μ‘μš© 1 - swap

function swap<T, U>(a: T, b: U) {
  return [b, a];
}

πŸ‘‰ μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…λ„ κ°€λŠ₯

swap("1", 2) // [2, "1"]

🎁 μ‹€μƒν™œ λŠλ‚Œ

let result = swap("컀피", 5000);

πŸ‘‰ κ²°κ³Ό

[5000, "컀피"]

πŸ‘‰ 의미

T = string
U = number

βœ… 5. μ œλ„€λ¦­ μ‘μš© 2 - 첫번째 κ°’ κ°€μ Έμ˜€κΈ°

function first<T>(data: [T, ...unknown[]]) {
  return data[0];
}

πŸ‘‰ 핡심

[T, ...unknown[]] = μ²«λ²ˆμ§ΈλŠ” T, λ‚˜λ¨Έμ§€λŠ” μ•„λ¬΄κ±°λ‚˜

first(["사과", "λ°”λ‚˜λ‚˜"]); // "사과"
first([10, 20, 30]);       // 10

πŸ’‘ μ™œ νŠœν”Œ 쓰냐?

first([1, "hello", true])

πŸ‘‰ T = number | string | boolean ❌

πŸ‘‰ νŠœν”Œ μ“°λ©΄
πŸ‘‰ 첫 번째 κ°’ κΈ°μ€€μœΌλ‘œ νƒ€μž… κ³ μ •

βœ… 6. μ œλ„€λ¦­ μ œν•œ (extends) ⭐⭐⭐

πŸ‘‰ μ€‘μš”!!

function getLength<T extends { length: number }>(data: T) {
  return data.length;
}

πŸ‘‰ 의미

  • length μžˆλŠ” μ• λ§Œ 받아라

    getLength([1,2,3])   // κ°€λŠ₯
    getLength("hello")   // κ°€λŠ₯
    getLength(10)        // ❌ μ—λŸ¬

βœ… 7. map 직접 κ΅¬ν˜„ (핡심 예제πŸ”₯)

function map<T, U>(arr: T[], callback: (item: T) => U) {
let result: U[] = [];
for (let i = 0; i < arr.length; i++) {
  result.push(callback(arr[i]));
}
return result;
}

🎁 μ˜ˆμ‹œ

map([1,2,3], (x) => x * 10)
// [10, 20, 30]
map(["a","b"], (x) => x + "πŸ‘")
// ["aπŸ‘", "bπŸ‘"]
interface MyMap<V> {
[key: string]: V;
}
let scores: MyMap<number> = {
math: 100,
english: 90
};

πŸ‘‰ 핡심
keyλŠ” string, valueλŠ” λ‚΄κ°€ 정함

πŸ‘‰ 핡심 ꡬ쑰

νƒ€μž…μ˜λ―Έ
Tμž…λ ₯ νƒ€μž…
Uκ²°κ³Ό νƒ€μž…

βœ… 8. forEach κ΅¬ν˜„


function forEach<T>(arr: T[], callback: (item: T) => void) {
for (let i = 0; i < arr.length; i++) {
  callback(arr[i]);
}
}
   forEach([1,2,3], (x) => {
  console.log(x);
});                              
                                 

πŸ‘‰ λ°˜ν™˜κ°’ μ—†μŒ β†’ void

βœ… 9. μ œλ„€λ¦­ μΈν„°νŽ˜μ΄μŠ€

interface Data<K, V> {
  key: K;
  value: V;
}
  
let user: Data<string, number> = {
  key: "age",
  value: 20
};

βœ… 10. 인덱슀 μ‹œκ·Έλ‹ˆμ²˜ + μ œλ„€λ¦­

interface Map<V> {
  [key: string]: V;
}
  
let stringMap: Map<string> = {
a: "hello"
};

πŸ‘‰ value νƒ€μž…λ§Œ λ°”κΏ€ 수 있음

βœ… 11. μ œλ„€λ¦­ 클래슀

class Box<T> {
 constructor(private items: T[]) {}

 add(item: T) {
   this.items.push(item);
 }
}
 
let numberBox = new Box<number>([1,2]);
numberBox.add(3);

let stringBox = new Box<string>(["a"]);
stringBox.add("b");

πŸ‘‰ ν΄λž˜μŠ€λ„ νƒ€μž… λ°”λ€œ

βœ… 12. Promise μ œλ„€λ¦­ (비동기 핡심)⭐⭐⭐

const promise = new Promise<number>((resolve) => {
 resolve(100);
});

πŸ‘‰ 의미

resolve κ²°κ³Ό νƒ€μž… = number

promise.then(res => {
res *2 // κ°€λŠ₯
});

βœ… 13. Promise ν•¨μˆ˜

interface Post {
id: number;
title: string;
}

function fetchPost(): Promise<Post> {
return new Promise((resolve) => {
  resolve({
    id: 1,
    title: "κ²Œμ‹œκΈ€"
  });
});
}
profile
Frontend Developer · 기둝 ⭐

0개의 λŒ“κΈ€