개발 곡뢀/λ°λΈŒμ½”μŠ€ TIL

[ν΄λΌμš°λ”© μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ—”μ§€λ‹ˆμ–΄λ§ TIL] 240108 - JS 데이터 처리

κ°€μš€μ΄ 2024. 1. 9. 15:14

Intro...


κ°‘μžκΈ°(?) κ°•μ˜ λΆ„λŸ‰μ΄ λ§Žμ•„μ Έμ„œ λ‹€ λ“£λŠλΌ 쑰금 νž˜λ“€μ—ˆλ‹€.

μ΄μ œλŠ” μ§„μ§œ ꡐ윑과 κ°œλ°œμ— 집쀑해야겠닀.

 

 

 

였늘 ν•™μŠ΅ν•œ λ‚΄μš©

: 데이터 처리 > κΈ°λ³Έ 및 flow control


μ—°μ‚°μž

단항 μ—°μ‚°μž

  • void: ν‘œν˜„μ‹μ„ 평가할 λ•Œ 값을 λ°˜ν™˜ν•˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μ—°μ‚°μž
  • typeof: νƒ€μž…μ„ λ¬Έμžμ—΄λ‘œ λ‚˜νƒ€λƒ„
  • delete: 객체 속성 μ‚­μ œ

 

μ‚°μˆ  μ—°μ‚°μž

  • 단항 μ‚°μˆ  μ—°μ‚°μž
    • ++, --. 숫자 1을 증가/κ°μ†Œ μ‹œν‚€κ³  μ•”λ¬΅μ μœΌλ‘œ ν• λ‹Ή
    • ++1, --1: μ „μœ„ 증가/κ°μ†Œ μ—°μ‚°μž
    • 1++, 1--: ν›„μœ„ 증가/κ°μ†Œ μ—°μ‚°μž
  • 이항 μ‚°μˆ  μ—°μ‚°μž
    • +, -, /, *, %

 

관계 μ—°μ‚°μž

: ν”Όμ—°μ‚°μžλ₯Ό 비ꡐ해 결과에 따라 Boolean κ°’ λ°˜ν™˜

  • in / instaneof
const person = {
  name: 'gayeon'
}

'name' in person // true
'age' in person // false

person instanceof Object // true
person instanceof String // false

 

비ꡐ μ—°μ‚°μž

  • ===. !==: κ°’κ³Ό νƒ€μž…μ΄ λͺ¨λ‘ κ°™κ±°λ‚˜ 닀름
  • ==, !=: 값이 κ°™κ±°λ‚˜ 닀름
  • <, <=, >, >=

 

논리 μ—°μ‚°μž

: 두 개의 ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜λ₯Ό λ°˜ν™˜, λ°˜ν™˜λ˜λŠ” 값은 무쑰건 Boolean은 μ•„λ‹˜

  • A && B, A || B
  • null, undefined, ''λŠ” false둜 평가
  • && => null 검사에 ν™œμš©
  • || => 캐싱 값에 λŒ€ν•΄ μ‚¬μš©
false || 'banana' // 첫 번째 ν”Όμ—°μ‚°μžκ°€ false인 경우, 두 번째 ν”Όμ—°μ‚°μžκ°€ λ°˜ν™˜μ΄ λ˜λŠ” λŒ€μ‘κ°‘μŠΉλ‘œ ν™œμš© 됨

 

기타 μ—°μ‚°μž

  • μ‰Όν‘œ μ—°μ‚°μž: ν”Όμ—°μ‚°μžλ₯Ό μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½ μˆœμ„œλ‘œ ν‰κ°€ν•˜κ³  λ§ˆμ§€λ§‰ μ—°μ‚°μžμ˜ 값을 λ°˜ν™˜
const a = (1, 2)
a // 2

let x = 1
x = (x++, x)
x // 2
  • λ¬Έμžμ—΄ μ—°μ‚°μž
'μ‚¬κ³ΌλŠ”' + ' ' + 'λ§›μžˆλ‹€.' // μ‚¬κ³ΌλŠ” λ§›μžˆλ‹€.
  • μ˜΅μ…”λ„ μ—°μ‚°μž
