🦁_21.12.08 TIL

BoriΒ·2021λ…„ 12μ›” 8일
2
post-thumbnail

21λ…„ 12μ›” 08일

πŸ“ Javascript

πŸ“Ž μ˜€λ²„λ‘œλ”©(overloading) & μ˜€λ²„λΌμ΄λ”©(overriding)

μ˜€λ²„λ‘œλ”©(overloading)

  • ν•¨μˆ˜μ˜ 이름은 λ™μΌν•˜μ§€λ§Œ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž… λ˜λŠ” κ°œμˆ˜κ°€ λ‹€λ₯Έ λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜κ³  λ§€κ°œλ³€μˆ˜μ— μ˜ν•΄ λ©”μ„œλ“œλ₯Ό κ΅¬λ³„ν•˜μ—¬ ν˜ΈμΆœν•˜λŠ” 방식
    => μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ˜€λ²„λ‘œλ”©μ„ μ§€μ›ν•˜μ§€ μ•Šμ§€λ§Œ arguments 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆλ‹€.
function add(x, y) {
  return x + y;
}

function add(x, y, z) {
  return x + y + z;
}

console.log(add(1, 2)); // NaN
console.log(add(1, 2, 3)); // 6

μ˜€λ²„λΌμ΄λ”©(overriding)

  • λΆ€λͺ¨μ˜ λ©”μ„œλ“œλ₯Ό μžμ‹μ˜ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 의미
    => μƒμœ„ ν΄λž˜μŠ€κ°€ 가지고 μžˆλŠ” λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방식

πŸ“Ž ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή

  • λ°°μ—΄μ΄λ‚˜ 객체의 속성을 ν•΄μ²΄ν•˜μ—¬ κ·Έ 값을 κ°œλ³„ λ³€μˆ˜μ— 담을 수 있게 ν•˜λŠ” JavaScript ν‘œν˜„μ‹
// μ˜ˆμ‹œ1
let a, b, rest;

[a, b] = [10, 20];

console.log(a); // 10
console.log(b); // 20

