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

24. assert / guard - iOS ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μŠ€μœ„ν”„νŠΈ 기초

reujusong 2020. 6. 22. 20:46

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ™μž‘ 도쀑에 μƒμ„±ν•˜λŠ” λ‹€μ–‘ν•œ μ—°μ‚° 결과값을 λ™μ μœΌλ‘œ ν™•μΈν•˜κ³  μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν™•μΈν•˜κ³  λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

 

- Assertion

  • assert(_:_:file:line:) ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
  • assert ν•¨μˆ˜λŠ” λ””버깅 λͺ¨λ“œμ—μ„œλ§Œ λ™μž‘ν•œλ‹€.
  • λ°°ν¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” μ œμ™Έλœλ‹€.
  • μ˜ˆμƒν–ˆλ˜ μ‘°κ±΄μ˜ 검증을 μœ„ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.


* assert(_:_:file:line:)와 같은 역할을 ν•˜μ§€λ§Œ μ‹€μ œ 배포 ν™˜κ²½μ—μ„œλ„ λ™μž‘ν•˜λŠ” precondition(_:_:file:line:) ν•¨μˆ˜λ„ μžˆλ‹€.

 

 

 - guard(λΉ λ₯Έμ’…λ£Œ- Early Exit)

  • guardλ₯Ό μ‚¬μš©ν•˜μ—¬ 잘λͺ»λœ κ°’μ˜ 전달 μ‹œ νŠΉμ • 싀행ꡬ문을 λΉ λ₯΄κ²Œ μ’…λ£Œν•œλ‹€.
  • 디버깅 λͺ¨λ“œ 뿐만 μ•„λ‹ˆλΌ μ–΄λ–€ μ‘°κ±΄μ—μ„œλ„ λ™μž‘ν•œλ‹€.
  • guard의 else λΈ”λŸ­ λ‚΄λΆ€μ—λŠ” νŠΉμ • μ½”λ“œλΈ”λŸ­μ„ μ’…λ£Œν•˜λŠ” μ§€μ‹œμ–΄(return, break λ“±)κ°€ κΌ­ μžˆμ–΄μ•Ό ν•œλ‹€.
  • νƒ€μž… μΊμŠ€νŒ…, μ˜΅μ…”널과도 자주 μ‚¬μš©λœλ‹€.
  • κ·Έ 외에도 λ‹¨μˆœ 쑰건 νŒλ‹¨ ν›„ λΉ λ₯΄κ²Œ μ’…λ£Œν•  λ•Œλ„ μš©μ΄ν•˜λ‹€.

 

** if let / gurad λ₯Ό μ΄μš©ν•œ μ˜΅μ…”λ„ 바인딩 비ꡐ **

 

// 1. if let μ˜΅μ…”λ„ 바인딩
if let unwrapped: Int = someValue { 
// do something
   unwrapped = 3
} 
// if ꡬ문 μ™ΈλΆ€μ—μ„œλŠ” unwrapped μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ ν•©λ‹ˆλ‹€.
// unwrapped = 5 

// 2. guard μ˜΅μ…”λ„ 바인딩
// gaurd ꡬ문 이후에도 unwrapped μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.
guard let unwrapped: Int = someValue else {
         return 
}
unwrapped = 3