UIKit

1. Frame/Bounds

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 1-1 : frame๊ณผ bounds์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ”„๋ ˆ์ž„๊ณผ ๋ฐ”์šด์Šค ๋ชจ๋‘ view์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  2. frame์€ super view๋ฅผ ๊ธฐ์ค€์œผ๋กœ view์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งŒ์•ฝ, frame.origin = CGPoint(x:10, y:10)์ด๋ผ๋ฉด super view์˜ (0,0) ๊ธฐ์ค€์œผ๋กœ (10,10)์ด๋™ํ•œ ๊ณณ์— ์™ผ์ชฝ ์œ„ ๋ชจ์„œ๋ฆฌ ๊ฐ’์„ ์ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  3. bounds๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๊ธฐ์ค€์œผ๋กœ view์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ์€ (0,0)์œผ๋กœ ์ดˆ๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค. bounds์˜ ์œ„์น˜๋Š” ํ•˜์œ„๋ทฐ์˜ ์‹œ์ ์„ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  4. frame์€ view ์˜์—ญ์„ ๋ชจ๋‘ ๊ฐ์‹ธ๋Š” ์‚ฌ๊ฐํ˜•์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งŒ์•ฝ view๊ฐ€ ํšŒ์ „ํ•˜์—ฌ ๋ชจ์„œ๋ฆฌ์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์—๋Š” frame.size๋„ ํ•จ๊ป˜ ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

  5. bounds๋Š” view ์ž์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ view๊ฐ€ ํšŒ์ „์„ ํ•˜๋”๋ผ๋„ bounds.size์˜ ํฌ๊ธฐ๋Š” ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

image

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ํ•˜์œ„๋ทฐ์˜ ์‹œ์ ์„ ์ด๋™ํ•œ๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ ๋ง์ด์ฃ ? 1. bounds์˜ ๊ฐ’์ด (10,10)์œผ๋กœ ์˜ฎ๊ฒจ์ง€๋”๋ผ๋„ view๋Š” ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2. A๋ทฐ์˜ bounds.origin = CGPoint(x:10,y:10)์œผ๋กœ ์ฃผ๊ณ , B๋ทฐ์˜ super view๋ฅผ A๋กœ ์„ค์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 3. bounds์˜ ์œ„์น˜๋Š” ํ•˜์œ„๋ทฐ์˜ ์‹œ์ ์„ ์ด๋™์‹œํ‚จ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ A์˜ (10,10)์œ„์น˜์— ์žˆ๋˜ B๋ฅผ A์˜ ์‹œ์ž‘์  ์œ„์น˜๋กœ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 4. ์ฆ‰, ํ•˜์œ„๋ทฐ๋Š” super view์˜ (10,10)์œ„์น˜๋ฅผ ์‹œ์ž‘์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

image

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 1-2 : frame๊ณผ bounds์€ ๊ฐ๊ฐ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜์š”?

  1. frame์€ view์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  2. frame์€ super view๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์น˜๋ฅผ ์ •ํ•˜๊ณ , view ์ „์ฒด ์˜์—ญ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

  3. bounds๋Š” view๋ฅผ ํšŒ์ „ํ–ˆ์ง€๋งŒ ์‹ค์ œ ํฌ๊ธฐ๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋˜, bounds๋Š” ์‹œ์ ์„ ์ด๋™ํ•˜๋ฏ€๋กœ scrollView์—์„œ ์Šคํฌ๋กค ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ์Šคํฌ๋กค๋ทฐ์—์„œ bounds์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. scrollView์— ํ•˜์œ„๋ทฐ๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด ํ™”๋ฉด์„ ๋„˜์–ด๊ฐ€๋Š” UI๋ฅผ ์Šคํฌ๋กค์„ ํ†ตํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ด๋•Œ, ํ•˜์œ„๋ทฐ๋“ค์ด ์œ„์น˜๋ฅผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, scrollView๊ฐ€ ํ•˜์œ„๋ทฐ์˜ ์‹œ์ ์„ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  3. ์˜ˆ๋ฅผ๋“ค์–ด, ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ๋Š” scrollView์˜ bound.origin.y๊ฐ’์„ ์ˆ˜์ •ํ•˜์—ฌ superView๊ฐ€ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


