🌱 SeSAC

[SeSAC] 220805 TIL

taeeekki 2022. 8. 10. 18:47

ν΄λ‘œμ €

  • ν•¨μˆ˜μ˜ ν˜•νƒœμ™€ ν•¨μˆ˜μ˜ 호좜 ꡬ쑰λ₯Ό 잘 μ΄ν•΄ν•œλ‹€λ©΄ μ‰½κ²Œ 받아듀일 수 μžˆμ„ 것 κ°™λ‹€.
// λ‹€μŒλ„ 잘 ꡬ뢄할 수 있으면 ν΄λ‘œμ €μ˜ 이해λ₯Ό λ„μšΈ 수 μžˆλ‹€.
func example() {}

example       // ν•¨μˆ˜ 자체
example()     // ν•¨μˆ˜ 호좜

 


 

ν΄λ‘œμ € κΈ°λ³Έ ꡬ쑰

ν΄λ‘œμ € 헀더와 ν΄λ‘œμ € λ°”λ”” 뢀뢄을 잘 μ΄ν•΄ν•˜μž.

{ (맀개 λ³€μˆ˜) -> 리턴 νƒ€μž… in	// ν΄λ‘œμ € 헀더
  μ‹€ν–‰ ꡬ문			// ν΄λ‘œμ € λ°”λ””
}

 

인라인 ν΄λ‘œμ € (inline closure)

// μ½”λ“œλ₯Ό μƒλž΅ν•˜μ§€ μ•Šκ³  ν΄λ‘œμ € ꡬ문 씀, ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜ 내에 ν΄λ‘œμ €κ°€ κ·ΈλŒ€λ‘œ λ“€μ–΄κ°„ ν˜•νƒœ
// => 인라인 ν΄λ‘œμ €
getStudyWithMe(study: { () -> () in
    print("주말에도 κ³΅λΆ€ν•˜κΈ°")
})

 

트레일링 ν΄λ‘œμ € (trailing closure)

// ν•¨μˆ˜ 뒀에 ν΄λ‘œμ €κ°€ μ‹€ν–‰
// => 트레일링 ν΄λ‘œμ €(= ν›„ν–‰ ν΄λ‘œμ €)
getStudyWithMe() { () -> () in
    print("주말에도 κ³΅λΆ€ν•˜κΈ°")
}

 

λ§€κ°œλ³€μˆ˜(+ λ°˜ν™˜κ°’)κ°€ μžˆλŠ” ν΄λ‘œμ €

let result = { (number: Int) -> String in
    return "ν–‰μš΄μ˜ μˆ«μžλŠ” \(number)μž…λ‹ˆλ‹€."
}

 

ν΄λ‘œμ € ν‘œν˜„μ‹ λ³€ν™˜ κ³Όμ •

randomNumber(result: { (number: Int) -> String in
    return "ν–‰μš΄μ˜ μˆ«μžλŠ” \(number)μž…λ‹ˆλ‹€."
})

randomNumber(result: { (number) in
    return "ν–‰μš΄μ˜ μˆ«μžλŠ” \(number)μž…λ‹ˆλ‹€."
})

randomNumber(result: { (number) in
    "ν–‰μš΄μ˜ μˆ«μžλŠ” \(number)μž…λ‹ˆλ‹€."
})

randomNumber(result: {
    "ν–‰μš΄μ˜ μˆ«μžλŠ” \($0)μž…λ‹ˆλ‹€."
})

randomNumber {
    "ν–‰μš΄μ˜ μˆ«μžλŠ” \($0)μž…λ‹ˆλ‹€."
}

 


 

Non-escaping, Escaping ν΄λ‘œμ €

 

Non-Escaping ν΄λ‘œμ €

  • ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλ˜κΈ° 전에 μ‹€ν–‰λ˜λŠ” ν΄λ‘œμ €

Escaping ν΄λ‘œμ €

  • ν΄λ‘œμ €κ°€ ν•¨μˆ˜μ˜ 인자둜 전달됐을 λ•Œ, ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλœ ν›„ μ‹€ν–‰λ˜λŠ” ν΄λ‘œμ €
  • μ„œλ²„ 톡신이 λλ‚œ 후에 외뢀에 값을 μ „λ‹¬ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜κ³ λŠ” 함 (이 μ˜ˆμ— ν•œμ •λ˜μ§€ 말고, 원리λ₯Ό μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”)

 


 

κ³ μ°¨ν•¨μˆ˜

  • map, filter, closure
  • 일반 λ°˜λ³΅λ¬Έλ³΄λ‹€ 속도가 빠름
  • CFAbsoluteTimeGetCurrent() λ©”μ„œλ“œλ‘œ μ‹œκ°„ 차이λ₯Ό μΈ‘μ •ν•΄λ³΄μž.
  • μ§„μ§œ κ³ μ°¨ν•¨μˆ˜λ₯Ό 잘 μ“°λŠ” 것이 μ€‘μš”ν•˜λ‹€λŠ” 것을 많이 느끼고 μžˆλ‹€.

 


 

