πŸ‘©πŸ»‍πŸ’»/Swift

27. 였λ₯˜ 처리 - iOS ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μŠ€μœ„ν”„νŠΈ 기초

reujusong 2020. 6. 23. 15:44

- 였λ₯˜ 처리

  • μŠ€μœ„ν”„νŠΈμ—μ„œ 였λ₯˜(Error)λŠ” ErrorλΌλŠ” ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” νƒ€μž…μ˜ 값을 톡해 ν‘œν˜„λœλ‹€.
  • Error ν”„λ‘œν† μ½œμ€ 사싀상 μš”κ΅¬μ‚¬ν•­μ΄ μ—†λŠ” 빈 ν”„λ‘œν† μ½œμΌ λΏμ΄μ§€λ§Œ, 였λ₯˜λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ νƒ€μž…(주둜 μ—΄κ±°ν˜•)은 이 ν”„λ‘œν† μ½œμ„ μ±„νƒν•œλ‹€.
  • μŠ€μœ„ν”„νŠΈμ˜ μ—΄κ±°ν˜•μ€ 였λ₯˜μ˜ μ’…λ₯˜λ₯Ό λ‚˜νƒ€λ‚΄κΈ°μ— μ•„μ£Ό μ ν•©ν•œ κΈ°λŠ₯이닀.
  • μ—°κ΄€ 값을 톡해 였λ₯˜μ— κ΄€ν•œ λΆ€κ°€ 정보λ₯Ό μ œκ³΅ν•  μˆ˜λ„ μžˆλ‹€.

이번 μ˜ˆμ œμ—λŠ” ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ 자판기λ₯Ό μž‘λ™μ‹œν‚€λ €κ³  ν•  λ•Œ λ°œμƒν•˜λŠ” 였λ₯˜μƒν™©μ„ κ΅¬ν˜„ν•΄ λ³΄μ•˜λ‹€.

 

 

 - 였λ₯˜ ν‘œν˜„

  • Error ν”„λ‘œν† μ½œκ³Ό (주둜)μ—΄κ±°ν˜•μ„ ν†΅ν•΄μ„œ 였λ₯˜λ₯Ό ν‘œν˜„ν•œλ‹€.
  • 자판기 λ™μž‘ 였λ₯˜μ˜ μ’…λ₯˜λ₯Ό ν‘œν˜„ν•œ VendingMachineError μ—΄κ±°ν˜•



- ν•¨μˆ˜μ—μ„œ λ°œμƒν•œ 였λ₯˜ λ˜μ§€κΈ°

자판기 λ™μž‘ 도쀑 λ°œμƒν•œ 였λ₯˜λ₯Ό λ˜μ§€λŠ” λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄λ³Έλ‹€.

  • 였λ₯˜ λ°œμƒμ˜ 여지가 μžˆλŠ” λ©”μ„œλ“œλŠ” throwsλ₯Ό μ‚¬μš©ν•˜μ—¬ 였λ₯˜λ₯Ό λ‚΄ν¬ν•˜λŠ” ν•¨μˆ˜μž„μ„ ν‘œμ‹œν•œλ‹€.

 

- 였λ₯˜ 처리

  • 였λ₯˜λ₯Ό 던질 μˆ˜λ„ μžˆμ§€λ§Œ 였λ₯˜κ°€ λ˜μ Έμ§€λŠ” 것에 λŒ€λΉ„ν•˜μ—¬ λ˜μ Έμ§„ 였λ₯˜λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μ½”λ“œλ„ μž‘μ„±ν•΄μ•Ό ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ˜μ Έμ§„ 였λ₯˜κ°€ 무엇인지 νŒλ‹¨ν•˜μ—¬ λ‹€μ‹œ 문제λ₯Ό ν•΄κ²°ν•œλ‹€λ“ μ§€, λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μ‹œλ„ν•΄ 본닀든지, μ‚¬μš©μžμ—κ²Œ 였λ₯˜λ₯Ό μ•Œλ¦¬κ³  μ‚¬μš©μžμ—κ²Œ 선택 κΆŒν•œμ„ λ„˜κ²¨μ£Όμ–΄ λ‹€μŒμ— μ–΄λ–€ λ™μž‘μ„ ν•˜κ²Œ ν•  것인지 κ²°μ •ν•˜λ„λ‘ μœ λ„ν•˜λŠ” λ“±μ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.
  • 였λ₯˜λ°œμƒμ˜ 여지가 μžˆλŠ” throws ν•¨μˆ˜(λ©”μ„œλ“œ)λŠ” tryλ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜ΈμΆœν•΄μ•Όν•œλ‹€. try와 do-catch, try?와 try! λ“±μ— λŒ€ν•΄ μ•Œμ•„λ³Έλ‹€.

 