[a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(rest); // [30, 40, 50]

// μ˜ˆμ‹œ2
// 이름과 성을 μš”μ†Œλ‘œ 가진 λ°°μ—΄
let arr = [1000, ["Bori", "Lee"]];

// ꡬ쑰 λΆ„ν•΄ 할당을 μ΄μš©ν•΄
// firstNameμ—” arr[0]을
// surnameμ—” arr[1]을 ν• λ‹Ήν•˜μ˜€μŠ΅λ‹ˆλ‹€.
let [κ³„μ’Œμž”κ³ , [firstName, surname]] = arr;

console.log(κ³„μ’Œμž”κ³ ); // 1000
console.log(firstName); // Bori
console.log(surname); // Lee

πŸ“Ž try...catch

  • μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ μŠ€ν¬λ¦½νŠΈλŠ” μ€‘λ‹¨λ˜κ³ , μ½˜μ†”μ— μ—λŸ¬κ°€ 좜λ ₯λœλ‹€.
    => try...catch 문법을 μ‚¬μš©ν•˜λ©΄ μŠ€ν¬λ¦½νŠΈκ°€ μ€‘λ‹¨λ˜λŠ” 것을 λ°©μ§€ν•˜κ³ , μ—λŸ¬λŠ” μž‘λŠ”λ‹€.
    • λ¨Όμ €, try {...} μ•ˆμ˜ μ½”λ“œ μ‹€ν–‰
    • μ—λŸ¬κ°€ μ—†λ‹€λ©΄, try μ•ˆμ˜ λ§ˆμ§€λ§‰ μ€„κΉŒμ§€ μ‹€ν–‰λ˜κ³  catch 블둝은 κ±΄λ„ˆλ›΄λ‹€.
    • μ—λŸ¬κ°€ μžˆλ‹€λ©΄, try μ•ˆ μ½”λ“œμ˜ 싀행이 쀑단
      => catch(error) λΈ”λ‘μœΌλ‘œ μ œμ–΄ 흐름이 λ„˜μ–΄κ°
      => λ³€μˆ˜ error(λ³€μˆ˜λͺ… λ³€κ²½ κ°€λŠ₯)λŠ” μ—λŸ¬μ— λŒ€ν•œ μ„€λͺ…이 λ‹΄κΈ΄ μ—λŸ¬ 객체λ₯Ό 포함
try {
  // μ½”λ“œ
} catch (error) { // <= μ—λŸ¬ 객체, error λŒ€μ‹  λ‹€λ₯Έ 이름 μ‚¬μš© κ°€λŠ₯, (error) 없이도 μ‚¬μš© κ°€λŠ₯
 // μ—λŸ¬ 핸듀링 
}

// try...catch...finally
try {
  ... μ½”λ“œλ₯Ό μ‹€ν–‰ ...
} catch(e) {
  ... μ—λŸ¬ 핸듀링 ...
} finally {
  ... 항상 μ‹€ν–‰ ... // μ—λŸ¬ λ°œμƒκ³Ό 상관없이 λ°˜λ“œμ‹œ ν•œ 번 μ‹€ν–‰
}

throw μ—°μ‚°μž

  • throw μ—°μ‚°μžλŠ” μ‚¬μš©μž μ •μ˜ 에외(μ—λŸ¬)λ₯Ό λ°œμƒ(throw)ν•œλ‹€.
    => μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ μ½”λ“œμ˜ 싀행이 쀑단(throw μ΄ν›„μ˜ λͺ…령문은 μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.)
    => catch λΈ”λ‘μœΌλ‘œ μ œμ–΄ 흐름이 λ„˜μ–΄κ°
    => catch 블둝이 μ—†λ‹€λ©΄ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ
function getRectArea(width, height) {
  if (isNaN(width) || isNaN(height)) {
    throw 'Parameter is not a number!' 
  }
}

try {
  getRectArea(3, 'A'); // μˆ«μžκ°€ μ•„λ‹Œ 값이 듀어감
} catch (e) {
  console.error(e); // 'Parameter is not a number!' 
}

πŸ“Ž 동기식 처리 λͺ¨λΈ vs 비동기식 처리 λͺ¨λΈ

[좜처: Poiema Web - 동기식 처리 λͺ¨λΈκ³Ό 비동기식 처리 λͺ¨λΈ]

동기식 처리 λͺ¨λΈ(Synchronous processing model)

  • 직렬적으둜 νƒœμŠ€ν¬(task)λ₯Ό μˆ˜ν–‰
    => νƒœμŠ€ν¬λŠ” 순차적으둜 μ‹€ν–‰λ˜λ©° μ–΄λ–€ μž‘μ—…μ΄ μˆ˜ν–‰ 쀑이면 λ‹€μŒ μž‘μ—…μ„ λŒ€κΈ°
    => λ™κΈ°μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œλŠ” 순차적으둜 μ‹€ν–‰λœλ‹€.

[좜처: Poiema Web - 동기식 처리 λͺ¨λΈ(Synchronous processing model)]

  • 예λ₯Ό λ“€μ–΄ μ„œλ²„μ—μ„œ 데이터λ₯Ό κ°€μ Έμ™€μ„œ 화면에 ν‘œμ‹œν•˜λŠ” νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰ν•  λ•Œ, μ„œλ²„μ— 데이터λ₯Ό μš”μ²­ν•˜κ³  데이터가 응닡될 λ•ŒκΉŒμ§€ μ΄ν›„μ˜ νƒœμŠ€ν¬λ“€μ€ λΈ”λ‘œν‚Ή(Blocking) λœλ‹€.

비동기식 처리 λͺ¨λΈ(Asynchronous processing model λ˜λŠ” Non-Blocking processing model)

  • 병렬식 νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰
    => νƒœμŠ€ν¬κ°€ μ’…λ£Œλ˜μ§€ μ•Šμ€ μƒνƒœλΌ ν•˜λ”λΌλ„ λŒ€κΈ°ν•˜μ§€ μ•Šκ³  λ‹€μŒ νƒœμŠ€ν¬ μ‹€ν–‰
  • 비동기 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ ν•¨μˆ˜ λ‚΄λΆ€μ˜ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œκ°€ μ™„λ£Œλ˜μ§€ μ•Šμ•˜λ‹€ 해도 기닀리지 μ•Šκ³  μ¦‰μ‹œ μ’…λ£Œλœλ‹€.
    => 즉, 비동기 ν•¨μˆ˜ λ‚΄λΆ€μ˜ λΉ„λ™κΈ°λ‘œ λ™μž‘ν•˜λŠ” μ½”λ“œλŠ” 비동기 ν•¨μˆ˜κ°€ μ’…λ£Œλœ 이후에 μ™„λ£Œλœλ‹€.

[좜처: Poiema Web - 비동기식 처리 λͺ¨λΈ(Asynchronous processing model)]

  • 예λ₯Ό λ“€μ–΄ μ„œλ²„μ—μ„œ 데이터λ₯Ό κ°€μ Έμ™€μ„œ 화면에 ν‘œμ‹œν•˜λŠ” νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰ν•  λ•Œ, μ„œλ²„μ— 데이터λ₯Ό μš”μ²­ν•œ 이후 μ„œλ²„λ‘œλΆ€ν„° 데이터가 응닡될 λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜μ§€ μ•Šκ³ (Non-Bloking) μ¦‰μ‹œ λ‹€μŒ νƒœμŠ€ν¬λ₯Ό μˆ˜ν–‰.
    => 이후 μ„œλ²„λ‘œλΆ€ν„° 데이터가 μ‘λ‹΅λ˜λ©΄ μ΄λ²€νŠΈκ°€ λ°œμƒν•˜κ³  이벀트 ν•Έλ“€λŸ¬κ°€ 데이터λ₯Ό 가지고 μˆ˜ν–‰ν•  νƒœμŠ€ν¬λ₯Ό 계속해 μˆ˜ν–‰

πŸ“Ž 콜백 ν•¨μˆ˜(callback function)

ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ‚΄λΆ€λ‘œ μ „λ‹¬λ˜λŠ” ν•¨μˆ˜

πŸ“Ž 콜백 ν—¬(Callback Hell)

  • 콜백 ν•¨μˆ˜λ₯Ό 톡해 비동기 처리 결과에 λŒ€ν•œ 후속 처리λ₯Ό μˆ˜ν–‰ν•˜λŠ” 비동기 ν•¨μˆ˜κ°€ 비동기 처리 κ²°κ³Όλ₯Ό 가지고 λ˜λ‹€μ‹œ 비동기 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€λ©΄ 콜백 ν•¨μˆ˜ 호좜이 μ€‘μ²©λ˜μ–΄ λ³΅μž‘λ„κ°€ λ†’μ•„μ§€λŠ” ν˜„μƒ
    => 비동기 처리λ₯Ό μœ„ν•΄ 콜백 νŒ¨ν„΄μ„ μ‚¬μš©
    => 처리 μˆœμ„œλ₯Ό 보μž₯ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 개의 콜백 ν•¨μˆ˜κ°€ 쀑첩
    => λ³΅μž‘λ„κ°€ 높아짐
    => Welcome to Callback Hell😈
step1(function(value1) {
  step2(value1, function(value2) {
    step3(value2, function(value3) {
      step4(value3, function(value4) {
        step5(value4, function(value5) {
            // value5λ₯Ό μ‚¬μš©ν•˜λŠ” 처리
        });
      });
    });
  });
});

πŸ“Ž promise

πŸ“Ž fetch

πŸ“Ž async, await

μ°Έκ³ 


πŸ“ μ„œλ₯˜ 합격λ₯ μ„ λ†’μ΄λŠ” Github 관리 μ „λž΅ with μ΄λ³΄λΌλ‹˜


마무리

  • μž‘μ„±μ€‘μž…λ‹ˆλ‹€ ;)

1개의 λŒ“κΈ€

comment-user-thumbnail
2021λ…„ 12μ›” 8일

잘 μ½μ—ˆμŠ΅λ‹ˆλ‹Ή~!

λ‹΅κΈ€ 달기