const foo = { name: 'apple' }
foo.age?.apple // undefined
  • ν• λ‹Ή μ—°μ‚°μž
    • +=, -=, *=, /=, %=, **=, &&=, ||=
  • μ‚Όν•­ μ—°μ‚°μž
    • 쑰건문 ? 참일 경우 λ°˜ν™˜: 거짓일 경우 λ°˜ν™˜

 

μž¬μ‚¬μš© 처리기 (=ν•¨μˆ˜)

μ™ΈλΆ€ μ½”λ“œκ°€ ν˜ΈμΆœν•  수 μžˆλŠ” ν•˜μœ„ ν”„λ‘œκ·Έλž¨

  • input: 처리λ₯Ό μœ„ν•œ μ£Όμž… 데이터
  • output: 처리 ν›„ κ²°κ³Ό 데이터
  • λ³Έλ¬Έ: λͺ…λ Ήλ¬Έμ˜ μ‹œν€€μŠ€λ‘œ ꡬ성

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜λŠ” 객체처럼 속성과 λ©”μ„œλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€.

κ°μ²΄μ™€μ˜ 차이점은 ν•¨μˆ˜λŠ” μ™ΈλΆ€μ—μ„œ '호좜'이 κ°€λŠ₯ν•˜λ‚˜, κ°μ²΄λŠ” μ™ΈλΆ€μ—μ„œ '호좜이 λΆˆκ°„μœΌν•˜λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λŠ” 일급객체이닀.

μΌκΈ‰κ°μ²΄λž€, λ‹€λ₯Έ 객체듀에 일반적으둜 적용 κ°€λŠ₯ν•œ 연산을 λͺ¨λ‘ μ§€μ›ν•˜λŠ” 객체λ₯Ό 가리킨닀.

  • 일급 κ°μ²΄λŠ” ν•¨μˆ˜μ˜ μ‹€μ œ λ§€κ°œλ³€μˆ˜κ°€ 될 수 μžˆλ‹€.
function foo(input) {
  return input() + 1;
}

function bar() {
  return 1;
}

foo(bar) // 2
  • ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’μ΄ 될 수 μžˆλ‹€.
// input()() -> bar() -> 1

function foo(input) {
  return input()() + 1;
}

function bar() {
  return 1;
}

function baz() {
  return bar;
}

foo(baz); // 2
  • ν• λ‹Ήλͺ…λ Ήλ¬Έ (=) 의 λŒ€μƒμ΄ 될 μˆ˜μžˆλ‹€.
  • 동일 비ꡐ λŒ€μƒμ΄ 될 수 μžˆλ‹€. (κ°’μœΌλ‘œ ν‘œν˜„ κ°€λŠ₯)

 

μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ νŠΉμ§•

  • ν•¨μˆ˜ 이름: μ™ΈλΆ€μ—μ„œ 호좜 μ‹œ 이름이 μ‚¬μš©λœλ‹€.
  • 맀개 λ³€μˆ˜: ν•¨μˆ˜μ— μ „λ‹¬λ˜λŠ” 인수
  • ν•¨μˆ˜ λͺΈμ²΄: λͺ…λ Ή μ‹œν€€μŠ€λ“€μ΄ μ‘΄μž¬ν•˜λŠ” 블둝

 

λ§€κ°œλ³€μˆ˜

  • κΈ°λ³Έκ°’ λ§€κ°œλ³€μˆ˜
function foo(a = 1) {
  return a;
}

foo() // 1
  • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜
    • κ°€λ³€ν•­ ν•¨μˆ˜
    • spread μ—°μ‚°μž
function foo(arg, ...rest) {
  console.log(rest);
  return arg;
}

foo('a','b','c') // ['b', 'c']
// a
  • arguments 객체: ν•¨μˆ˜μ— μ „λ‹¬λ˜λŠ” 인자λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” 객체
    • μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜ => Function 객체 상속
    • Function 객체의 κΈ°λ³Έ 속성 => arguments
    • ν˜•νƒœ: μœ μ‚¬ λ°°μ—΄ ν˜•νƒœ (=λ°°μ—΄ λ‚΄μž₯ λ©”μ„œλ“œ μ‚¬μš© λΆˆκ°€)

 

βœ… λ§€κ°œλ³€μˆ˜(parameter)와 인자(argument)의 차이

: λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜μ΄κ³ , μΈμžλŠ” ν•¨μˆ˜κ°€ 호좜될 λ•Œ λ„˜κΈ°λŠ” κ°’

