Skip to content

Latest commit

ย 

History

History
386 lines (221 loc) ยท 26 KB

File metadata and controls

386 lines (221 loc) ยท 26 KB

1. Bounds ์™€ Frame์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

  • Frame์˜ ์ž์‹ ์˜ ์ƒ์œ„ ๋ทฐ์˜ ์ขŒํ‘œ๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , Bounds๋Š” ์ž๊ธฐ์ž์‹ ์˜ ์ขŒํ‘œ๊ณ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜๋ฅผ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • Frame์˜ ์‚ฌ์ด์ฆˆ๋Š” ๋ทฐ์˜ x ์ขŒํ‘œ ์ตœ์†Œ, ์ตœ๋Œ€๊ฐ’, y ์ขŒํ‘œ์œผ๋กœ ์ตœ์†Œ, ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์˜ Bounds๋Š” ๋ทฐ ์ž์ฒด์˜ ํฌ๊ธฐ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Frame์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ทฐ๊ฐ€ ์ด๋™ํ•˜์ง€๋งŒ, Bounds๋Š” ๋ทฐํฌํŠธ๊ฐ€ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 50pt ๋งŒํผ x์ขŒํ‘œ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ์‹ค์ œ๋กœ๋Š” 50pt ๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

2. Bounds๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ๊ฐ€ ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ์š”?

  • ์Šคํฌ๋กค ๋ทฐ๋Š” ์Šคํฌ๋กค ๋  ๋•Œ๋งˆ๋‹ค ์Šคํฌ๋กค ๋ทฐ์˜ Bounds๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์™ผ์ชฝ์œผ๋กœ ์Šค์™€์ดํ”„ํ•ด์„œ ์Šคํฌ๋กคํ•˜๋ฉด bounds์˜ x์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

3. ์‹ค์ œ ๋””๋ฐ”์ด์Šค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์—†๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์„ธ ์†๊ฐ€๋ฝ ์ด์ƒ์˜ ํ„ฐ์น˜ ์ œ์Šค์ณ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋Š” ์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ, ์ „ํ™”, ์„ผ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์•ฑ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ „ํ™˜, ํ„ฐ์น˜ ๋“ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹คํฌ๋ชจ๋“œ, ๊ฐœ๋ฐœ์ž์šฉ ๋„คํŠธ์›Œํฌ ์„ค์ •๋„ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์•ฑ ํ™”๋ฉด์˜ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋กœ์ง๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฌด์—‡์ด๋ผ๊ณ  ํ•˜๋Š”๊ฐ€?

  • UIViewController์ž…๋‹ˆ๋‹ค. ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” UIKit์œผ๋กœ ๊ตฌ์„ฑ๋œ ์•ฑ์˜ ๋ทฐ ๊ณ„์ธต๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋กœ์ง์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

5. App thinning์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

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

6. ์•ฑ์ด ์‹œ์ž‘ํ•  ๋•Œ main.c ์— ์žˆ๋Š” UIApplicationMain ํ•จ์ˆ˜์— ์˜ํ•ด์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ๋ฌด์—‡์ธ๊ฐ€?

  • UIApplicationMain์ด ์‹คํ–‰๋˜๋ฉด UIApplication ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ AppDelegate์™€ SceneDelegate ๊ฐ์ฒด๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์•ฑ์˜ ๋ฃจํŠธ๊ฐ€๋˜๋Š” window ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ตœ์ดˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

7. UIApplication ๊ฐ์ฒด๋Š” ์–ด๋–ค ์ผ์„ ํ•˜๋‚˜์š”?

  • UIApplication์€ UIApplicationMain์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. UIApplication์€ ์ตœ์ดˆ์— ๋Ÿฐ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค๊ณ  AppDelegate์—๊ฒŒ delegate๋ฅผ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ UIKit์— ์˜ํ•ด UIEvent๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉด UIApplication.shared.sendEvent()๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ด๋ฒคํŠธ ํ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

