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

[νƒ€μž…μŠ€ν¬λ¦½νŠΈ] μΈν„°νŽ˜μ΄μŠ€

Daisy.lee 2022. 1. 14. 16:41

μΈν„°νŽ˜μ΄μŠ€λž€?

μ‰½κ²Œ 말해 미리 νƒ€μž…μ„ μ •μ˜ν•˜λŠ” 것이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νƒ€μž…μ„ 지정할 값에 μ •μ˜ν•œ μΈν„°νŽ˜μ΄μŠ€ ν‚€μ›Œλ“œλ₯Ό 마치 λ³€μˆ˜μ²˜λŸΌ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

특히 ν•¨μˆ˜μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•  λ•Œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 많이 μ‚¬μš©ν•œλ‹€κ³  ν•©λ‹ˆλ‹€.😎

 

//μΈν„°νŽ˜μ΄μŠ€: 미리 νƒ€μž… μ •μ˜λ₯Ό ν•˜λŠ” κ²ƒμœΌλ‘œ, νƒ€μž… 별칭과 μœ μ‚¬ν•©λ‹ˆλ‹€.
interface Example {
  name: string,
  age: number
}

1. λ³€μˆ˜μ— μ‚¬μš©ν•˜λŠ”μΈν„°νŽ˜μ΄μŠ€

λ³€μˆ˜μ— λ“€μ–΄κ°€λŠ” λ°μ΄ν„°μ˜ νƒ€μž…μ„ 미리 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

//1. λ³€μˆ˜μ— μ‚¬μš©ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
interface User {
  name: string,
  age: number
}

var user: User = {name: "hello", age: 25};

2. ν•¨μˆ˜μ˜ parameter에 μ‚¬μš©ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€

ν•¨μˆ˜μ˜ parameter에 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ μš©ν•˜λ©΄, ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œμ˜ argument λ˜ν•œ μΈν„°νŽ˜μ΄μŠ€ κ·œμΉ™μ„ 따라야 ν•©λ‹ˆλ‹€.

 

//1. λ³€μˆ˜μ— μ‚¬μš©ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
interface User {
  name: string,
  age: number
}

function getUser(user: User) {
  console.log(user);
}

3. ν•¨μˆ˜μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€

ν•¨μˆ˜μ˜ parameter, returnκ°’ 즉 μŠ€νŽ™μ„ μ •μ˜ν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€λ‘œ ν•¨μˆ˜μ˜ μŠ€νŽ™μ„ μ •μ˜ν•  λ•ŒλŠ” μ„ μ–Έκ³Ό ν•¨μˆ˜ μ •μ˜λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ‚¬μš©ν•˜λŠ”λ°,

μ΄λ ‡κ²Œ μΈν„°νŽ˜μ΄μŠ€λ‘œ 지정할 일은 많이 μ—†λ‹€κ³  ν•©λ‹ˆλ‹€.

λŒ€μ‹  ν•¨μˆ˜μ˜ parameter와 return값을 직접 지정할 수 있긴 ν•©λ‹ˆλ‹€.

 

//3. ν•¨μˆ˜ 전체 νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€
interface AddFunc {
  (num1: number, num2: number): number
}

//ν•¨μˆ˜μ˜ μŠ€νŽ™μ— λŒ€ν•΄ μ •μ˜ν•  λ•ŒλŠ” μ„ μ–Έκ³Ό ν•¨μˆ˜ μ •μ˜λ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€.
//λ‹€λ§Œ μΈν„°νŽ˜μ΄μŠ€λ‘œ ν•¨μˆ˜μ˜ μŠ€νŽ™μ„ μ •μ˜ν•  일은 많이 μ—†λ‹€κ³  ν•©λ‹ˆλ‹€.
//λŒ€μ‹  ν•¨μˆ˜μ˜ parameter와 return값에 λŒ€ν•œ  νƒ€μž… μ •μ˜λ₯Ό ν•¨μˆ˜μ— 직접 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
let add: AddFunc;

add = function(num1, num2){
  return num1 + num2;
}

4. 인덱싱 방식을 μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€

*인덱싱 λ°©μ‹μ΄λž€? 인덱슀둜 λ°°μ—΄μ˜ μš”μ†Œμ— μ ‘κ·Όν•˜λŠ” 방법

 

μ΄λ ‡κ²Œ 인덱슀둜 μ ‘κ·Όν•˜λŠ” κ°’μ˜ νƒ€μž…μ„ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ 미리 지정해쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

인덱싱 방식에 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λ©΄ 인덱슀둜 μ ‘κ·Όν•˜λŠ” 값에 λŒ€ν•œ νƒ€μž… κ·œμΉ™μ„ 따라야 ν•©λ‹ˆλ‹€.

 

예λ₯Ό λ“€μ–΄, 인덱싱 방식에 μ •μ˜ν•œ μΈν„°νŽ˜μ΄μŠ€κ°€ λ¬Έμžμ—΄μΈ 경우,

