๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2022. 1. 7. 23:56

2022.01.07 ์˜ค๋Š˜์˜ ๋ฐฐ์›€

์˜ค๋Š˜ ํ•œ ์ผ.

  • ๋ฉด์ ‘ ์ค€๋น„ - iOS
  • ๊ณผ์ œ ์ง„ํ–‰

์˜ค๋Š˜ ์ƒˆ๋กœ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ.

  • ์ƒŒ๋“œ๋ฐ•์Šค ๋””๋ ‰ํ† ๋ฆฌ๋“ค์ด ๊ฐ€์ง€๋Š” ์ฐจ์ด๋“ค ์ค‘์— ๋ˆˆ์—ฌ๊ฒจ ๋ณด์•„์•ผํ•˜๋Š” ๊ฒƒ์€ iCloud ๋ฐฑ์—… ์—ฌ๋ถ€์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ฐฑ์—…์ด ์•ˆ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋””์Šคํฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์—ฌ๊ธฐ ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ง€์šธ ์ˆ˜๋„ ์žˆ๋‹ค(์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์—์„œ ์ด๋ ‡๊ฒŒ ๋งํ•˜๋Š”๋ฐ ์ถœ์ฒ˜๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๊ทธ๋ƒฅ ์•„๋Š”์ฒ™ ์•ˆํ•˜๋Š”๊ฒŒ ๋‚˜์„ ๊ฒƒ ๊ฐ™๋‹ค..)
  • ์ฝ”์–ด๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋“ค์€ application support์— ์ €์žฅ๋˜๊ณ  ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋ฐฑ์—…์ด ๋œ๋‹ค.
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ๋กœ ์ด๋™ํ•˜๋Š” ์•ฑ์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™”๋ฉด์— ๋ณด์˜€๋˜ ๋ทฐ๋ฅผ ์Šค๋ƒ…์ƒท์ฐ์–ด์„œ ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•ด๋‘”๋‹ค. ๋งŒ์•ฝ ์•ฑ์ด suspended๋˜์—ˆ๋‹ค๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๋Œ์•„์˜ค๋ฉด ์‚ฌ์‹ค์ƒ ์•ฑ์ด ๋‹ค์‹œ ์‹œ์ž‘๋˜๋Š”๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ฐ์–ด๋‘์—ˆ๋˜ ์Šค๋ƒ…์ƒท์„ ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ ๋Œ€์‹  ๋ณด์—ฌ์ฃผ๊ณ  ์ด์ „ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๋Š” suspended๋˜์—ˆ๋Š”์ง€ ์ž˜ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • Navigation์ด๋ž‘ Modality์˜ ์ฐจ์ด๋Š” ์ž‘์—…์˜ ์—ฐ์†์„ฑ ์—ฌ๋ถ€์ด๋‹ค. ์‹ค์ œ๋กœ HIG์—์„œ๋Š” ๋ชจ๋‹ฌ์— ์‚ฌ์šฉ์ž๋ฅผ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๋จธ๋ฌผ๊ฒŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ๋งํ•œ๋‹ค. ๊ธฐ์กด ํ™”๋ฉด์—์„œ ์ž‘์—…ํ•˜๋˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์žƒ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • URLSessionDataTask๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„ธ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์–˜๋Š” NSDataํƒ€์ž…์œผ๋กœ ๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„ธ์…˜์„ ์ง€์›ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด URLSessionDownloadTask๊ฐ€ ๋” ์ ํ•ฉํ•˜๋‹ค.
  • NSLayoutConstraint๋Š” ์„ค์ •ํ• ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค. item, attribute, multiplier, contraint๋ฅผ ๊ธฐ์ค€ ๋ทฐ์™€ ์ƒ๋Œ€ ๋ทฐ์— ๋Œ€ํ•ด์„œ ๋‹ค ์ •ํ•ด์ค˜์•ผํ•œ๋‹ค. ์ด๊ฒŒ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ˆ๊นŒ ๋‚˜์˜จ ๋” ์‰ฌ์šด API๊ฐ€ NSLayoutAnchor.
  • UIKit์˜ ResponderChain์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด UIResponder์˜ next ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ๋„˜๊ฒจ์ค„ ๋‹ค์Œ ๋Œ€์ƒ์„ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์€ UIVIew->UIViewController->UIWindow->UIApplication ์ˆœ์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ทฐ๋Š” UIVIew->UIResponder->NSObject์ˆœ์œผ๋กœ ์ƒ์†์„ ํ•˜๊ณ ์žˆ๋‹ค. ๋ฒ„ํŠผ ๊ฐ™์€ ์• ๋“ค์€ UIView๋ฅผ ์ƒ์†ํ•˜๋Š” UIControlํƒ€์ž…์ด๊ณ  ์ด๋Ÿฐ ํƒ€์ž…์˜ ๋ทฐ๋“ค์€ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด addTarget์œผ๋กœ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œ๊ณตํ•œ๋‹ค.
  • AnyClass๋„ ์žˆ๋‹ค. ์–˜๋Š” AnyObject.Type์˜ ํƒ€์ž…์•จ๋ฆฌ์–ด์Šค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ํด๋ž˜์Šค ํƒ€์ž…์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๊ฑด ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ๊นŒ ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž. hugging์€ ์ตœ๋Œ€ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ, resistence๋Š” ์ตœ์†Œํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ์ด๋‹ค. ๊ทผ๋ฐ ์ด๊ฑธ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„๋“ค์ด๋ฉด ์•ˆ๋˜๊ณ  ์ƒ์ƒ์„ ์ข€ ํ•ด์•ผ๋œ๋‹ค. hugging์€ ์ตœ๋Œ€ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํ…์ธ  ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ๋Š˜์–ด๋‚˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง„ ์Šคํƒ๋ทฐ์—์„œ๋Š” hugging์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ๋ทฐ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. resistence๋Š” ์ตœ์†Œ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์˜ ์ปจํ…Œ์ธ  ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ์ž‘์•„์ง€์ง€ ์•Š์œผ๋ ค๊ณ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธธ์ด๊ฐ€ ๋ทฐ๋“ค์˜ intrinsic sizeํ•ฉ๋ณด๋‹ค ์ž‘์€ ์Šคํƒ๋ทฐ์—์„œ๋Š” resistence ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์• ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜๊ณ , ๋‹ค๋ฅธ ๋ทฐ๊ฐ€ ์ปจํ…์ธ ๋ฅผ ์ž๋ฅด๊ณ  ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.
  • NSCache์˜ ์ •์ฑ…์€ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜์™€ cost๋กœ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ์ˆ˜๋Š” ์ •๋ง ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜์— ๋Œ€ํ•œ ์ œํ•œ์ด๊ณ , cost๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ง€์ •ํ•˜๋Š” cost์ด๋‹ค ๋ณดํ†ต ์ด cost๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰์œผ๋กœ ์ค˜์„œ NSCache๊ฐ€ ์šฉ๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • NSCache๋Š” ์Šค๋ ˆ๋“œ์„ธ์ดํ”„ํ•œ ํŠน์ง•์ด ์žˆ๋‹ค.
  • Heap์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์†๋„๊ฐ€ ์Šคํƒ๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋Š”๋ฐ, ๋‹จ์ˆœํžˆ ํž™์— ๋„ฃ๊ณ  ์Šคํƒ์— ์ฃผ์†Œ๋ฅผ ๋„ฃ๋Š” ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์ด ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํž™์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์„ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด ์›์ž์ ์œผ๋กœ ์ง„ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์Šค๋ ˆ๋“œ๊ฐ€ ํž™์— ์ ‘๊ทผํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ๋•Œ ํž™์— ๋ฝ์„ ์“ฐ๋Š” ๋“ฑ ๋™๊ธฐํ™”๊ธฐ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ณ  ์—ฌ๊ธฐ์„œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ.

