πŸ‘©‍πŸ’»κ°œλ°œ_TIL/TIL

[νƒ€μž…μŠ€ν¬λ¦½νŠΈ] μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ νƒ€μž… μ •μ˜

Daisy.lee 2022. 1. 15. 23:28

μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ νƒ€μž…μ„ μ •μ˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

| μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” μœ λ‹ˆμ˜¨ νƒ€μž…κ³Ό & μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λŠ” μΈν„°μ„Ήμ…˜ νƒ€μž…μ΄ μžˆμŠ΅λ‹ˆλ‹€.

각각의 νƒ€μž…μ΄ κ°€μ§€λŠ” μž₯점과 주의점이 μžˆλŠ”λ°, μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

1. μœ λ‹ˆμ˜¨ νƒ€μž…

μœ λ‹ˆμ˜¨ νƒ€μž…μ€ 마치 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ OR μ—°μ‚°μžμ²˜μ €λŸΌ μ‚¬μš©λ©λ‹ˆλ‹€.

| μ—°μ‚°μž(|| 두 개 μ•„λ‹ˆκ³  ν•œ 개!)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ„ μ •μ˜ν•©λ‹ˆλ‹€.

 

//1. μœ λ‹ˆμ˜¨ νƒ€μž…
function unionFunc(value: string | number | boolean){
  console.log(value);
}

1-1. μœ λ‹ˆμ˜¨ νƒ€μž…μ˜ μž₯점

μœ λ‹ˆμ˜¨ νƒ€μž…μ˜ μž₯μ μœΌλ‘œλŠ”, μ—¬λŸ¬ νƒ€μž…μ„ 지정해쀄 수 μžˆμœΌλ―€λ‘œ νƒ€μž…λ³„ API(λ©”μ„œλ“œ)λ₯Ό μžλ™μ™„μ„±μœΌλ‘œ 뢈러올 수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ§Œμ•½ λͺ¨λ“  νƒ€μž…μ΄λΌλŠ” 뜻의 anyλ₯Ό μ‚¬μš©ν–ˆλ‹€λ©΄, μ–΄λ–€ νƒ€μž…μ΄ 올 지 λͺ¨λ₯΄λ―€λ‘œ νƒ€μž…μ— λ”°λ₯Έ APIλ₯Ό μžλ™μ™„μ„±μœΌλ‘œ μ“Έ 수 μ—†μ—ˆλŠ”λ°, μœ λ‹ˆμ˜¨ νƒ€μž…μœΌλ‘œ μ—¬λŸ¬ 개λ₯Ό μ •μ˜ν•΄μ£Όλ©΄ νƒ€μž…μ— λ§žλŠ” APIλ₯Ό μžλ™μ™„μ„± κΈ°λŠ₯으둜 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

//1-1. μœ λ‹ˆμ˜¨ νƒ€μž…μ˜ μž₯점: νƒ€μž…λ³„ μžλ™ μ™„μ„±
function showMessage(value: string | number | boolean){
  if(typeof value === 'string') {
    value.toString();
  }
  if(typeof value === 'number') {
    value.toLocaleString();
  }
  throw new TypeError('type must be string or number');
}

1-2. μœ λ‹ˆμ˜¨ νƒ€μž… μ£Όμ˜ν•  점

μœ„μ—μ„œ μ‚΄νŽ΄λ³Έ κ²ƒμ²˜λŸΌ ν•¨μˆ˜μ˜ parameter 뢀뢄에 νƒ€μž…μ„ 직접 지정해쀄 μˆ˜λ„ μžˆμ§€λ§Œ, μΈν„°νŽ˜μ΄μŠ€λ₯Ό 미리 μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•  λ•Œμ—λ„ | μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μœ λ‹ˆμ˜¨ νƒ€μž…μ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ, μœ λ‹ˆμ˜¨ νƒ€μž…μ΄ OR μ—°μ‚°μžμ™€ λ™μΌν•˜λ‹€κ³  μƒκ°ν•˜λ©΄ λ‹€μŒκ³Ό 같은 μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ•„λž˜ μ˜ˆμ‹œμ—μ„œλŠ” Developer와 User λΌλŠ” 두 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν–ˆμŠ΅λ‹ˆλ‹€. 

ν•¨μˆ˜μ˜ parameter에 | μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ 두 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μœ λ‹ˆμ˜¨ νƒ€μž…μœΌλ‘œ μ •μ˜ν•΄μ£Όμ—ˆλŠ”λ°μš”.