8. UIApplicationDelegate๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฉ”์„œ๋“œ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‚˜์š”?

  • ์•ฑ์„ ์‹œ์ž‘ํ•˜๊ณ  ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋ณ€ํ™”๋  ๋•Œ๋งˆ๋‹ค ์ƒํ™ฉ์— ์ƒ์‘ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋‹ค์šด๋กœ๋“œ ์ž‘์—…์ด ์ง„ํ–‰๋˜์–ด์•ผํ•  ๋•Œ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•ฑ์˜ Scene์ด ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ง€์›Œ์งˆ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • APN ๋“ฑ๋ก์ฒ˜๋Ÿผ ์•ฑ์˜ ์‹คํ–‰์ด ์‹œ์ž‘๋˜๋ฉด์„œ ๋“ฑ๋กํ•ด์•ผํ•˜๋Š” ์„œ๋น„์Šค ์ž‘์—…๋“ค์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

9. ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ UIApplicationDelegate ๋ฉ”์„œ๋“œ๋ฅผ ๋งํ•ด๋ณด์„ธ์š”.

  • applicationDidBecomeActive: ์•ฑ์ด active ์ƒํƒœ๊ฐ€ ๋˜๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • applicationWillResignActive: ์•ฑ์ด inactive ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • applicationDidEnterBackground: ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • applicationWillEnterForeground: ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํ™”๋ฉด์œผ๋กœ ๋“ค์–ด์˜ค๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • applicationWillTerminate: ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

10. ์•ฑ์ด In-Active ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ์‹œ๋ฆฌ๊ฐ€ ์ผœ์ง€๊ฑฐ๋‚˜ ์ „ํ™”์•Œ๋ฆผ, ์•Œ๋ŸฌํŠธ๊ฐ€ ๋œจ๋Š” ์ƒํ™ฉ ๋“ฑ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—์„œ inactive์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

11. scene delegate์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • iOS 13๋ถ€ํ„ฐ iOS๋Š” Multiple Window๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ™”๋ฉด์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ์š”, ์ด ๋•Œ๋ฌธ์— UI ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์•ฑ ์ „์ฒด์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ์ฐฝ์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด์กŒ์Šต๋‹ˆ๋‹ค. SceneDelegate๋Š” ์ด๋ฅผ ์œ„ํ•ด ๊ฐ ํ™”๋ฉด๋งˆ๋‹ค ๋งŒ๋“ค์–ด์ ธ์„œ AppDelegate๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ UI์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

12. App์˜ Not running, Inactive, Active, Background, Suspended์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • Not running์€ ์•ฑ์ด ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ, Inactive๋Š” ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ, Background๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ, Suspended๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์ค‘์ด์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

13. iOS ์•ฑ์„ ๋งŒ๋“ค๊ณ , User Interface๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€?

  • UIKit์ž…๋‹ˆ๋‹ค.

14. Foundation Kit์€ ๋ฌด์—‡์ด๊ณ  ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ์Šค์œ„ํ”„ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” String, Double๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธํƒ€์ž…๋“ค๊ณผ Array, Dictionary๊ฐ™์€ ์ฝœ๋ ‰์…˜ํƒ€์ž…์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ณ  ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

15. Delegate๋ž€ ๋ฌด์–ธ์ธ์ง€ ์„ค๋ช…ํ•˜๊ณ , retain ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€ ๊ทธ ์ด์œ ๋ฅผ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • Delegate๋Š” ์ž์‹ ์˜ ์—ญํ• ์„ ๋‹ค๋ฅธ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์œ„์ž„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœํ† ์ฝœ๋กœ ์œ„์ž„ํ•  ๋™์ž‘๋“ค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ ์šฉํ•œ ๋’ค, ์ด ํ”„๋กœํ† ์ฝœ์„ ์œ„์ž„์„ ๋ฐ›์„ ํƒ€์ž…์— ์ฑ„ํƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„์ž„์„ ํ•ด์ค„ ํƒ€์ž…์— weak var delegate๋ฅผ ๋งŒ๋“ค์–ด๋‘๊ณ  ํŠน์ •ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ delegate์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์ด๋ฅผ ์œ„์ž„๋ฐ›์•„ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ํƒ€์ž…์€ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋Œ€์‹  ์š”์ฒญํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Delegate ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ weak var๋กœ ์„ ์–ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— retain์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

16. NotificationCenter ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ™œ์šฉ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • notificationCenter๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋กœ Notification์„ ๋ณด๋‚ผ ๊ฐ์ฒด๋“ค์„ addObserver๋กœ ์ด๊ณณ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. Notification์„ ๋ณด๋‚ผ ๋•Œ๋Š” post ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด post์™€ ํ•จ๊ป˜ ์ฃผ์–ด์ง„ ์ •๋ณด๋ฅผ NotificationCenter์— ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋“ค์—๊ฒŒ ๋ชจ๋‘ ๋ณด๋‚ด๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด์ง€๋งŒ ์ค‘๊ฐ„ ๋ธŒ๋กœ์ปค ์—ญํ• ์„ ํ•˜๋Š” NotificationCenter๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—๊ฒŒ ์–ด๋–ค ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ณ ์žํ•  ๋•Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์˜ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

17. UIKit ํด๋ž˜์Šค๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€?

  • UI์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ž‘์—…์€ ์•ฑ์˜ Main ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

18. App Bundle์˜ ๊ตฌ์กฐ์™€ ์—ญํ• ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • App Bundle์€ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ํŒŒ์ผ, ์ฝ”๋“œ, ๋ฆฌ์†Œ์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ์ƒŒ๋“œ๋ฐ•์Šค ์•ˆ์—๋Š” Documents, Library, Tmp ๋“ฑ์ด ์žˆ๊ณ , ์ด์ค‘์—์„œ Library ์•ˆ์—๋Š” Application Support, Caches, Preferences ๋“ฑ์˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

19. ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • Documents๋Š” ์œ ์ €๊ฐ€ ์ƒ์„ฑํ•œ ๋ฌธ์„œ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ณ  ์„ค์ •์— ๋”ฐ๋ผ์„œ ์‚ญ์ œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. iCloud์— ๋ฐฑ์—…์ด ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • Library๋Š” ์œ ์ €์˜ ํŒŒ์ผ์ด๋‚˜ ์ž„์‹œํŒŒ์ผ์„ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด์ค‘ Application Support๋Š” ์•ฑ์˜ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋˜๊ณ  ์ฝ”์–ด๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ์ €์žฅ ๊ฒฝ๋กœ๊ฐ€ ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. iCloud์— ๋ฐฑ์—…์ด ๋ฉ๋‹ˆ๋‹ค.
  • Library์˜ Caches ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ž„์‹œ์ ์œผ๋กœ ๋ณด๊ด€ํ•  ํŒŒ์ผ๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. iCloud์—๋Š” ๋ฐฑ์—…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Caches ๋‚ด๋ถ€์—๋Š” Snapshot ๋””๋ ‰ํ† ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ ์‹œ์Šคํ…œ์€ ๋งˆ์ง€๋ง‰ ๋ทฐ์— ๋Œ€ํ•œ ์Šค๋ƒ…์ƒท์„ ์ฐ์–ด ์ด๊ณณ์— ์ €์žฅํ•ด๋‘๊ณ  Suspended์˜€๋˜ ์•ฑ์ด ์žฌ์‹คํ–‰๋˜๋ฉด ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ์ด ์•„๋‹Œ ์Šค๋ƒ…์ƒท์„ ๋ณด์—ฌ์ฃผ์–ด์„œ ์žฌ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒํ•ฉ๋‹ˆ๋‹ค.
  • Preferences ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์•ฑ์˜ ์„ค์ • ์ •๋ณด๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

20. ๋ชจ๋“  View Controller ๊ฐ์ฒด์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์ด๊ณ  ๊ทธ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€?

  • UIViewController์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  UIViewController์˜ ์ƒ์œ„ํด๋ž˜์Šค๋Š” UIResponder์ž…๋‹ˆ๋‹ค.
  • UIViewController์˜ ์—ญํ• ์€ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ทฐ์—์„œ ์ „๋‹ฌ๋˜๋Š” ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

21. ์ž์‹ ๋งŒ์˜ Custom View๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • Xib๋ฅผ ๋งŒ๋“ค์–ด ๋ทฐ๋ฅผ ์žก๊ณ  ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ UIView๋ฅผ ์ƒ์†ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ํด๋ž˜์Šค๋กœ ์ •์˜ํ•ด ๋‚ด๋ถ€์—์„œ ๋ ˆ์ด์•„์›ƒ๊นŒ์ง€ ์žก์•„์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

22. View ๊ฐ์ฒด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • UIView๋Š” UIResponder๋ฅผ ์ƒ์†ํ•ด ๊ตฌํ˜„๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๊ณ  drawํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