2. Frame๊ณผ AutoLayout ์†๋„ ์ฐจ์ด

  1. autolayout์€ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚ด๋ถ€์—์„œ frame์œผ๋กœ ๊ณ„์‚ฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— autolayout โ†’ frame์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  2. ๊ทธ๋ž˜์„œ ๊ณ„์‚ฐ ์†๋„๋Š” frame์ด ๋” ๋น ๋ฅผ ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. UI ์†๋„(์„ฑ๋Šฅ)์— ๋ฏผ๊ฐํ•œ ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ๋Š” frame์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋‹จ, frame์˜ origin x,y๊ฐ’์„ ๊ทธ๋ƒฅ ์ฃผ๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ํ™”๋ฉด์˜ ํฌ๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋น„์œจ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€ํ–ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  4. ๊ทธ๋Ÿฐ ๋ฉด์—์„œ ๊ฐœ๋ฐœ ์†๋„๋Š” view์˜ ๋ฐฐ์น˜๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ autolayout์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3. CGFloat๊ณผ Float์˜ ์ฐจ์ด

  1. Float๋Š” ์‹ค์ˆ˜ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ 32๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  2. CGFloat๋Š” CPU ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ผ ์ž๋™์ ์œผ๋กœ 32๋น„ํŠธ๊ฐ€ ๋  ์ˆ˜๋„, 64๋น„ํŠธ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ CGFloat๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์‹ค์ˆ˜ํƒ€์ž…์— ๋Œ€ํ•ด ์ฝ”๋“œ ์ˆ˜์ •์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.


4. Controller

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 4-1 : ๋ชจ๋“  View Controller ๊ฐ์ฒด์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

  1. ๋ชจ๋“  ViewController์˜ ์ƒ์œ„ํด๋ž˜์Šค๋Š” UIViewController์ž…๋‹ˆ๋‹ค.

  2. UIViewController๋Š” UIKit์—์„œ ๋ทฐ์˜ ๊ณ„์ธต์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค.

  3. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•จ์— ๋”ฐ๋ผ ๋ทฐ ์ปจํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ , ๋ทฐ์˜ ํฌ๊ธฐ์™€ ๋ ˆ์ด์•„์›ƒ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  4. UIViewController๋Š” UIResponder์„ ์ƒ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 4-2: UIResponder๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  1. UIKit์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  2. UIKit์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ Responder ๊ฐ์ฒด์—๊ฒŒ ์ „๋‹ฌํ•ด์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  3. Responder๋Š” UIResponder์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. UIViewConroller๋„ Responder์ž…๋‹ˆ๋‹ค.

  4. Responder๋Š” UIResponder์— ์žˆ๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์ค‘์— ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ๊ทธ๋Ÿผ first responder์— ๋Œ€ํ•ด์„œ ๋งํ•ด๋ณด์‹ค๋ž˜์š”?

  1. UIKit์—์„œ๋Š” Responder๋“ค์„ ์—ฐ๊ฒฐํ•ด์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ Responder Chain์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Responder Chain์€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์€ Responder๋Š” ์ž์‹ ์ด ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ Responder Chain์— ์žˆ๋Š” ๋‹ค์Œ Responder์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. First Responder๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์ „๋‹ฌ๋ฐ›๋Š” Responder๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ฒ˜๋ฆฌํ•  Responder๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 4-3: UINavigationController์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ์Šคํƒ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ์ž…๋‹ˆ๋‹ค.

  2. ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ์Šคํƒ์— ๋‹ด์•„์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. (์ž๋ฃŒ๊ตฌ์กฐ Stack์˜ FILO ํŠน์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.)

  3. ๊ฐ€์žฅ ์•„๋ž˜์— ์œ„์น˜ํ•œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋Š” rootViewController๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์—†๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค.

  4. UINavigationController์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์Šคํƒ์— push, popํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ present์™€ pushViewController๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ์ฃ ?

  1. present๋Š” ํ˜„์žฌ ํ™”๋ฉด ์œ„์— ์ƒˆ๋กœ์šด view controller์„ ๋ชจ๋‹ฌ์ฐฝ์œผ๋กœ ๋„์›๋‹ˆ๋‹ค.

  2. ๋„ค๋น„๊ฒŒ์ด์…˜์˜ pushViewController ๋ฉ”์„œ๋“œ๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— view controller๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ตœ์ƒ๋‹จ์— ๋„์›Œ์ฃผ๋ฉฐ, navigation bar๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 4-4: ViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. init(nibName:bundle:) or init(coder:): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  2. loadView(): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

  3. viewDidLoad(): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ์งํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  4. viewWillAppear(_:): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  5. viewWillLayoutSubviews(): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ์„œ๋ธŒ๋ทฐ๋“ค์„ ๋ ˆ์ด์•„์›ƒํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  6. viewDidLayoutSubviews(): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ์„œ๋ธŒ๋ทฐ๋“ค์„ ๋ ˆ์ด์•„์›ƒํ•œ ์งํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  7. viewDidAppear(_:): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ ์งํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  8. viewWillDisappear(_:): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  9. viewDidDisappear(_:): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง„ ์งํ›„ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  10. deinit: ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๋ฉด ์ข‹์„๊นŒ์š”?

  1. viewDidLoad(): ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋กœ๋“œ๋  ๋•Œ ์ฒ˜์Œ์— ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜, ๋ทฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…

  2. viewWillAppear(_:): ๋ทฐ๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ž‘์—…. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ, ํ™”๋ฉด ๊ฐฑ์‹ 

  3. viewDidAppear(_:): ๋ทฐ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ž ๋งˆ์ž ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ๋‹ˆ๋ฉ”์ด์…˜

  4. viewWillDisappear(_:): ๋ทฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…. ์˜ˆ๋ฅผ ๋“ค์–ด ์• ๋‹ˆ๋ฉ”์ด์…˜, ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์ €์žฅ

  5. viewDidDisappear(_:): ๋ทฐ๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ž‘์—…

  6. deinit: ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋  ๋•Œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…. ์‚ฌ์šฉํ–ˆ๋˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œ (๊ฐ์ฒด ์ฐธ์กฐ ํ•ด์ œ)