์˜ค๋Š˜ ๋Š๋‚€ ๊ฒƒ.

  • ๋‹ค์Œ์ฃผ๋Š” ๋ฉด์ ‘๋„ ๋‘๊ฐœ๋‚˜ ๋ณด๊ณ  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋„ ๋ด์•ผํ•œ๋‹ค. ๋นจ๋ฆฌ ๋‹ค ๋๋‚ฌ์œผ๋ฉด! ์‚ด์ง ๋ฒˆ์•„์›ƒ์ด ์˜ฌ๋ž‘๋ง๋ž‘ํ•œ ๊ฒƒ ๊ฐ™๋‹ค ๐Ÿ”ฅ
  • ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๋ฌธ๋“๋ฌธ๋“ ๋ฉด์ ‘์ด ์ƒ๊ฐ๋‚œ๋‹ค. ๊ทธ๋•Œ ์™œ ๊ทธ๋ ‡๊ฒŒ ๋งํ–ˆ์„๊นŒ.. ๋‹ค์‹œ ๋ฌผ์–ด๋ณด๋ฉด ์ง„์งœ ์ž˜ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ.. ์ด๋Ÿฐ ์žก์ƒ๊ฐ๋“ค. ๋ฏธ๋ จ ์—†๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ ๋ฏธ๋ จ์ด ์ข€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์–ผ๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์„œ ๋–จ์–ด์ง€๋“  ๋ถ™๋“  ํ›Œํ›Œ ํ„ธ์–ด๋ฒ„๋ฆฌ๊ณ  ์‹ถ๋‹ค! ์ง„์งœ ์ž˜๋ณธ๊ฑด์ง€ ๋ชป๋ณธ๊ฑด์ง€ ๊ฐ€๋Š ์ด ์•ˆ๋  ์ •๋„๋กœ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋” ๋งˆ์Œ์— ๊ธด์žฅ๊ฐ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค..
  • ๋ฉ”์ดํŠธ๋Ÿฌ๋„ˆ ์บ์‹ฑ ์ฝ”๋“œ๋ฅผ ์˜ค๋Š˜ ์ „์ฒด์ ์œผ๋กœ ๋‹ค์‹œ ๋ดค๋Š”๋ฐ ์ง„์งœ ์™œ ์ €๋ ‡๊ฒŒ ์งฐ๋Š”์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋ ์ •๋„๋กœ ์ด์ƒํ•˜๊ฒŒ ์งฐ๋‹ค. ๋ง‰ํŒ์— ๊ธ‰ํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ๊ณ ๋ฏผ๋„ ๋งŽ์ด ๋‹ด๊ฒจ์žˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๊ณ  ๊ทธ๋ž˜์„œ ๋ฉด์ ‘์—์„œ ์ง€์ ๋ฐ›์€ ๊ฒƒ๋„ ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ฒˆ์ฃผ์— ์ˆ˜์ •์„ ์ข€ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
  • ์ด๋ฒˆ์ฃผ๋Š” ์Šคํ„ฐ๋”” ๋™๋ฃŒ๋“ค์ด ๋ชจ๋‘ ํ•˜๋ฃจ์— ํ•œ ๋ช…์”ฉ ๋ฉด์ ‘์ด ์žˆ์–ด์„œ ๋ฉด์ ‘ ๋๋‚˜์„œ ์„œ๋กœ ๋งŒ๋‚˜์„œ ๋ณต๊ธฐ๋„ ํ•˜๊ณ  ๋…๋ ค๋„ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๋งŽ์ด ๋ณด๋ƒˆ๋‹ค. ๋ถ€์บ ์—์„œ ์ข‹์€ ์‚ฌ๋žŒ๋“ค์„ ์–ป์€ ๊ฒƒ ๊ฐ™๋‹ค.. ํ˜ผ์žํ–ˆ์œผ๋ฉด ์ง„์ž‘ ์ง€์ณ์„œ ๋‚˜๊ฐ€๋–จ์–ด์กŒ์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด์ผ์˜ ๊ณ„ํš.

  • Rx์ •๋ฆฌ
  • ๊ณผ์ œ ์ง„ํ–‰

์˜ค๋Š˜์˜ ๊ฐ์‚ฌ.

  • ์ •์‹ ์—†๊ณ  ์ง„๋น ์กŒ๋˜ ์ผ์ฃผ์ผ์„ ์ž˜ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!