23. UIView ์—์„œ Layer ๊ฐ์ฒด๋Š” ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • layer์˜ ํƒ€์ž…์€ CALayer์ž…๋‹ˆ๋‹ค. CA๋Š” Core Animation ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์•ฝ์ž์ด๊ณ  UIKit๋ณด๋‹ค ํ•œ๋‹จ๊ณ„ ๋‚ฎ์€ ์ €์ˆ˜์ค€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ ์ข€ ๋” ๋ณต์žกํ•œ ํ™”๋ฉด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” CALayer๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๊ณ , CALayer๋Š” ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ GPU๋ฅผ ์‚ฌ์šฉํ•ด ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

24. UIWindow ๊ฐ์ฒด์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€?

  • UIWindow๋Š” ์ง์ ‘์ ์œผ๋กœ ์‹œ๊ฐ์ ์ธ ๋‚ด์šฉ์„ ๋‚˜ํƒ€๋‚ด์ง€๋Š” ์•Š์ง€๋งŒ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ทฐ๋“ค์˜ ๋ถ€๋ชจ๊ฐ€๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

25. UINavigationController์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • UINavigationController๋Š” ์Šคํƒ์ฒ˜๋Ÿผ ํ™”๋ฉด๋“ค์„ ์Œ“์•„์„œ ํ™”๋ฉด๊ฐ„ ์ด๋™์„ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

26. TableView๋ฅผ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ™”๋ฉด์— Cell์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” DataSource ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ์ธ๋ฑ์Šค๋งˆ๋‹ค ์–ด๋–ค ์…€์„ ์‚ฌ์šฉํ• ์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” cellForRowAt์ด ์žˆ๊ณ , ์„น์…˜๋งˆ๋‹ค ํ‘œ์‹œํ•  ์…€์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” numberOfRowsInSection์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 func tableView(UITableView, cellForRowAt: IndexPath)
 func tableView(UITableView, numberOfRowsInSection: Int)

27. ํ•˜๋‚˜์˜ View Controller ์ฝ”๋“œ์—์„œ ์—ฌ๋Ÿฌ TableView Controller ์—ญํ• ์„ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • IBOulet์„ ๋งŒ๋“ค์–ด๋‘๊ณ  delegate๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” TableView์˜ ์ธ์Šคํ„ด์Šค๋ฅผ IBOutlet๊ณผ ๋น„๊ตํ•˜๊ฑฐ๋‚˜, tag๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

28. setNeedsLayout์™€ setNeedsDisplay์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • setNeedsLayout์€ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” layoutSubviews๋ฅผ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์— ํ˜ธ์ถœํ•˜๋„๋ก ์˜ˆ์•ฝํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. setNeedsDisplay๋Š” ๋ทฐ์˜ ๋‚ด์šฉ์„ ๊ทธ๋ฆฌ๋Š” draw ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์— ํ˜ธ์ถœํ•˜๋„๋ก ์˜ˆ์•ฝํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

29. NSCache์™€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์บ์‹œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์„๋•Œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • NSCache๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์บ์‹œ์ •์ฑ…์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ์ €์žฅํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜๋‚˜ cost๋ฅผ ์ •ํ•ด๋‘๊ณ  ์ดˆ๊ณผ๋˜๋ฉด ์ •์ฑ…์— ๋”ฐ๋ผ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋”ฐ๋กœ ์ •์ฑ…์ด ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ NSCache๋Š” thread safeํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

30. NSCache ์ •์ฑ…์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š”์ง€ ์•„๋Š”์ง€?

  • LRU์™€ LFU์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋ผ๊ณ  ์•Œ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋กœ ๋‚˜์™€์žˆ์ง€ ์•Š์ง€๋งŒ libs ์ฝ”๋“œ๋ฅผ ๋ณด์•˜์„ ๋•Œ ์ž์ฃผ ์ฐธ์กฐ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ง€์šฐ์ง€ ์•Š์€ ์ฑ„๋กœ ๊ฐ€์žฅ ์˜ค๋ž˜์ „ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง€์›Œ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/gnustep/libs-base/blob/master/Source/NSCache.m


31. NSCache์˜ cost๋ž‘ ์˜ค๋ธŒ์ ํŠธ ๊ฐœ์ˆ˜๊ฐ€ ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€?

  • cost๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ๊ฐœ์ˆ˜์ด๊ณ  cost๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. setํ•  ๋•Œ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•œ cost๋ฅผ ํ•จ๊ป˜ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , cost๊ฐ€ ํ•œ๊ณ„๊ฐ’์œผ๋กœ ์ •ํ•ด๋‘” ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉด ์บ์‹œ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