μ™ΈλΆ€ν•¨μˆ˜, λ‚΄λΆ€ν•¨μˆ˜

  • μ™ΈλΆ€ν•¨μˆ˜μ™€ λ‚΄λΆ€ν•¨μˆ˜μ˜ 생λͺ…μ£ΌκΈ°μ˜ 관찰도 μ€‘μš”ν•œ 뢀뢄인 것 κ°™λ‹€.
  • 일반적으둜 ν•¨μˆ˜κ°€ μ’…λ£Œλ˜λ©΄ λ©”λͺ¨λ¦¬μ—μ„œ λ‚΄λ €κ°€κ²Œ λœλ‹€.
  • κ·Έλ ‡λ‹€λ©΄ μ™ΈλΆ€ν•¨μˆ˜κ°€ μ’…λ£Œλ˜μ—ˆμ„ λ•Œ κ·Έ 내뢀에 μ‘΄μž¬ν•˜λ˜ λ‚΄λΆ€ν•¨μˆ˜ λ˜ν•œ λ©”λͺ¨λ¦¬μ—μ„œ λ‚΄λ €κ°€μ•Ό ν•˜λŠ” 것이 μ•„λ‹κΉŒ?
  • 그런데 λ‚΄λΆ€ν•¨μˆ˜μ˜ 생λͺ…μ£ΌκΈ°λŠ” μ™ΈλΆ€λ‘œλΆ€ν„° μ°¨λ‹¨λ˜μ–΄ μžˆλ‹€. 이λ₯Ό 은닉성이라고 ν‘œν˜„ν•œλ‹€.
  • λ‚΄λΆ€ν•¨μˆ˜λ₯Ό μ™ΈλΆ€ν•¨μˆ˜μ—μ„œ λ°˜ν™˜ν•΄μ„œ μ–΄λ– ν•œ λ³€μˆ˜λ‚˜ μƒμˆ˜μ— λ‹΄μ•„μ„œ μ‚¬μš©ν•˜κ²Œ 되면 μ™ΈλΆ€μ—μ„œλ„ μ ‘κ·Όν•  수 있게 λœλ‹€.
  • μ΄λ ‡κ²Œ 되면 μ™ΈλΆ€ν•¨μˆ˜κ°€ μ’…λ£Œλ˜μ—ˆλ‹€κ³  ν•˜λ”λΌλ„ λ‚΄λΆ€ν•¨μˆ˜λŠ” κ³³κ³³μ—μ„œ μ‚¬μš©ν•  수 있게 λœλ‹€.
  • λ– λŒμ΄κ°€ λ˜λŠ” 것이닀.
  • ν΄λ‘œμ €λ₯Ό μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆμ„ λ•Œ, μ£Όλ³€ ν™˜κ²½μ— ν¬ν•¨λœ λ³€μˆ˜λ‚˜ μƒμˆ˜κ°€ λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆμ„ 수 μžˆλŠ” 것인데 이λ₯Ό 값이 μΊ‘μ²˜λ˜μ—ˆλ‹€κ³  ν‘œν˜„ν•œλ‹€.
  • κ°’μ˜ μΊ‘μ²˜μ— λŒ€ν•΄μ„œλŠ” λ‹€μ‹œ ν•œ 번 μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž.

 


 

ν•„μš”μ— μ˜ν•΄ μ—­ν• κ³Ό 관심사λ₯Ό λΆ„λ¦¬ν•˜λ‹€λ³΄λ©΄ μžμ—°μŠ€λŸ½κ²Œ μ•„ν‚€ν…μ²˜μ™€ νŒ¨ν„΄μ„ μ°Ύμ•„λ³΄κ²Œ 되고, 그런 μ½”λ“œ μž‘μ„± 방식에 κ°€κΉŒμ›Œμ§„λ‹€.

이후에 κ³΅λΆ€λŠ” ν•΄μ•Όκ² μ§€λ§Œ λ„ˆλ¬΄ 얽맀이지 말자.

 


 

λ„€νŠΈμ›Œν¬ μ½”λ“œμ— κ΄€ν•΄

  • Controller에 μž‘μ„±ν•˜λŠ” μ½”λ“œ 라인 μˆ˜κ°€ μ¦κ°€ν•˜λ©΄μ„œ μ—­ν• κ³Ό μ½”λ“œμ˜ 뢄리에 λŒ€ν•΄μ„œ 생각을 ν•˜κ²Œ λœλ‹€.
  • 보톡 λ„€νŠΈμ›Œν¬ μ½”λ“œλŠ” λ”°λ‘œ λΆ„λ¦¬ν•΄μ„œ μž‘μ„±ν•˜λŠ” 편이며, Manager, Service λ“±λ“±μ˜ λ‹€μ–‘ν•œ 단어λ₯Ό λΆ™μ—¬μ„œ 클래슀λ₯Ό κ΅¬μ„±ν•œλ‹€.
  • 톡신 λ°›μ•„μ˜¨ 값을 Controllerμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ escaping closureλ₯Ό μ‚¬μš©ν•œλ‹€.
  • indicator λ˜λŠ” progress barλ₯Ό μ‚¬μš©ν•˜μ—¬ uxλ₯Ό κ³ λ €ν•  ν•„μš”κ°€ μžˆλ‹€.