function ν•¨μˆ˜λͺ…(λ§€κ°œλ³€μˆ˜) {
  return λ§€κ°œλ³€μˆ˜;
}

ν•¨μˆ˜λͺ…('a') // <- 'a': 인자

 

ν•¨μˆ˜ 생성 방법

  • ν•¨μˆ˜ μ„ μ–Έλ¬Έ
function foo(arg) {
  return arg;
}
  • ν•¨μˆ˜ ν‘œν˜„μ‹
const foo = function (arg) {
  return arg;
}; // 읡λͺ…ν•¨μˆ˜

const bar = function baz(arg) {
  return arg;
}; // κΈ°λͺ…ν•¨μˆ˜

const temp = foo(1);
console.log(temp);

console.log(baz(1)); // ReferenceError: baz is not defined (bar둜 ν˜ΈμΆœν•΄μ•Ό 함)
  • Function μƒμ„±μž ν•¨μˆ˜
    • new Function(arg1, arg2, ..., 'return 1')
const bar = new Function(undefined, 'return 1');
bar(1) // 1
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜ (ES6 이후)
    • 읡λͺ… ν•¨μˆ˜ (ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œλ§Œ μ‚¬μš© κ°€λŠ₯)
    • const λ³€μˆ˜λͺ… = (arg1, ...) => { return ... }

 

ν•¨μˆ˜ μ‚¬μš© νŒ¨ν„΄

  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ (IIFE)
    • ν•¨μˆ˜ μ •μ˜μ™€ λ™μ‹œμ— μ‹€ν–‰
    • μ½”λ“œ 평가 -> μ½”λ“œ μ‹€ν–‰ -> 졜초 1회 μ‹€ν–‰9
    • 단 ν•œ 번만 호좜되며 λ‹€μ‹œ 호좜 X
    • μ΄ˆκΈ°ν™” μ²˜λ¦¬μ— 주둜 μ‚¬μš©
(function() {
  console.log('foo')
}())
  • μž¬κ·€ ν•¨μˆ˜
    • 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜
    • νƒˆμΆœ 쑰건을 ν•¨μˆ˜ μ΄ˆλ°˜μ— μ •μ˜ν•΄μ•Ό ν•œλ‹€.
    • 직관성이 λ–¨μ–΄μ§ˆ 수 있음
  • 쀑첩 ν•¨μˆ˜
    • λ‚΄λΆ€ ν•¨μˆ˜
    • λ‚΄λΆ€ ν•¨μˆ˜ λ‚΄μ˜ λ³€μˆ˜ μ°Έμ‘° -> λΆ€λͺ¨λ₯Ό ν¬ν•¨ν•œ μ™ΈλΆ€ λ²”μœ„ μ°Έμ‘° κ°€λŠ₯
    • λΆ€λͺ¨ ν•¨μˆ˜ λ‚΄μ˜ λ³€μˆ˜ μ°Έμ‘° -> μžμ‹ λ²”μœ„ μ°Έμ‘° λΆˆκ°€
    • μŠ€μ½”ν”„ 체인
  • 콜백 ν•¨μˆ˜
    • ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜κ°€ 될 수 μžˆλ‹€.
    • 인자둜 Bν•¨μˆ˜λ₯Ό 받은 Aν•¨μˆ˜ -> Aν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— B ν•¨μˆ˜λ„ 호좜
    • νŠΉμ • μ΄λ²€νŠΈκ°€ λ°œμƒν–ˆμ„ λ•Œ -> μ‹œμŠ€ν…œμ— μ˜ν•΄ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜

 

Flow Control

: λͺ…λ Ή λ˜λŠ” ν•¨μˆ˜ 호좜이 μ‹€ν–‰λ˜κ±°λ‚˜ ν‰κ°€λ˜λŠ” μˆœμ„œ

  • goto: λ‹€λ₯Έ κ΅¬λ¬Έμ—μ„œ μ‹œμž‘ (ꢌμž₯ν•˜μ§€ μ•ŠμŒ)
  • choice: if-else, switch
  • loop
  • continue
  • break

 