32. URLSession์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • URLSession์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  • SessionTask๋ฅผ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ํ†ต์‹ ์— ๋Œ€ํ•œ ์„ค์ •๊ณผ ์ฝœ๋ฐฑ์„ ์ •์˜ํ•ด์„œ ๋„˜๊ธฐ๋ฉด ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํด๋กœ์ €๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

33. URLSessionConfiguration ์ข…๋ฅ˜

  • default๋Š” ๊ธฐ๋ณธ ์ƒํƒœ, emphemral์€ ์บ์‹œ๋ฅผ ์ง€์šฐ์ง€ ์•Š์„ ๋•Œ, backgound๋Š” ์•ฑ์ด ๋ฐฑ์Šค๋ผ์šด๋“œ์—์„œ ๋‹ค๋ฃฌ๋กœ๋“œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

34. URLDownloadTask์™€ URLSessionDataTask์˜ ์ฐจ์ด

  • dataTask๋Š” NSData ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ์ €์žฅ์†Œ์—๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„ธ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. downloadTask๋กœ ๋‚ด๋ ค๋ฐ›์€ ํŒŒ์ผ์€ temp ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„ธ์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

35. prepareForReuse์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • prepareForReuse๋Š” ํ…Œ์ด๋ธ” ๋ทฐ๋‚˜ ์ปฌ๋ ‰์…˜ ๋ทฐ์—์„œ ์…€์„ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง„ ์…€์€ ๋ฆฌ์œ ์ €๋ธ” ํ์— ์ €์žฅ๋˜๊ณ  cellForItemAt ์—์„œ dequeue๋˜์—ˆ์„ ๋•Œ ๋‹ค์‹œ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. prepareForReuse๋Š” cellForItemAt ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜์–ด์„œ ์…€์˜ ์„ค์ •๋“ค์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

36. ๋‹คํฌ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” Asset์—์„œ ๋‹คํฌ๋ชจ๋“œ์™€ ์ผ๋ฐ˜ ๋ชจ๋“œ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Any, Dark, Light์— ๋Œ€ํ•œ ์ƒ‰์ƒ์„ ๊ฐ๊ฐ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜, userInterfaceStyle ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋””๋ฐ”์ด์Šค๊ฐ€ ๋‹คํฌ๋ชจ๋“œ์ธ์ง€ ๋ผ์ดํŠธ๋ชจ๋“œ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ธํŒ…ํ•ด์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

37. ViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • loadView, viewDidLoad, viewWillAppear, viewWillLayoutSubviews, viewDidLayoutSubviews, viewDidAppear, viewWillDisappear, viewDidDisappear ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • loadView์—์„œ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ธฐ๋ณธ view๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. viewDidLoad๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ์งํ›„์— ํ˜ธ์ถœ๋˜๊ณ , viewWillAppear๋Š” ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. viewWillLayoutSubviews๋Š” ๋ทฐ์˜ ๋ฐ”์šด๋“œ๊ฐ€ ์„ค์ •๋˜๊ณ  ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ ˆ์ด์•„์›ƒ์ด ์„ค์ •๋˜๋ฉด viewDidLayoutSubviews๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๋ฉด viewDidAppear๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์ด ์‚ฌ๋ผ์งˆ ๋•Œ๋Š” ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— viewWillDisappear๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์‚ฌ๋ผ์ง„ ํ›„๋Š” viewDidDisappear๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

38. TableView์™€ CollectionView์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ํ…Œ์ด๋ธ” ๋ทฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํ•˜์Šคํฌ๋กค์˜ ๋ชฉ๋ก๋งŒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ฝœ๋ ‰์…˜ ๋ทฐ๋Š” flow layout์ด๋‚˜ compositional layout์œผ๋กœ ๋ชฉ๋ก์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

39. ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? (3๊ฐ€์ง€)

  • NSLayoutContraint, Anchor, ๋น„์ฃผ์–ผ ํฌ๋งท ์„ธ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • NSLayoutContraint๋Š” item, attribute, multiplier, contraint๋ฅผ ์ง€์ •ํ•ด์„œ ๋‘ ๊ฐ์ฒด๊ฐ„์˜ ๋ ˆ์ด์•„์›ƒ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • NSLayoutAnchor๋Š” NSLayoutContraint๋ฅผ ๋” ๊ฐ„๋‹จํ•œ API๋กœ ๋งŒ๋“  ๊ฒƒ์œผ๋กœ Anchor์™€ contraint๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๊ฐ„์˜ ๋ ˆ์ด์•„์›ƒ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์ฃผ์–ผ ํฌ๋งท์€ ์•„์Šคํ‚ค ๋ฌธ์ž์—ด์„ ํ†ตํ•ด ๋ ˆ์ด์•„์›ƒ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

40. hugging, resistance์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • hugging์€ ์ตœ๋Œ€ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ์ด๊ณ , resistance๋Š” ์ตœ์†Œ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ hugging์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅธ ๋ทฐ๋“ค๋ณด๋‹ค ๋†’์€ ๋ทฐ๋Š” ๋” ์ปค์ง€์ง€ ์•Š์œผ๋ ค๊ณ  ํ•˜๊ณ , resistence์˜ ์šฐ์„œ์ˆœ์œ„๊ฐ€ ๋‹ค๋ฅธ ๋ทฐ๋“ค๋ณด๋‹ค ๋†’์€ ๋ทฐ๋Š” ๋” ์ž‘์•„์ง€์ง€ ์•Š์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง„ ์Šคํƒ ๋ทฐ ์•ˆ์— ๋‘ UILabel์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์™ผ์ชฝ ๋ทฐ์˜ hugging priority๊ฐ€ ๋” ๋†’์€ ๋ทฐ๋Š” ์Šคํƒ๋ทฐ๋ฅผ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ , ์˜ค๋ฅธ์ชฝ ๋ทฐ๊ฐ€ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค ์Šคํƒ๋ทฐ๋ฅผ ์ฑ„์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ resistence priority๊ฐ€ ๋” ๋†’์€ ๋ทฐ๋Š” ๋” ์ž‘์•„์ง€์ง€ ์•Š์œผ๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ๋ทฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋‘ UILabel์˜ ์ปจํ…์ธ ๋ฅผ ๋ชจ๋‘ ํ‘œ์‹œํ•˜์ง€ ๋ชปํ•˜๋Š” ํฌ๊ธฐ๋ผ๋ฉด, resistence priority๊ฐ€ ๋” ๋‚ฎ์€ ๋ทฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

41. Intrinsic Size์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • Intrinsic Conetent Size๋Š” UIButton, UILabel ๋“ฑ์—์„œ ์‚ฌ์šฉ๋˜์–ด์„œ ๋ทฐ ๋‚ด๋ถ€์˜ ์ปจํ…์ธ ์— ๋”ฐ๋ผ ๊ณ„์‚ฐ๋˜๋Š” ๋ทฐ์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ๋ทฐ์—์„œ๋Š” ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ  invalidIntrinsicContentSize๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

42. ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์ด์šฉํ–ˆ์„๋•Œ์˜ ์žฅ๋‹จ์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

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

43. Safearea์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • safearea๋Š” iOS ๋””๋ฐ”์ด์Šค์ค‘ ์ƒ๋‹จ ๋…ธ์น˜ ์˜์—ญ๊ณผ ํ•˜๋‹จ ํ™ˆ ๋ฐ” ์˜์—ญ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ฑ์ด ์ด ์˜์—ญ๋“ค์„ ์นจ๋ฒ”ํ•˜์ง€ ๋ชปํ•˜๋„๋ก safearea๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

44. Left Constraint ์™€ Leading Constraint ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  • ๋ฌธ์ž์— ๋Œ€ํ•œ ์ œ์•ฝ์„ ์„ค์ •ํ•  ๋•Œ Left๋Š” ํ•ญ์ƒ ๋ฌธ์ž์˜ ์‹œ์ž‘์„ ์™ผ์ชฝ์— ๋‘์ง€๋งŒ Leading์€ ์–ธ์–ด์— ๋”ฐ๋ผ์„œ ์šฐ์ธก์—์„œ ์ขŒ์ธก์œผ๋กœ ์ฝ๋Š” ์–ธ์–ด๋Š” ์‹œ์ž‘์„ ์˜ค๋ฅธ์ชฝ์—, ์ขŒ์ธก์—์„œ ์šฐ์ธก์œผ๋กœ ์ฝ๋Š” ์–ธ์–ด๋Š” ์‹œ์ž‘์„ ์™ผ์ชฝ์— ๋‘ก๋‹ˆ๋‹ค.