인덱슀둜 μ ‘κ·Όν•œ 값에 λ¬Έμžμ—΄μ΄ μ•„λ‹Œ 숫자λ₯Ό ν• λ‹Ήν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

//3. 인덱싱 방식을 μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€: 인덱슀둜 μ ‘κ·Όν•˜λŠ” 값에 λŒ€ν•œ ν• λ‹Ή νƒ€μž…μ„ μ§€μ •ν•©λ‹ˆλ‹€.
interface AlphabetArr {
  [index: number]: string
}

let arr: AlphabetArr = ['a', 'b', 'c'];
arr[0] = 'A';
//arr[1] = 10; //인덱슀둜 μ ‘κ·Όν•˜λŠ” 값에 λŒ€ν•œ νƒ€μž… μ •μ˜μ™€ λ§žμ§€ μ•Šμ•„ μ—λŸ¬ λ°œμƒ

4-1. μΈν„°νŽ˜μ΄μŠ€ λ”•μ…”λ„ˆλ¦¬ νŒ¨ν„΄

*λ”•μ…”λ„ˆλ¦¬ νŒ¨ν„΄μ΄λž€? 객체의 속성을 μ–΄λ–»κ²Œ μ ‘κ·Όν•  것인지 μ •μ˜ν•˜λŠ” 방식

객체의 값에 μ ‘κ·Όν•˜λŠ” 방식을 μΌμ»«λŠ” 말이라고 ν•˜λ©΄ λ˜κ² μŠ΅λ‹ˆλ‹€.

 

μ•„λž˜μ™€ 같이 객체의 key와 value 각각에 νƒ€μž…μ„ μ •ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

 

//4. λ”•μ…”λ„ˆλ¦¬ νŒ¨ν„΄
interface StringRegexDictionary {
  [key: string]: RegExp
}

var obj = {
  cssfile: /|.css$/,
  jsfile: /|.js$/
}

5. μΈν„°νŽ˜μ΄μŠ€ ν™•μž₯

μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ°›μ•„μ„œ λ˜λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

extends ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ μ‚¬μš©ν•©λ‹ˆλ‹€. 

 

//5. μΈν„°νŽ˜μ΄μŠ€ ν™•μž₯
interface Person {
  name: string,
  age: number
}

interface Job extends Person {
  job: string
}

var personObj: Job = {
  name: 'hello',
  age: 25,
  job: 'developer'
}

 

 

λ˜ν•œ extends ν‚€μ›Œλ“œλ₯Ό ν™œμš©ν•΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν™•μž₯ν•  수 μžˆλŠ” 것은

νƒ€μž… 별칭(type alias)와 κ΅¬λΆ„λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ§Œμ˜ μž₯점이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

νƒ€μž… 별칭(type alias)λž€ νŠΉμ • νƒ€μž…μ— λŒ€ν•΄ 이름 즉 별칭을 λΆ€μ—¬ν•˜λŠ” κ²ƒμœΌλ‘œ,

νƒ€μž…μ„ μƒμ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ΄λ¦„λ§Œ λΆ€μ—¬ν•œ κ²ƒμž…λ‹ˆλ‹€.

νƒ€μž… 별칭은 μΈν„°νŽ˜μ΄μŠ€μ™€ 달리 ν™•μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ μ–΄λ–€ 것을 써야 ν• κΉŒμš”?

μ†Œν”„νŠΈμ›¨μ–΄ν”„λ‘œκ·Έλž˜λ° 원칙쀑 ν•˜λ‚˜μΈ OCP에 λ”°λ₯΄λ©΄, 'ν™•μž₯μ—λŠ” μ—΄λ €μžˆμœΌλ©΄μ„œ μˆ˜μ •μ—λŠ” λ‹«ν˜€μžˆλŠ”' 개발, 즉 μ›λž˜ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κΈ° μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ°œλ°œν•˜λŠ” 것이 μœ μ§€λ³΄μˆ˜ μΈ‘λ©΄μ—μ„œ μœ λ¦¬ν•˜λ‹€κ³  ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 원칙을 μ μš©ν•΄λ³΄λ©΄, νƒ€μž… 별칭 λ³΄λ‹€λŠ” μ›λž˜ μ½”λ“œλ₯Ό μœ μ§€ν•˜λ©΄μ„œλ„ ν™•μž₯μ‹œν‚¬ 수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ“°λŠ” 것이 μ ν•©ν•˜λ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. μ € λ˜ν•œ 개발 곡뢀λ₯Ό ν•˜λ©΄μ„œ 양적인 μ„±μž₯ 뿐만 μ•„λ‹ˆλΌ μ½”λ“œλ₯Ό 많이 λ³΄λ©΄μ„œ 쒋은 μ½”λ“œ, ν’ˆμ§ˆ 높은 μ½”λ“œμ— λŒ€ν•œ 관심을 κ³„μ†ν•˜κ³ μž ν•©λ‹ˆλ‹€.😊


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

 

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

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

www.inflearn.com

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