곡톡 속성인 name으둜 μ ‘κ·Όν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ°˜λ©΄μ—

각각 λ”°λ‘œ 가지고 μžˆλŠ” skillκ³Ό age 속성에 μ ‘κ·Όν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

//1-2. μœ λ‹ˆμ˜¨ νƒ€μž… μ£Όμ˜ν•  점
interface Developer {
  name: string,
  skill: string
}

interface User {
  name: string,
  age: number
}

function showUserInfo(someone: Developer | User){
  console.log(someone.name);
  console.log(someone.skill); //μ—λŸ¬ λ°œμƒ
  console.log(someone.age); //μ—λŸ¬ λ°œμƒ
}

 

μœ λ‹ˆμ˜¨ νƒ€μž…μ„ OR μ—°μ‚°μžμ™€ λ™μΌν•˜κ²Œ μƒκ°ν•˜λ©΄, μœ„μ˜ μ—λŸ¬λŠ” μ΄μƒν•©λ‹ˆλ‹€. μœ λ‹ˆμ˜¨ νƒ€μž…μ„ μ‚¬μš©ν–ˆμœΌλ‹ˆ λ‘˜ 쀑 ν•˜λ‚˜λΌλ„ λ§Œμ‘±ν•˜λ©΄ μ ‘κ·Όν•  수 μžˆλ‹€κ³  생각이 λ“œλ‹ˆκΉŒμš”. (κ°•μ˜ μ œκ³΅μžλ‹˜μ˜ 말에 λ”°λ₯΄λ©΄) νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” νƒ€μž… μ—λŸ¬λ₯Ό 내지 μ•ŠλŠ” λ°©ν–₯으둜 νƒ€μž…μ„ μΆ”λ‘ ν•©λ‹ˆλ‹€. λ§Œμ•½ ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  λ‚˜μ„œ ν˜ΈμΆœν•˜λ©΄, ν˜ΈμΆœν•˜λŠ” μ‹œμ μ—μ„œλŠ” Developer와 User λ‘˜ 쀑 μ–΄λ–€ νƒ€μž…μ΄ 올 지 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ μ‚¬μš©ν•˜λŠ” νƒ€μž…κ³Ό λ‹€λ₯Έ κ²ƒμœΌλ‘œ 미리 좔둠을 ν•˜λ©΄ μ•ˆ λ˜λ―€λ‘œ, μ΅œλŒ€ν•œ μ—λŸ¬λ₯Ό 내지 μ•ŠλŠ” 방법 즉 μΈν„°νŽ˜μ΄μŠ€λ‘œ μ •μ˜ν•œ 두 νƒ€μž…μ— κ³΅ν†΅μ μœΌλ‘œ λ“€μ–΄κ°€λŠ” ν™•μ‹€ν•œ μ†μ„±λ§Œ μ ‘κ·Όν•  수 있게 λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

2. μΈν„°μ„Ήμ…˜ νƒ€μž…

κ·Έλ ‡λ‹€λ©΄ μœ λ‹ˆμ˜¨ νƒ€μž…μœΌλ‘œ ν•©μΉœ λͺ¨λ“  νƒ€μž…μ„ μ‚¬μš©ν•  수 있게 ν•˜λŠ” 방법은 μ—†μ„κΉŒμš”? λ°”λ‘œ μΈν„°μ„Ήμ…˜ νƒ€μž…μ„ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

두 νƒ€μž…μ„ & μ—°μ‚°μžλ‘œ μ—°κ²°ν•˜λ©΄, μ—°κ²°ν•œ νƒ€μž… λͺ¨λ‘λ₯Ό λ§Œμ‘±ν•˜λŠ” ν•˜λ‚˜μ˜ νƒ€μž…μ΄ λ˜λŠ” 것이 μΈν„°μ„Ήμ…˜ νƒ€μž…μž…λ‹ˆλ‹€.

 

μΈν„°μ„Ήμ…˜ νƒ€μž…μ€ μ—°κ²°ν•œ λͺ¨λ“  νƒ€μž…μ„ λ§Œμ‘±ν•˜λŠ” ν•˜λ‚˜μ˜ νƒ€μž…μœΌλ‘œ ν•©μΉ˜λŠ” 것이기 λ•Œλ¬Έμ—,