45. UIControl์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • UIControl์€ UIView๋ฅผ ์ƒ์†๋ฐ›๋Š” ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋ ‰์…˜์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. UIControl์€ ์ƒํƒœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  addTarget์œผ๋กœ UIControl ๊ฐ์ฒด์—์„œ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

45. CollectionViewLayout์„ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์ •์˜ํ•  ๋•Œ prepare ๋ฉ”์„œ๋“œ๊ฐ€ ์–ธ์ œ ๋ถˆ๋ฆฌ๊ณ  ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€

  • ์ฝœ๋ ‰์…˜ ๋ทฐ๊ฐ€ ์ปจํ…์ธ ๋ฅผ ์ฒ˜์Œ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜ ๋ทฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์„œ ๋ ˆ์ด์•„์›ƒ์ด ๋ฌดํšจํ™”๋˜๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. prepare ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ ˆ์ด์•„์›ƒ ๊ฐ์ฒด์—๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์‹œํ‚ค๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์ด ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์ฝœ๋ ‰์…˜ ๋ทฐ๊ฐ€ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ •์˜ํ•œ ๋ ˆ์ด์•„์›ƒ ๊ฐ์ฒด๊ฐ€ ๋ ˆ์•„์ด์›ƒ์„ ์žก์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

46. #selector์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€.

  • Objective-C ๋Ÿฐํƒ€์ž„์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

47. Autoresizing๊ณผ Autolayout์˜ ์ฐจ์ด

  • Autoresizing mask๋Š” ์–ด๋–ค ๋ทฐ์˜ ๋ฐ”์šด๋“œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ๊ทธ ํ•˜์œ„ ๋ทฐ๋“ค์˜ ํ”„๋ ˆ์ž„์„ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ• ์ง€ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. autoresizing mask๋Š” ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์— ๋Œ€ํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  ์„ค์ •๋œ ๋ฐฉํ–ฅ์€ ์ƒ์œ„๋ทฐ์˜ bounds๊ฐ€ ๋ณ€ํ™”ํ•จ์— ๋”ฐ๋ผ ํ•จ๊ป˜ ๋ณ€ํ™”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์˜ค๋ฅธ์ชฝ์— ๋Œ€ํ•ด Autoresizing mask๋ฅผ ์„ค์ •ํ•˜๋ฉด ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ™”๋˜์–ด์„œ ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚ฌ์„ ๋•Œ, ์„ค์ •ํ•œ ์„œ๋ธŒ๋ทฐ์˜ ๊ฐ€๋กœ ๊ธธ์ด๊ฐ€ ํ•จ๊ป˜ ๋Š˜์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์„ค์ •์ด ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ฉด๋“ค์€ ๊ธฐ์กด ํฌ๊ธฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

48. super.viewDidLoad()๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€?

  • ์ƒ์œ„ ํด๋ž˜์Šค์˜ viewDidLoad๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ œ๋Š” ์ผ์–ด๋‚˜์ง€ ์•Š์ง€๋งŒ, UIKit์˜ viewDidLoad๊ฐ€ ์–ธ์ œ ๊ตฌํ˜„์ด ๋ฐ”๋€”์ง€ ๋ชจ๋ฅด๊ณ , ๋‚ด๋ถ€์— ์ค‘์š”ํ•œ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์žฅ ์˜ํ–ฅ์ด ์—†๋”๋ผ๋„ super.viewDidLoad๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

49. UIResponder์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • UIResponder๋Š” ๋ชจ๋“  UIView์˜ ์ƒ์œ„ ๊ฐ์ฒด์ด๋ฉด์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ UIResponder ๊ฐ์ฒด์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. UIKit์€ first responder์—๊ฒŒ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  UIResponder๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ž์‹ ์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๋ฉด next ํ”„๋กœํผํ‹ฐ์— ํ• ๋‹น๋œ ๋‹ค์Œ Responder์—๊ฒŒ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

50. Responder Chain์€ ๊ทธ๋Ÿผ ๋ญ”๊ฐ€์š”?

  • UIKit์ด ๋ชจ๋“  UIResponder๋ฅผ ์—ฎ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ฒด์ธ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฆฌ์Šคํฐ๋”๋Š” nextํ”„๋กœํผํ‹ฐ๋กœ ์ž์‹ ์˜ ๋‹ค์Œ ๋ฆฌ์Šคํฐ๋”๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

51. ๊ทธ๋Ÿผ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ž˜์Šค๋ณ„๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ์ˆœ์„œ๊ฐ€ ์–ด๋–ค์ง€

  • UIView, UIViewController, UIWindow, UIApplication, UIApplicationDelegate ์ˆœ์œผ๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ๋ทฐ๋‚˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์œ„๋ทฐ์— ์†ํ•ด์ ธ์žˆ๋Š” ๋ทฐ๋ผ๋ฉด ํ•ด๋‹น ๋ทฐ๋‚˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

52. Responder Chain์„ ์ž„์˜๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”?

  • ํŠน์ •ํ•œ ๋ทฐ์˜ next ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ๋‹ค์Œ ๋ฆฌ์Šคํฐ๋”๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , becomeFirstResponder ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŠน์ •ํ•œ ๋ทฐ๋ฅผ firstResponder๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ first responder์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

53. ๊ทธ๋Ÿผ ์ด๋ฒคํŠธ๋Š” ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋˜๋Š”์ง€? ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋Š” ๋‹ค๋ฅธ๊ฒŒ ์žˆ๋Š”์ง€?

  • ์ด๋ฒคํŠธ๋Š” UIEvent ๊ฐ์ฒด๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋Š” UITouch ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌ๋˜๊ณ  UIEvent ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ์น˜ ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” ํ„ฐ์น˜๋œ ์‹œ๊ฐ„, ํ„ฐ์น˜๋œ ์˜์—ญ, ํ„ฐ์น˜ ๊ฐ•๋„, ํ„ฐ์น˜ ์œ„์น˜ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

54. UIControl์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • UIControl์€ addTarget ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ target๊ณผ action์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. target์€ ์–ด๋–ค ๊ฐ์ฒด์ด๋˜์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ target์— nil์ด ๋“ค์–ด๊ฐ€๋ฉด UIControl์€ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” ๋ฆฌ์Šคํฐ๋”๋ฅผ ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์„ ํ†ตํ•ด ์ฐพ์•„๋ƒ…๋‹ˆ๋‹ค.
  • action์€ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด UIControl ๊ฐ์ฒด๋Š” ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  UIApplication์ด ํ˜ธ์ถœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์—์„œ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. @IBAction์ด ์ด๋Ÿฐ ๋ฉ”์„œ๋“œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

55. UI ์ž‘์—…์„ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ด์œ 

  • UI๋Š” ๋ณ€๊ฒฝ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ž๋งˆ์ž ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋Ÿฐ๋ฃจํ”„์˜ ํ•œ ์‚ฌ์ดํด ๋์— ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ UI์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋Ÿฐ๋ฃจํ”„์—์„œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๊ณ , ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ์‹œ์ ์ด ์ œ๊ฐ๊ฐ์ด ๋˜๊ฑฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์ด ์˜๋„ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

56. UIViewController์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋“ค์„ ๋ชจ๋‘ ๋งํ•˜๊ณ  ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • UIViewController๋Š” UIResponder๋ฅผ ์ƒ์†ํ•˜๊ณ , UIResponder๋Š” NSObject๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.
  • UIResponder๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ๋ฆฌ์Šคํฐ๋” ์ฒด์ธ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. NSObject๋Š” Objective-C์˜ ๋ฃจํŠธ ํด๋ž˜์Šค๋กœ NSObject๋ฅผ ์ƒ์†ํ•ด Objective-C ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

57. ์•ฑ์ด ์ฒ˜์Œ ์‹œ์ž‘๋˜๋ฉด ์–ด๋–ค ์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

  • main ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • main ํ•จ์ˆ˜๋Š” UIApplicationMain ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • UIApplicationMain์€ UIApplication ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Info.plist์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. main Nib ํŒŒ์ผ์„ ์—ฌ๊ธฐ์„œ ์ฐพ์•„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • UIApplication์€ AppDelegate ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  UIApplication์„ ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค.
  • UIApplication์€ RunLoop๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด AppDelegate์˜ didFinishlaunchingWithOptions๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์„ธ์…˜์— ๋Œ€ํ•œ ์„ค์ •์ด ์™„๋ฃŒ๋˜๋ฉด SceneDelegate์˜ willConnectToSession์ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

image