Skip to content

๐Ÿ’™ [25๋…„ 2์›”]

mint3382 edited this page Apr 1, 2025 · 5 revisions

โญ๏ธ Meet AsyncSequence โ€ 20250207

์ฃผ์š” ์ฃผ์ œ

  • AsyncStream์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•๊ณผ ํŠน์ง•
  • RxSwift์™€ Swift Testing์˜ ์ฐจ์ด์ ๊ณผ ํ™œ์šฉ ๋ฐฉ์•ˆ
  • Async Sequence๋ฅผ ํ™œ์šฉํ•œ Combine ๋Œ€์ฒด ๋ฐฉ์•ˆ

์›ํ•˜๋Š” ์ถ”๊ฐ€ ํ•™์Šต

  • for ๋ฌธ์—์„œ finish ์‹คํ–‰ ๋ฐฉ๋ฒ• ํ™•์ธ
  • RxSwift์—์„œ ๋กœ์ง ์ž‘์„ฑ ๋ฐฉ๋ฒ• ๊ฒ€ํ† 

AsyncStream

  • AsyncStream์€ Async Sequence๋ฅผ ์ค€์ˆ˜ํ•ด์„œ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž„
  • AsyncStream์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ ํด๋กœ์ €์—์„œ ์ผ๋“œ ๋ฐœ์ƒํ•˜๋Š” ์ฒ˜๋ฆฌ๋ž‘ ์ข…๋ฃŒํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ™์ด ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Œ

RxSwift

  • RxSwift๋กœ ๋กœ์ง ์งœ๊ณ  Swift Testing์œผ๋กœ ํ•ด์•ผ์ง€ ํ•˜๊ณ  ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ expectation, wait์ด ์—†์–ด์„œ ์ฐพ์•„๋ณด๋‹ˆ๊นŒ Sync์˜ Context๋ฅผ ์ง€์›ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ฒ˜์Œ ์จ๋ดค์Œ
  • 21๋…„๋„์— ๋‚˜์˜จ ๊ฑด๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์“ฐ๋Š” ์‚ฌ๋žŒ์„ ๋ชป ๋ณธ ๊ฒƒ ๊ฐ™์Œ
  • Sequence๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ƒํ™ฉ์„ ๋ชป ๋ดค๋˜ ๊ฒƒ ๊ฐ™๊ธด ํ•จ

Combine ๋Œ€์ฒดํ’ˆ

  • Combine ์ค‘์— ๊ณ„์†ํ•ด์„œ publisher๊ฐ€ ์œ ์ง€๋ผ์•ผ ๋˜๋Š” ์ƒํ™ฉ์ด ์•„๋‹ˆ๋ฉด ๋Œ€์ฒด๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ

Async Sequence์˜ ์ข…๋ฃŒ ์‹œ์ 

  • Async Sequence๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด ์ข…๋ฃŒ ์‹œ์ ์€ ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋ฌผ์Œ
  • for๋ฌธ์„ ์„ค์ •์„ ์‹คํ–‰์„ ํ•˜๋ฉด publish๊ฐ€ ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ด์•ผ ํ•จ
  • for๋ฌธ ์•ˆ์—์„œ finish๋ฅผ ์‹คํ–‰์„ ๋”ฐ๋กœ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด Rx ์ฝ”๋“œ์— ์žˆ์—ˆ๋Š”์ง€

finish ํ˜ธ์ถœ

  • finish๊ฐ€ ํ˜ธ์ถœ์ด ์•ˆ ๋˜๋ฉด์€ ์—ฌ๊ธฐ์„œ ๊ณ„์† ๋ฉˆ์ถฐ ์žˆ์Œ
  • ๊ธฐ๋‹ค๋ฆฌ๋ฉด์„œ ๋‹ค์Œ ๊ฐ’์„ await ํ•˜๋ฉด์„œ ๊ณ„์† ๋ฉˆ์ถฐ ์žˆ์Œ

break๊ฐ€ ์—†์„ ๊ฒฝ์šฐ

  • break๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ•˜๋ฉด ์ข…๋ฃŒ ์‹œ์ ์— ๋“ค์–ด๊ฐ€๊ธด ํ• ๊นŒ๋ผ๊ณ  ์ƒ๊ฐํ•จ
  • ์‹ค์ œ๋กœ ์—๋Ÿฌ๋‚˜ completion์„ ๋ฐฉ์ถœํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ข…๋ฃŒ๊ฐ€ ์•ˆ ๋จ
  • ํ…Œ์ŠคํŠธํ•  ๋•Œ break๋กœ ๋ฐ›์•˜์œผ๋ฉด ๋์–ด ํ•˜๊ณ  ํƒˆํ‡ดํ•จ

โญ๏ธ Mysteries of AutoLayout โ€ 20250214

UIStackView ์„ฑ๋Šฅ ๋ณ€ํ™”

  • iOS 9๋ถ€ํ„ฐ UIStackView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ์ด๋•Œ UIStackView๋Š” CATransformLayer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๋ Œ๋”๋ง ๊ณผ์ •์ด ์—†์—ˆ๊ธฐ์— ๊ธฐ์กด์˜ UIView๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋นจ๋ž๋‹ค.
  • ๋•Œ๋ฌธ์— UIStackView์—๋Š” ๋ฐฐ๊ฒฝ์ƒ‰, ๊ทธ๋ฆผ์ž ๋“ฑ์„ ์ค„ ์ˆ˜ ์—†์—ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ iOS 14 ์ดํ›„๋ถ€ํ„ฐ๋Š” CATransformLayer๋ฅผ CALayer๋กœ ๋ฐ”๊พธ๋ฉด์„œ ๋ฐฐ๊ฒฝ์ƒ‰, ๊ทธ๋ฆผ์ž ๋“ฑ์„ ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์ž์ฒด ๋ Œ๋”๋ง ๊ณผ์ •์ด ์ƒ๊ฒผ๋‹ค.
  • ์ด๋กœ ์ธํ•ด ๊ทธ ์ „ CATransformLayer๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค๋Š” ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, ๋””๋ฐ”์ด์Šค์˜ ๋ฐœ์ „์œผ๋กœ ์ธํ•ด ๊ทธ ์ •๋„๋Š” ์ˆ˜์šฉ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„์ด์ง€ ์•Š์•˜์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์„ ํ•œ๋‹ค.
  • ๊ด€๋ จ ๋งํฌ

Content Hugging vs Compression Resistance

  • ๋‘˜์€ ๋ชฉ์  ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— Content Hugging ๋Œ€์‹  Compression์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  • Content Hugging์€ ๋ทฐ๊ฐ€ intrinsic content size๋ณด๋‹ค ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ปค์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • Compression Resistance๋Š” ๋ทฐ๊ฐ€ ์ž์‹ ์˜ intrinsic content size๋ณด๋‹ค ์ž‘์•„์ง€์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Constraint add/remove -> active/inactive

  • ํ† ๊ธ€๋กœ ๋ทฐ์˜ ํฌ๊ธฐ ์ƒํƒœ์— ๋”ฐ๋ผ ์œ ๋™์ ์ธ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โญ๏ธ Demystify parallelization in Xcode builds โ€ 20250228