λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Dev-diary/λ…μ„œ

22.04.09 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ™€ ν•¨μˆ˜

by ciocio 2022. 4. 9.

πŸ“  책을 읽게 된 계기

 

4μ£Ό ν”„λ‘œμ νŠΈλ₯Ό νƒ€μž…μŠ€ν¬λ¦½νŠΈλ‘œ μ§„ν–‰ν–ˆλ‹€.

νƒ€μž…μŠ€ν¬μž…νŠΈλ₯Ό λ„μž…ν•œ μ΄μœ λŠ”, ν”„λ‘œκ·Έλž¨μ΄ λ³΅μž‘ν•΄μ§ˆ 것을 μš°λ €ν•΄μ„œλ‹€.

μ•±μ˜ 상당 λΆ€λΆ„μ—μ„œ λ¬Έμžμ—΄, 숫자, λ°°μ—΄ λ“± λ‹€μ–‘ν•œ μžλ£Œν˜•μ΄ κ°’μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 객체λ₯Ό data둜 λ‹€λ€˜κΈ°λ•Œλ¬Έμ΄λ‹€.

객체 λ‚΄μ˜ 값을 μ‘°μž‘ν•˜λ©΄μ„œ λ°œμƒν•˜λŠ” λ‹€μ–‘ν•œ 였λ₯˜λ“€μ„ νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μž‘μ•„μ€„κ±°λΌ μƒκ°ν–ˆλ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•΄μ•Όλ§Œ 였λ₯˜λ₯Ό λ°œκ²¬ν•˜μ§€λ§Œ

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” 컴파일 λ‹¨κ³„μ—μ„œ 였λ₯˜λ₯Ό λ°œκ²¬ν•  수 있기 λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž˜λ°μ— 더 효과적일거라 νŒλ‹¨ν–ˆλ‹€.

 

μ‹œμž‘μ€ μ’‹μ•˜μœΌλ‚˜ ! μ–Έμ–΄λ₯Ό μΆ©λΆ„νžˆ μˆ™μ§€ν•  μ‹œκ°„ 없이 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆλ”λ‹ˆ ν•˜λŠ” λ‚΄λ‚΄ μ°œμ°œν–ˆλ‹€.

λ‚΄κ°€ μ•„λŠ” μ•„μ£Ό 기본적인 νƒ€μž… λ²”μœ„ μ•ˆμ—μ„œλ§Œ 맴돌고 μžˆλ‹€λŠ” 생각이 λ“€μ—ˆλ‹€.

νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ μž₯점을 λ°±λΆ„ ν™œμš©ν•˜μ§€ λͺ»ν•œ λŠλ‚Œμ΄ λ“€μ—ˆκ³ , μ •μ  νƒ€μž… μ–Έμ–΄λ₯Ό 곡뢀할 ν•„μš”μ„±λ„ κΉ¨λ‹¬μ•˜λ‹€.

μ’€ 더 근본적인 κ°œλ…μ„ 닀지고 μ‹Άμ–΄μ„œ 책을 찾게 λ˜μ—ˆλ‹€.

(κ·Έ μ™Έ λŒ€κΈ°μ€‘μΈ μ±…λ“€ : μƒκ°ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°, introduction to Algorithm)

 


λͺ©μ°¨

βœ” νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‹€ν–‰ν•˜λŠ” λ‹€μ–‘ν•œ 방법
βœ” μ‹œκ·Έλ‹ˆμ²˜ μ˜€λ²„λ‘œλ”©
βœ” λ‹€ν˜•μ  ν•¨μˆ˜
βœ” λ‹€ν˜•μ  νƒ€μž… 별칭

 

 

πŸ“ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‹€ν–‰ν•˜λŠ” λ‹€μ–‘ν•œ 방법

 

νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” νŠΉλ³„ν•œ 상황을 μ œμ™Έν•˜λ©΄ ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ νƒ€μž…μ€ μΆ”λ‘ ν•˜μ§€ μ•ŠλŠ”λ‹€.
그에 λΉ„ν•΄ λ°˜ν™˜ νƒ€μž…μ€ μΆ”λ‘ ν•œλ‹€ ❗
ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λŠ” κ°œλ°œμžκ°€ λͺ…μ‹œν•΄μ£ΌλŠ” 것이 μ’‹μ§€λ§Œ, λ°˜ν™˜ νƒ€μž…μ€ λͺ…μ‹œν•˜μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

+νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ μƒμ„±μžλ₯Ό μ œμ™Έν•œ λͺ¨λ“  문법을 μ•ˆμ „ν•˜κ²Œ μ§€μ›ν•œλ‹€.

 

// 유λͺ… ν•¨μˆ˜
function func1(name: string){
  return 'hello ' + name;
}

// ν•¨μˆ˜ ν‘œν˜„μ‹
let func2 = function(name: string){
  return 'hello ' + name;
}

// ν™”μ‚΄ν‘œ ν•¨μˆ˜ ν‘œν˜„μ‹
let func3 = (name: string) => {
  return 'hello ' + name;
}

// λ‹¨μΆ•ν˜• ν™”μ‚΄ν‘œ ν•¨μˆ˜ ν‘œν˜„μ‹
let func4 = (name: string) => 
  'hello ' + name;
  
// ν•¨μˆ˜ μƒμ„±μž (μ‚¬μš© 자제)
let func5 = new Function('name', 'return "hello " + name');

 

 

 πŸ”— νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜ μƒμ„±μžλ‘œ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•˜λ©΄ μ•ˆλ˜λŠ” 이유 ? 

 

ν•¨μˆ˜ μƒμ„±μžλ‘œ μ„ μ–Έν•œ ν•¨μˆ˜μ˜ νƒ€μž…μ€ Function 이닀.

Function νƒ€μž…μ€ Function.prototype의 λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ 가진 (μ€‘μš”ν•œ) 객체닀.

그런데 λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό λ°˜ν™˜ νƒ€μž…μ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ 인수λ₯Ό 전달해도 ν˜ΈμΆœν•  수 있게 λœλ‹€.

이 κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ 생겨도 νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ 도와쀄 수 μžˆλŠ” 게 μ—†λ‹€. κ·Έλž˜μ„œ ν•¨μˆ˜ μƒμ„±μžλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠλŠ”κ±°λ‹€.

 

 

 • 선택적 λ§€κ°œλ³€μˆ˜ & κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ 

 

// 선택적 λ§€κ°œλ³€μˆ˜
function log(message: string, userId?: string){
  let time = new Date().toLocalTimeString();
  console.log(time, message, userId || 'Not signed in');
}

 

// κΈ°λ³Έ λ§€κ°œλ³€μˆ˜
function log(message: string, userId = 'Not signed in'){
  let time = new Date().toISOString();
  console.log(time, message, userId);
}

 

μ‹€λ¬΄μ—μ„œλŠ” 선택적 λ§€κ°œλ³€μˆ˜λ³΄λ‹€ κΈ°λ³Έ λ§€κ°œλ³€μˆ˜λ₯Ό 더 자주 μ‚¬μš©ν•œλ‹€.

 

 

 • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ 

 

// μ•ˆμ „ν•˜μ§€ μ•Šμ€ arguments νƒ€μž…
function sumVariadic(): number {
  return Array
    .from(arguments)
    .reduce((total, n) => total + n, 0);
}

sumVariadic(1, 2, 3);  // 6으둜 평가

 

// μ•ˆμ „ν•œ νƒ€μž…μ˜ κ°€λ³€ 인수 → rest parameters
function simVariadicSafe(...numbers: number[]): number {
  return numbers.reduce((total, n) => total + n, 0);
}

simVariadicSafe(1, 2, 3);  // 6으둜 평가

 

rest parameter λ₯Ό μ‚¬μš©ν•΄ 더 μ•ˆμ „ν•œ νƒ€μž… 체크 😚

 

λ°˜μ‘ν˜•

λŒ“κΈ€