5. View

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 5-1 : UIView์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. UIView๋Š” ์ง์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํ™”๋ฉด์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  2. UIKit Core Graphics๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์‚ฌ๊ฐํ˜• ์˜์—ญ์— ์ฝ˜ํ…์ธ ๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

  3. Layout์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์˜๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ทฐ์˜ ํฌ๊ธฐ, ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ทœ์น™์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์ด๋ฒคํŠธ์— ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ UIView ์—์„œ Layer ๊ฐ์ฒด๋Š” ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋‚˜์š”?

  1. ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” GPU์— ์ง์ ‘ ์ ‘๊ทผํ•ด์„œ ๊ทธ๋ฆฌ๋ฉด ๋ Œ๋”๋ง ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ์€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์ˆ˜์ค€ ํ”„๋ ˆ์ž„์›Œํฌ์ธ Core Animation๊ณผ UIKit ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  3. UIKit์€ Core Animation๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ๋†’์€ ์ˆ˜์ค€์˜ API ์ž…๋‹ˆ๋‹ค.

  4. ์ฆ‰, Core Animation๋ณด๋‹ค ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ๋ง์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

  5. UIView.layer๋Š” CALayer์˜ ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค. CALayer๋Š” Core Animation์—์„œ ์ œ๊ณตํ•˜๊ณ , UIView๋Š” UIKit์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  6. layer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ธˆ๋” ๋ณต์žกํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 5-2 : UIWindow์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ๋ทฐ๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๋น„์–ด์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋งค๊ฐœ์ฒด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  2. iOS ์•ฑ์€ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์œˆ๋„์šฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์Šคํ† ๋ฆฌ๋ณด๋“œ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์œˆ๋„์šฐ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” SceneDelegate ์— UIWindow๋ฅผ ๋งŒ๋“ค์–ด rootViewController๋ฅผ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