ν‘œν˜„μ‹κ³Ό λ¬Έ

  • ν‘œν˜„μ‹: μ–΄λ–€ κ°’μœΌλ‘œ μ΄ν–‰λ˜λŠ” μž„μ˜μ˜ μœ νš¨ν•œ μ½”λ“œ λ‹¨μœ„
    • ν‘œν˜„μ‹μ΄ ν‰κ°€λ˜λ©΄, μƒˆλ‘œμš΄ 값을 μƒμ„±ν•˜κ±°λ‚˜ κΈ°μ‘΄ 값을 μ°Έμ‘°
    • κ°’μœΌλ‘œ 평가될 수 μžˆλŠ” 문은 λͺ¨λ‘ ν‘œν˜„μ‹
    • λ¦¬ν„°λŸ΄ ν‘œν˜„μ‹, ν•¨μˆ˜ ν‘œν˜„μ‹, ...
  • λ¬Έ: ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„, μ΅œμ†Œ μ‹€ν–‰ λ‹¨μœ„
    • == λͺ…λ Ήλ¬Έ
    • μ„ μ–Έλ¬Έ, ν• λ‹Ήλ¬Έ, μ œμ–΄λ¬Έ, 반볡문, λΈ”λŸ­λ¬Έ ({ ... }) ...

 

쑰건문

  • if-elseλ¬Έ 
    • λ§ˆν‹΄ 파울러의 λ¦¬νŒ©ν† λ§ μžλ£Œμ—μ„œ nested conditional을 μ§€μ–‘ν•˜κ³  Guard Clauses ν˜•νƒœλ‘œ κ΅¬ν˜„μ„ μ§€ν–₯ 함
  • switch

 

반볡문

  • 쑰건뢀 loop
    • μ‹œμž‘ν•  λ•Œ 쑰건을 ν‰κ°€ν•˜λŠ” νƒ€μž…
      • whileλ¬Έ
      • λ³Έλ¬Έ μƒλž΅ κ°€λŠ₯
    • λ§ˆμ§€λ§‰μ— 쑰건을 ν‰κ°€ν•˜λŠ” νƒ€μž…
      • do...whileλ¬Έ
      • 본문은 항상 ν•œ 번 이상 μ‹€ν–‰
do {
  λͺ…λ Ήλ¬Έ
} while (ν‘œν˜„μ‹);
  • for loop
    • for(초기문;쑰건문;증감문;) { ... } ν˜•μ‹
    • 쑰건문: loopλ‚΄ μ½”λ“œ μ‹€ν–‰ μ „, 쑰건 ν‰κ°€ν•˜μ—¬ loopλ₯Ό 지속할 μ§€ νŒλ‹¨
    • 증감문: loopλ‚΄ μ½”λ“œ μ‹€ν–‰ ν›„, μ‹€ν–‰λ˜λŠ” λ¬Έμž₯
  • collection loop (foreach)
    • forλ¬Έκ³Ό 달리 λͺ…μ‹œμ μœΌλ‘œ μΉ΄μš΄ν„°(λ£¨ν”„λ³€μˆ˜)λ₯Ό κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • 잠재적인 μˆœν™˜ 횟수 였λ₯˜λ₯Ό μ˜ˆλ°©ν•œλ‹€.
    • μžλ°”μŠ€ν¬λ¦½νŠΈ μ»¬λ ‰μ…˜ 루프 μ’…λ₯˜ => for...of, for...in
      • for...of: 반볡 κ°€λŠ₯ν•œ 객체(Array, Set, String...)λ₯Ό 톡해 λ°˜λ³΅ν•˜λŠ” 루프λ₯Ό λ§Œλ“ λ‹€.
      • for...in: for([λ³€μˆ˜] in [object]) { ... } 객체 μ—΄κ±° 속성을 톡해 μ§€μ •λœ λ³€μˆ˜λ₯Ό 반볡
  • break λ¬Έ
    • μ œμ–΄νλ¦„μ˜ μ’…λ₯˜ 쀑 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑단
    • 반볡문, switchλ¬Έ μ’…λ£Œμ‹œν‚¬ λ•Œ μ‚¬μš©
    • κ°€μž₯ κ°€κΉŒμš΄ while, do-while, for, switch문을 μ’…λ£Œν•˜κ³  λ‹€μŒ λͺ…λ Ήμ–΄λ‘œ λ„˜μ–΄κ°
  • continue λ¬Έ
    • μ œμ–΄νλ¦„μ˜ μ’…λ₯˜ 쀑 ν˜„μž¬ μ‹€ν–‰ κ΅¬λ¬Έμ—μ„œ λ–¨μ–΄μ§„ ν•œ ꡬ문의 μ§‘ν•© μ‹€ν–‰ μ’…λ₯˜μ— 속함
    • while, do...while, for문을 λ‹€μ‹œ μ‹œμž‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
    • κ°€μž₯ μ•ˆμͺ½μ˜ while, do-while, for문을 λ‘˜λŸ¬μ‹Ό λ°˜λ³΅μ„ μ’…λ£Œν•˜κ³ , λ‹€μŒ loop μ‹€ν–‰