<<do-catch>>

  • 였λ₯˜λ°œμƒμ˜ 여지가 μžˆλŠ” throws ν•¨μˆ˜(λ©”μ„œλ“œ)λŠ” do-catch κ΅¬λ¬Έμ„ ν™œμš©ν•˜μ—¬ 였λ₯˜λ°œμƒμ— λŒ€λΉ„ν•œλ‹€.
  • κ°€μž₯ 정석적인 λ°©λ²•μœΌλ‘œ λͺ¨λ“  였λ₯˜ μΌ€μ΄μŠ€μ— λŒ€μ‘ν•œλ‹€.

  • ν•˜λ‚˜μ˜ catch λΈ”λŸ­μ—μ„œ switch ꡬ문을 μ‚¬μš©ν•˜μ—¬ 였λ₯˜λ₯Ό λΆ„λ₯˜ν•΄λ³Έλ‹€. ꡳ이 μœ„μ˜ 것과 크게 λ‹€λ₯Ό 것이 μ—†λ‹€.

  • λ”±νžˆ μΌ€μ΄μŠ€λ³„λ‘œ 였λ₯˜μ²˜λ¦¬ ν•  ν•„μš”κ°€ μ—†μœΌλ©΄ catch ꡬ문 λ‚΄λΆ€λ₯Ό κ°„λž΅ν™”ν•΄λ„ λ¬΄λ°©ν•˜λ‹€.

  • μΌ€μ΄μŠ€λ³„λ‘œ 였λ₯˜μ²˜λ¦¬ ν•  ν•„μš”κ°€ μ—†μœΌλ©΄ do ꡬ문만 써도 λ¬΄λ°©ν•˜λ‹€.
do {
    result = try machine.vend(numberOfItems: 4)
}

 

 

<<try? μ™€ try!>>

 

1. try?

  • λ³„λ„μ˜ 였λ₯˜μ²˜λ¦¬ κ²°κ³Όλ₯Ό 톡보받지 μ•Šκ³  였λ₯˜κ°€ λ°œμƒν–ˆμœΌλ©΄ 결과값을 nil둜 λŒλ €λ°›μ„ 수 μžˆλ‹€.
  • μ •μƒλ™μž‘ ν›„μ—λŠ” μ˜΅μ…”λ„ νƒ€μž…μœΌλ‘œ 정상 λ°˜ν™˜κ°’μ„ 돌렀 λ°›λŠ”λ‹€.

  • 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šμ„ κ²ƒμ΄λΌλŠ” κ°•λ ₯ν•œ 확신을 κ°€μ§ˆ λ•Œ try!λ₯Ό μ‚¬μš©ν•˜λ©΄ μ •μƒλ™μž‘ 후에 λ°”λ‘œ 결과값을 λŒλ €λ°›λŠ”λ‹€.
  • 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ λŸ°νƒ€μž„ 였λ₯˜κ°€ λ°œμƒν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ™μž‘μ΄ μ€‘μ§€λœλ‹€.


* 더 μ•Œμ•„λ³΄κΈ°: μΆ”κ°€μ μœΌλ‘œ 더 μ•Œμ•„λ³΄λ©΄ 쒋은 κ°œλ…

  • rethrows
  • defer