6. tableView & collectionView

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 6-1 : TableView๋ฅผ ๋™์ž‘ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ…Œ์ด๋ธ”๋ทฐ๋Š” ์žฌ์‚ฌ์šฉํ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  2. ํ™”๋ฉด์— ๋ณด์ด๋Š” cell๊ณผ ์•ž ๋’ค์˜ cell ๋ช‡ ๊ฐœ๋งŒ ๋งŒ๋“ค์–ด๋‘๊ณ , ๋‚˜๋จธ์ง€๋Š” ์Šคํฌ๋กค์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  3. dequeueReusableCell()์„ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€ cell์ด ์žฌ์‚ฌ์šฉํ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์žˆ์œผ๋ฉด ์žฌ์‚ฌ์šฉํ์—์„œ ๊บผ๋‚ด์„œ cell์„ ์žฌํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. (identifier๋ฅผ ํ†ตํ•ด ํ™•์ธ)

  4. cell์ด ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ธฐ ์ง์ „์— WillDisplayCell ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

  5. ์Šคํฌ๋กค์„ ํ†ตํ•ด cell์ด ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚˜๊ฒŒ๋˜๋ฉด didEndDisplayingCell ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , cell์€ ์žฌ์‚ฌ์šฉํ์— ๋“ค์–ด๊ฐ€์„œ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  6. iOS 10+ ๋ถ€ํ„ฐ๋Š” UITableViewDataSourcePrefetching ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•จ์œผ๋กœ์จ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” cell์˜ ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ํ˜ธ์ถœํ•˜์—ฌ ํ…Œ์ด๋ธ”๋ทฐ๊ฐ€ ์Šคํฌ๋กค๋  ๋•Œ cell์„ ๋” ๋น ๋ฅด๊ฒŒ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 6-2 : TableView ํ™”๋ฉด์— Cell์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” DataSource ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  • ์„น์…˜๋งˆ๋‹ค ํ‘œ์‹œํ•  ์…€์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

    • func tableView(UITableView, numberOfRowsInSection: Int)

  • ์ธ๋ฑ์Šค๋งˆ๋‹ค ์–ด๋–ค ์…€์„ ์‚ฌ์šฉํ• ์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ, cell์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜์—ฌ return ํ•ฉ๋‹ˆ๋‹ค.

    • func tableView(UITableView, cellForRowAt: IndexPath)

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 6-3 : TableView์™€ CollectionView์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. tableView๋Š” ์„ธ๋กœ ์Šคํฌ๋กค๋งŒ ์ง€์›ํ•˜๋ฉฐ, ๋‹จ์ผ ์ปฌ๋Ÿผ, ๋‹จ์ผ ์„น์…˜ ๋ ˆ์ด์•„์›ƒ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  2. collectionView๋Š” ์ƒํ•˜์ขŒ์šฐ ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋‹ค์ค‘ ์ปฌ๋Ÿผ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ๋‹ค์–‘ํ•œ ๋ ˆ์ด์•„์›ƒ์„ ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 6-4 : prepareForReuse์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. ํ…Œ์ด๋ธ”๋ทฐ๋Š” ๊ฐ™์€ identifier๋ฅผ ๊ฐ€์ง„ cell์„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  2. ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง„ ์…€์€ ์žฌ์‚ฌ์šฉํ์— ์ €์žฅ๋˜๊ณ  ๊ฐ™์€ identifier๋ฅผ ๊ฐ€์ง„ cell์„ ํ˜ธ์ถœํ•  ๋•Œ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  3. prepareForReuse๋Š” ํ…Œ์ด๋ธ” ๋ทฐ cell์ด ์žฌ์‚ฌ์šฉ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

  4. prepareForReuse๋Š” cellForItemAt ์ด ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜์–ด์„œ ์…€์˜ ์„ค์ •๋“ค์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

๐ŸŽฏ ์„ค๋ช…์—๋Š” ํŽธ์˜์ƒ ํ…Œ์ด๋ธ”๋ทฐ๋งŒ ์–˜๊ธฐํ–ˆ์ง€๋งŒ, ์ปฌ๋ ‰์…˜๋ทฐ cell๋„ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ ์ž…๋‹ˆ๋‹ค!!