const foo = () => {
  let const = 0;
  while(count<3) {
    count++;
    console.log(count);
    continue;
    console.log('μ—¬κΈ°');
  }
};

foo(); // 1 2 3

 

μ˜ˆμ™Έ μ²˜λ¦¬ν•˜κΈ°

μ˜ˆμ™Έ 상황

: λŸ°νƒ€μž„ λ•Œ λ°œμƒν•  수 μžˆλŠ” μ˜λ„μΉ˜ μ•Šμ€ μƒν™©μœΌλ‘œ

흐름 μ œμ–΄ μ‹œ λ°œμƒν•  수 μžˆλŠ” μ˜ˆμ™Έ μƒν™©μ΄λ―€λ‘œ, 이λ₯Ό μ΄ν•΄ν•˜μ—¬ μ½”λ“œ λ ˆλ²¨μ—μ„œ λŒ€μ‘ν•΄μ•Ό ν•œλ‹€.

μ˜ˆμ™Έ 상황을 ν•Έλ“€λ§ν•˜μ§€ μ•ŠμœΌλ©΄ κΈ°λŠ₯이 λ™μž‘ν•˜μ§€ μ•Šκ±°λ‚˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ’…λ£Œλ  수 μžˆλ‹€.

 

μ˜ˆμ™Έ 원인

  • μ½”λ“œ 레벨 문제
  • ν•˜λ“œμ›¨μ–΄, λ””λ°”μ΄μŠ€ 문제
  • 라이브러리 손상
  • μ‚¬μš©μž μž…λ ₯ μ‹€μˆ˜
  • ...

 

μ˜ˆμ™Έ μ’…λ₯˜

  • ECMAScript Error: μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬ νƒ€μž…
    • RangeError: 값이 집합에 μ—†κ±°λ‚˜, ν—ˆμš© λ²”μœ„κΈ° 아닐 λ•Œ
    • ReferenceError: μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜ μ°Έμ‘° μ‹œ
    • SyntaxError: 문법을 μ§€ν‚€μ§€ μ•Šμ•˜μ„ λ•Œ
    • TypeError: 값이 κΈ°λŒ€ν•œ μžλ£Œν˜•μ΄ μ•„λ‹ˆμ—¬μ„œ 연산이 λΆˆκ°€ν•  λ•Œ
  • DOMException: Wep API λ ˆλ²¨μ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬ νƒ€μž…
    • NetworkError: λ„€νŠΈμ›Œν¬ μ—λŸ¬ λ°œμƒ μ‹œ
    • AbortError: μž‘μ—…μ΄ μ€‘λ‹¨λ˜μ—ˆμ„ λ•Œ
    • TimeoutError: μž‘μ—… μ‹œκ°„μ΄ μ΄ˆκ³Όλ˜μ—ˆμ„ λ•Œ
  • κ·Έ μ™Έ
    • κ°œλ°œμžκ°€ μ˜ˆμƒμΉ˜ λͺ»ν•œ μ˜ˆμ™Έ 상황을 μ˜ˆμƒν•΄ 핸듀링
    • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Error 객체λ₯Ό μ‚¬μš©ν•΄ 직접 μ—λŸ¬λ₯Ό μ •μ˜λ‚΄λ¦¬κ³  핸듀링할 수 μžˆλ‹€.

 