μœ„μ˜ μœ λ‹ˆμ˜¨ νƒ€μž…μ—μ„œ λ°œμƒν•  수 있던 μ—λŸ¬κ°€ μ‚¬λΌμ§€κ²Œ λ©λ‹ˆλ‹€. λͺ¨λ“  νƒ€μž…μ„ λ§Œμ‘±ν•˜λ‹ˆκΉŒμš”.

 

//2. μΈν„°μ„Ήμ…˜ νƒ€μž… -> μ—¬λŸ¬ 개의 νƒ€μž… μ •μ˜λ₯Ό ν•˜λ‚˜λ‘œ ν•©μΉ˜λŠ” 것
interface Developer2 {
  name: string,
  skill: string
}

interface User2 {
  name: string,
  age: number
}

function showUserInfo2(someone: Developer2 & User2) {
  console.log(someone.name);
  console.log(someone.skill); //μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠμŒ
  console.log(someone.age); //μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠμŒ
}

2-1. μΈν„°μ„Ήμ…˜ νƒ€μž… μ£Όμ˜ν•  점

λ‹€λ§Œ μΈν„°μ„Ήμ…˜ νƒ€μž…μ€ ν•©μΉœ νƒ€μž…μ΄ ν•„μˆ˜κ°’μ΄ λ˜μ–΄λ²„λ¦½λ‹ˆλ‹€. λ”°λΌμ„œ μœ„μ—μ„œ μ„€λͺ…ν•œ μ½”λ“œμ²˜λŸΌ ν•¨μˆ˜μ˜ parameter 뢀뢄을 μΈν„°μ„Ήμ…˜ νƒ€μž…μœΌλ‘œ μ •μ˜ν•˜κ³  ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ, μΈν„°μ„Ήμ…˜ νƒ€μž…μœΌλ‘œ ν•©μΉœ 속성 λͺ¨λ‘ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 단점 λ•Œλ¬Έμ— μ‹€λ¬΄μ—μ„œλŠ” μœ λ‹ˆμ˜¨ νƒ€μž…μ„ μ’€ 더 많이 μ‚¬μš©ν•œλ‹€κ³  ν•©λ‹ˆλ‹€.

 

interface Developer2 {
  name: string,
  skill: string
}

interface User2 {
  name: string,
  age: number
}

function showUserInfo2(someone: Developer2 & User2) {
  console.log(someone.name);
  console.log(someone.skill); //μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠμŒ
  console.log(someone.age); //μ—λŸ¬ λ°œμƒν•˜μ§€ μ•ŠμŒ
}
//2-1. μΈν„°μ„Ήμ…˜ νƒ€μž… μ£Όμ˜ν•  점
showUserInfo({name: 'ν”„λ‘œκ·Έλž˜λ¨Έ', skill: 'ν”„λ‘ νŠΈμ—”λ“œ'}); //μ—λŸ¬ λ°œμƒ
showUserInfo({name: 'ν”„λ‘œκ·Έλž˜λ¨Έ', age: 25}); //μ—λŸ¬ λ°œμƒ

μΈν”„λŸ°μ˜ 유료 κ°•μ˜ 'νƒ€μž…μŠ€ν¬λ¦½νŠΈ μž…λ¬Έ - κΈ°μ΄ˆλΆ€ν„° μ‹€μ „κΉŒμ§€'λ₯Ό μˆ˜κ°•ν•˜κ³  μž‘μ„±ν•˜λŠ” κΈ€μž…λ‹ˆλ‹€.

 

νƒ€μž…μŠ€ν¬λ¦½νŠΈ μž…λ¬Έ - κΈ°μ΄ˆλΆ€ν„° μ‹€μ „κΉŒμ§€ - μΈν”„λŸ° | κ°•μ˜

νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹œμž‘ν•˜λŠ” 뢄듀을 μœ„ν•œ κ°•μ˜μž…λ‹ˆλ‹€. μ΅œμ‹  μžλ°”μŠ€ν¬λ¦½νŠΈ 문법을 λͺ¨λ₯΄λŠ” 뢄듀도 μ‰½κ²Œ 배울 수 μžˆλ„λ‘ ꡐ과 과정을 κ΅¬μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ–΄λ ΅κ²Œλ§Œ λŠκ»΄μ§€λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μž…λ¬Έμž κ΄€

www.inflearn.com

(κ°•μ˜ μ œκ³΅μžμ΄μ‹  μΊ‘ν‹΄νŒκ΅ λ‹˜μ˜ νƒ€μž…μŠ€ν¬λ¦½νŠΈ ν•Έλ“œλΆλ„ 같이 μ°Έκ³ ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.πŸ˜‡)