7. URLSession

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 7-1 : URLSession์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. URLSession์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. Foundation ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

  3. URLSession์€ ๋‚ด๋ถ€์ ์œผ๋กœ GCD๋ฅผ ์‹œ์šฉํ•˜์—ฌ ๋„คํฌ์›Œํฌ ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ GCD๋กœ ์–ด๋–ป๊ฒŒ์š”? ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

  1. URLSession์—์„œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ์‹œ์ž‘ํ•˜๋ฉด, GCD๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. FIFO๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

๐Ÿ’๐Ÿปโ€โ™‚๏ธ 7-2 : URLDownloadTask์™€ URLSessionDataTask๋ฅผ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. ๋‘˜ ๋‹ค URLSession์—์„œ ์ œ๊ณตํ•˜๋Š” ๋„คํŠธ์›Œํฌ ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  2. downloadTask๋Š” ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์— ํŠนํ™”๋œ ์ž‘์—… ํด๋ž˜์Šค ์ž…๋‹ˆ๋‹ค.

  3. ๋กœ์ปฌ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๊ฒฝ๋กœ์— ์ €์žฅํ•œ๋‹ค๋ฉด ํŒŒ์ผ์„ ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์ €์žฅ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์•ฑ์˜ ์บ์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์•ฑ์ด ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

  5. dataTask๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  6. NSData ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ์ €์žฅ์†Œ์—๋Š” ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  7. ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— dataTask๋ฅผ ํ†ตํ•ด ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DownloadTask
DataTask

๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜

์˜์ƒ, ์Œ์•…, ์ด๋ฏธ์ง€, PDF

JSOM, XML

๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ

ํฐ๊ฑฐ

์ž‘์€๊ฑฐ

๋ฐ์ดํ„ฐ์˜ ์ €์žฅ

๋กœ์ปฌ(์˜๊ตฌ ์ €์žฅ ๊ฐ€๋Šฅ)

๋ฉ”๋ชจ๋ฆฌ

8. ์ถ”๊ฐ€ ๊ฐœ๋…

๐Ÿ’๐Ÿปโ€โ™‚ n-1 : UIKit ํด๋ž˜์Šค๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€?

  • mainThread : UIKit์€ UI๋ฅผ ๋‹ค๋ฃจ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค. UI์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋Š” ๋ฐ˜๋“œ์‹œ mainThread์—์„œ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ n-2 : ์ž์‹ ๋งŒ์˜ Custom View๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.

  1. custom view๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” UIView๋ฅผ ๋ฐ˜๋“œ์‹œ ์ƒ์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” super.init(frame: CGRect)๋ฅผ ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋ฉฐ, required init?(coder: NSCoder)๋„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚ n-3 : ๋ทฐ์˜ ์œ„์น˜๋‚˜ ํฌ๊ธฐ๋ฅผ ์žฌ์กฐ์ •ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜์š”?

  1. frame์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. frame.origin์„ ํ†ตํ•ด x,y ์ขŒํ‘œ๊ฐ’์œผ๋กœ view๋ฅผ ์ด๋™ํ•˜๊ณ , frame.size๋ฅผ ํ†ตํ•ด width, height๊ฐ’์„ ํ†ตํ•ด ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • frame์„ ์‚ฌ์šฉํ•˜๋ฉด ์ •ํ™•ํ•œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. autolayout์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ constraints๋กœ ์ง€์ •ํ•˜์—ฌ ์ƒ์œ„ ๋ทฐ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.

    • autolayout์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ๋Œ€์‘ํ•˜์—ฌ ๋ทฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. CGAffineTransform์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ์˜ ๋ณ€ํ™˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์กฐ์ฒด๋กœ, ๋ทฐ์˜ ํšŒ์ „, ํ™•๋Œ€, ์ถ•์†Œ ๋“ฑ์˜ ๋ณ€ํ˜•์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ณต์žกํ•œ ๋ทฐ์˜ ์ด๋™, ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚ n-4 : Foundation Kit์€ ๋ฌด์—‡์ด๊ณ  ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

  1. Cocoaํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค.

  2. objc์™€ swift์—์„œ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ (macOS, iOS, watchOS, tvOS)์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ, ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ด€๋ฆฌ, ๋„คํฌ์›Œํ‚น, ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ, ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋“ค