μ˜ˆμ™Έ 처리

  • throw λ¬Έ
    • μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¬ λ•Œ μ‚¬μš©, throwλ¬Έ 이후 λͺ…령문은 μ‹€ν–‰λ˜μ§€ μ•ŠμŒ
    • catch λΈ”λ‘μ—μ„œ μ—λŸ¬ 객체λ₯Ό 핸듀링 함
    • μˆœμ„œ
      1. μ˜ˆμ™Έ λ°œμƒ μ‹œ, ν˜„μž¬ ν•¨μˆ˜ μ‹€ν–‰ 쀑지
      2. μ—λŸ¬κ°μ²΄μ™€ ν•¨κ»˜ μ—λŸ¬κ°€ throw
      3. 호좜자 사이에 catch블둝이 있으면 catchλΈ”λ‘μœΌλ‘œ 전달 μ—†μœΌλ©΄ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ
  • Error 객체
    • μ‚¬μš©μžκ°€ 직접 Errorr객체 μ •μ˜
    • new Error('μ—λŸ¬ λ©”μ‹œμ§€')
    • Error.message
    • Error.name
    • ECMAScript ν‘œμ€€ λ‚΄μž₯ 였λ₯˜ μœ ν˜• 쑴재
  • try...catch λ¬Έ 
    • μ—λŸ¬ catch
    • μ˜ˆμ™Έκ°€ λ°œμƒν•  경우, μ˜ˆμ™Έ 처리λ₯Ό 맑을 ν•˜λ‚˜ μ΄μƒμ˜ λ°˜μ‘ λͺ…령문을 μ§€μ •
      • try λΈ”λ‘μ˜ λͺ…λ Ήλ¬Έ 쀑 ν•˜λ‚˜κ°€ μ‹€νŒ¨ν•˜λ©΄, catch둜 μ œμ–΄κΆŒμ΄ λ„˜μ–΄κ°
      • try λΈ”λ‘μ˜ λͺ…λ Ήλ¬Έ 쀑 ν•˜λ‚˜κ°€ μ„±κ³΅ν•˜λ©΄, catch둜 μ œμ–΄κΆŒμ΄ λ„˜μ–΄κ°€μ§€ μ•ŠμŒ
      • cahtchλ¬Έμ—μ„œ μ˜ˆμ™Έκ°€ 처리 되면 더 μƒμœ„ μ½œμŠ€νƒμ—μ„  더이상 μ˜ˆμ™Έκ°€ 타고 μ˜¬λΌκ°€μ§€ μ•ŠμŒ
    • finally 블둝
      • tryλΈ”λ‘μ—μ„œ μ˜ˆμ™Έ 상황이 λ°œμƒν•˜μ§€ μ•Šλ”λΌλ„ μ‹€ν–‰
      • μ˜ˆμ™Έ λ°œμƒμ‹œ try→catch→finally
      • λ°œμƒ x try→finally
    • networkμ—λŸ¬ μ‹œ, μ—λŸ¬λ₯Ό κ°μ§€ν•΄μ•Όν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, μœ μ €κ°€ 잘λͺ» 데이터λ₯Ό μž…λ ₯ν•œ 경우 λ“± 외뢀에 μ˜μ‘΄λ˜μ–΄μ„œ κ΅¬ν˜„λœ λ‘œμ§μ—μ„œ μ‚¬μš©

 

⚠️ call stack

: μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œκ°€ μ‹€ν–‰λ˜λ©° μƒμ„±λ˜λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰

ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μŠ€νƒμ΄ μŒ“μ΄κ³ , ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλ˜λ©΄ μ½œμŠ€νƒμ—μ„œ μŠ€νƒμ„ μ œκ±°ν•˜λŠ” 원리

Error throw되면 콜 μŠ€νƒμ„ ν™•μΈν•˜μ—¬, ν•Έλ“€λ§ν•˜κ³  μžˆλŠ” catch문이 μžˆλŠ” μŠ€νƒμ—μ„œ μ²˜λ¦¬ν•œλ‹€.

 

 

 

 

마무리


μ—¬μœ λΆ€λ¦¬λ‹€κ°€ κ°•μ˜λ₯Ό λ―Έλ€„μ„œ 듀을 λ»” ν–ˆλ‹€.

TIL은 λ―Έλ€„μ‘Œμ§€λ§Œ... κ³΅λΆ€ν•œ λ‚΄μš©μ΄ λ§Žμ•„μ„œ λ³΅μŠ΅μ„ μ—΄μ‹¬νžˆ ν•΄μ•Όν•  것 κ°™λ‹€.