- NSString / NSMutableString : ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSArray / NSMutableArray : ๋ฐฐ์—ด ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSDictionary / NSMutableDictionary : ํ‚ค-๊ฐ’ ์Œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSUserDefaults : ์‚ฌ์šฉ์ž ์„ค์ • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSURL / NSURLRequest / NSURLSession : ๋„คํŠธ์›Œํ‚น ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSFileManager : ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ด€๋ฆฌ ํด๋ž˜์Šค
- NSDate / NSDateComponents / NSDateFormatter : ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSTimer : ํƒ€์ด๋จธ ํด๋ž˜์Šค
- NSNotificationCenter : ์•Œ๋ฆผ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSRegularExpression : ์ •๊ทœ ํ‘œํ˜„์‹ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค
- NSJSONSerialization : JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํด๋ž˜์Šค

๐Ÿ’๐Ÿปโ€โ™‚ n-5 : NSCache์™€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์บ์‹œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์„๋•Œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. key-value ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  2. NSCache๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์บ์‹œ๋œ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•จ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  3. NSCache๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋”•์…”๋„ˆ๋ฆฌ๋Š” thread-safeํ•˜์ง€ ์•Š์•„์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ ์ ‘๊ทผํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ NSCache๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜์ง€๋งŒ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๊ฑฐ๋‚˜ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•  ๋•Œ๋Š” ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ NSCache๋Š” ์™œ thread-safeํ•œ๊ฐ€์š”?

  • ๋”•์…”๋„ˆ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ NSCache๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฎคํ…์Šค์™€ ๊ฐ™์€ ๋™์‹œ์„ฑ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ NSCache๋Š” ์™œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?

  1. ์บ์‹œ๋œ ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. NSCache๋Š” ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๋œ ๊ฐ์ฒด์˜ ์ด ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๊ณ , ์ œํ•œ์— ๋„๋‹ฌํ•˜๋ฉด LRU์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ž˜ ์ „์— ์‚ฌ์šฉ๋œ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  3. ์ด๋Ÿฐ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์— ๋”•์…”๋„ˆ๋ฆฌ๋ณด๋‹ค ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ n-6 : setNeedsDisplay์™€ setNeedsLayout ์ฐจ์ด์ ์„ ๋งํ•ด์ฃผ์„ธ์š”.

  1. ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ โ€˜์–ด๋–ค ๊ฒƒ์„ ๋‹ค์‹œ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€โ€™ ์ž…๋‹ˆ๋‹ค.

  2. ๋‘ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ update cycle์— ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ง€์ ์—์„œ๋Š” view๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

  3. setNeedsDisplay๋Š” view๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์„, setNeedLayout์€ layout์„ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ๐Ÿ’๐Ÿปโ€โ™‚๏ธ ๋‘ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ View๊ฐ€ ๋ณ€๊ฒฝ ๋˜๋Š”๋ฐ์š”?

  1. UIView์—์„œ๋Š” ๋‚ด๋ถ€์—์„œ setNeedDisplay๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์˜ˆ๋ฅผ๋“ค์–ด layoutSubview๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ, ์ž๋™์œผ๋กœ setNeedsDisplay๊ฐ€ ํ˜ธ์ถœ๋˜์–ด view๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆด ๊ฒƒ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’๐Ÿปโ€โ™‚๏ธ n-7 : ํ•˜๋‚˜์˜ View Controller ์ฝ”๋“œ์—์„œ ์—ฌ๋Ÿฌ TableView Controller ์—ญํ• ์„ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”?

  • tableView์— tag๋ฅผ ๋‹ฌ์•„ switch๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ tag๋ฒˆํ˜ธ ๋ณ„ ๋ฐ์ดํ„ฐ์†Œ์Šค๋ฅผ ๋‹ฌ๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ViewController์— childController์„ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์–ด TableView๋ฅผ ํ•˜๋‚˜์”ฉ ๋งก์•„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Section์„ ๊ตฌ๋ถ„ํ•˜์—ฌ switch๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์„น์…˜๋ณ„๋กœ tableView๋ฅผ ๋‹ฌ๋ฆฌ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated