Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

iOSInterviewquestions - iOS ๋ณธ๋ฌธ

โš ๏ธ deprecated โš ๏ธ/๐Ÿง‘๐Ÿป‍๐Ÿ’ป iOSInterviewquestions

iOSInterviewquestions - iOS

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 6. 18:50

iOSInterviewquestions - iOS

 

๋ชฉ์  : ๋ฐฐ์šธ๋•Œ๋Š” ์ž˜ํ–ˆ๋Š”๋ฐ, ๋‚˜์ด๊ฐ€ ๋จน์œผ๋‹ˆ๊นŒ ์ž๊พธ ๊นŒ๋จน์–ด์„œ ์•„๋ž˜ ๊นƒํ—ˆ๋ธŒ ๊ธ€์„ ๋ฐ”ํƒ•์œผ๋กœ ๊พธ์ค€ํžˆ ์ด๋ก  ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ ์ž ํ•จ. ๋ฌผ๋ก  ์„ค๋ช…์€ ๋‚ด๊ฐ€ ์ž˜ ์•„๋Š”๊ฒŒ ๋ชฉ์ ์ด๋ผ ์ฒ ์ €ํžˆ ๋‚˜๋ฅผ ์ดํ•ด์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋‚˜์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ.

 

์ž‘์„ฑ์ผ : 2022๋…„ 4์›” 06์ผ 

 - README: ์ถ”ํ›„์— ์ˆ˜์ •์ด ์žˆ์„ ๊ฒฝ์šฐ ์•„๋ž˜์— ๋‚ ์งœ์™€ ์‹œ๊ฐ์„ ์ž‘์„ฑํ•˜๊ณ , ์ˆ˜์ • ๋‚ด์šฉ์„ ๊ฐ„๋žตํžˆ ์ •๋ฆฌํ•ด์ฃผ์„ธ์š”.

 

์˜ˆ์‹œ)

(์ˆ˜์ •) oooo๋…„ oo์›” oo์ผ oo์‹œ oo๋ถ„ 

 - ๋ณ€๊ฒฝ๋‚ด์šฉ : xxx์— ๋Œ€ํ•œ ์ž๋ฃŒ๋ฅผ ๋ณด๊ฐ•

 

โœ… ๊ณต๋ถ€์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ๊นƒํ—ˆ๋ธŒ ๊ธ€

https://github.com/JeaSungLEE/iOSInterviewquestions

 

GitHub - JeaSungLEE/iOSInterviewquestions: ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปiOS ๋ฉด์ ‘์— ๋‚˜์˜ฌ ์งˆ๋ฌธ๋“ค ์ด ์ •๋ฆฌ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ปiOS ๋ฉด์ ‘์— ๋‚˜์˜ฌ ์งˆ๋ฌธ๋“ค ์ด ์ •๋ฆฌ . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

 

 

โœ… iOS

 

  • Bounds ์™€ Frame ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • frame์€ superview์˜ ์ขŒํ‘œ ์‹œ์Šคํ…œ์—์„œ ๋ทฐ์˜ ์œ„์น˜์™€ ์‚ฌ์ด์ฆˆ๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • bounds๋Š” ์ž์‹ ์˜ ์ขŒํ‘œ ์‹œ์Šคํ…œ์—์„œ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋ƒ„
    • frame์€ view์˜ ์œ„์น˜๋‚˜ ํฌ๊ธฐ๋ฅผ ์•Œ๊ณ  ์‹ถ์„๋•Œ, bounds๋Š” view์˜ ํฌ๊ธฐ๋‚˜ ๋‚ด๋ถ€์— ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด๋•Œ ์‚ฌ์šฉ
  • ์‹ค์ œ ๋””๋ฐ”์ด์Šค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์—†๋Š” ๊ฒƒ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ํ•˜๋“œ์›จ์–ด์˜ ๊ฐ€์†๋„ ์„ผ์„œ, ๊ฐ€์••๊ณ„, GPS, ์ฃผ๋ณ€๊ด‘ ์„ผ์„œ ๋“ฑ์„ ์ด์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ, ์ „ํ™”๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค
    • API ์ค‘ ํ‘ธ์‹œ์•Œ๋ฆผ๊ณผ ์‚ฌ์ง„, ์—ฐ๋ฝ์ฒ˜, ์บ˜๋ฆฐ๋”์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ์•Œ๋ฆผ, handoff ๋ฐ messageUI ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋‚˜๋จธ์ง€๋กœ๋Š” ๋งฅ์˜ ์„ฑ๋Šฅ์ด ์•„์ดํฐ๋ณด๋‹ค ๋” ๋›ฐ์–ด๋‚˜ CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด์ด ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ณ , ๋„คํŠธ์›Œํฌ ์†๋„ ํ…Œ์ŠคํŠธ๋„ ๋ถˆ๊ฐ€ํ•˜๋ฉฐ,ํŽ˜์ด์Šค ์•„์ด๋””๋Š” ์ง์ ‘ ์–ผ๊ตด ์ธ์‹์€ ๋˜์ง€ ์•Š์œผ๋‚˜, ์ธ์‹ ๋ฐ ๋น„์ธ์‹ ์ฒ˜๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์•ฑ์˜ ์ฝ˜ํ…์ธ ๋‚˜ ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ์ €์žฅ/๋ณด๊ด€ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฌด์—‡์ด๋ผ๊ณ  ํ•˜๋Š”๊ฐ€?
    • ์•„์นด์ด๋ธŒ : iOS์—์„œ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ํ”ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ์•„์นด์ด๋น™ : ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ชจ๋‘ ๊ธฐ๋กํ•˜๊ณ , ํŒŒ์ผ์‹œ์Šคํ…œ์— ๋‚ด์šฉ์„ ์ €์žฅํ•œ๋‹ค.
    • ์–ธ์•„์นด์ด๋น™ : ์•„์นด์ด๋ธŒํ•œ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค.
    • class Car: NSCoding {
         var name : String = ""
         var nemesis : Car
         var model : Int
      
         //์•„์นด์ด๋น™
         func encode(with enCoder: NSCoder) {
            enCoder.encode(name, forKey: "name")
            enCoder.encode(nemes, forKey: "nemes")
            enCoder.encode(model, forKey: "model")
         }
         //๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์€ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์„œ ํŒŒ์ผ์‹œ์Šคํ…œ์— ์ €์žฅ๋œ๋‹ค.
      
         required init?(coder aDecoder: NSCoder) {
            name = aDecoder.decodeObject(forKey: "name") as! String
            nemesis = aDecoder.decodeObject(forKey: "nemesis") as! Car?
            model = aDecoder.decodeInteger(forKey: “model")
         }
      }
    • UserDefaults : ํ‚ค - ๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. 
      • ๋Ÿฐํƒ€์ž„์‹œ ๊ฐœ์ฒด๋ฅผ ์ด์šฉํ•˜์š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์ฝ์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ด ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค, ์ž๋™๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ์•„์ด๋””, ํ™˜๊ฒฝ์„ค์ •์—์„œ์˜ ์„ค์ • ๋ฐ์ดํ„ฐ๊ฐ’๊ณผ ๊ฐ™์€ ๋‹จ์ผ ๋ฐ์ดํ„ฐ ๋“ฑ์„ ๋ณด๊ด€ํ•œ๋‹ค.
    •  CoreData : ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Framework์ด๋‹ค.
      • SQLite์™€ ๊ฐ™์ด ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ , ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ๋ฐ์ดํ„ฐ๋ฅผ ์šด์˜ํ•˜๊ธฐ์— ๋” ๋งŽ์€ ์ €์žฅ๊ณต๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ๋”์šฑ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. Data Model์„ ์ƒ์„ฑํ•œ ํ›„์— Entity๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • SQLite : Swift์— ํŠน๋ณ„ํ•œ ์„ค์น˜ ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • C์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๊ธฐ์— ๋งค์šฐ ๊ฐ€๋ฒผ์šด ๊ฒƒ์ด ํŠน์ง•์ด๋ฉฐ, ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋””์Šคํฌ ํŒŒ์ผ 1๊ฐœ์— ์ €์žฅํ•˜๊ณ  ์„ค์ • ์ž์ฒด๊ฐ€ ๋งค์šฐ ๊ฐ„ํŽธํ•˜๊ธฐ์— ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•˜๋‹ค. SQLite๋Š” iOS, Android, Linux, Window ๋“ฑ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๊ณ , ์ˆ˜๋งŽ์€ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ ‘๊ทผ์œผ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค.
    • Realm : SQLite์™€ ๊ฐ™์ด ์˜คํ”ˆ์†Œ์Šค์ด๋ฉฐ, ๋ชจ๋ฐ”์ผ์— ์ตœ์ ํ™”๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 
      • SQLite, Core Data๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์„ฑ๋Šฅ๋ฉด์—์„œ ๋” ์šฐ์ˆ˜ํ•˜๋‹ค. ๋งŽ์€ ์ž‘์—…๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ, ์“ฐ๊ธฐ ์ž‘์—…์„ ๋ชจ๋‘ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŽธ๋ฆฌํ•˜๋‹ค. ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์šฉ๋Ÿ‰์ด ์ ๊ณ  ํผ์— ์ƒ๊ด€์—†์ด ์†๋„์™€ ์„ฑ๋Šฅ์ด ์œ ์ง€๋œ๋‹ค.
  • ์•ฑ ํ™”๋ฉด์˜ ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋กœ์ง๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฌด์—‡์ด๋ผ๊ณ  ํ•˜๋Š”๊ฐ€?
    • UIViewController : View hierarchy๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ๋กœ Content ViewController์™€ Container ViewController๊ฐ€ ์žˆ๋‹ค.
    • (์ถ”๊ฐ€๋กœ ์•Œ๋ฉด ์ข‹์„ ๊ฒƒ๋“ค)
      • UIApplication ๊ฐ์ฒด
        • UIApplication์€ ๋ฉ”์ธ ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋กœ ์•ฑ ์ƒํƒœ ๋ณ€ํ™”๋‚˜ ํ‘ธ์‹œ ๋ฉ”์‹œ์ง€ ๋„์ฐฉ์ฒ˜๋Ÿผ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ์ด๋ฒคํŠธ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๊ฐ์ฒด์— ์ „๋‹ฌํ•˜์—ฌ, ์‚ฌ์ „์— ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
      • App Delegate ๊ฐ์ฒด
        • App Delegate ๊ฐ์ฒด๋Š” UIApplication ๊ฐ์ฒด์™€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์•ฑ์˜ ์ดˆ๊ธฐํ™”, ์ƒํƒœ ๋ณ€ํ™”, ๊ธฐํƒ€ ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋ง ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ๊ฐ ์•ฑ์—์„œ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋ณด์žฅ๋œ๋‹ค. (๋•Œ๋ฌธ์— ์•ฑ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.
      • UIWindow ๊ฐ์ฒด
        • UIWindow ๊ฐ์ฒด๋Š” ํ™”๋ฉด์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ทฐ์— ๋Œ€ํ•œ ํ‘œํ˜„์„ ์กฐ์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ๋“ค์€ ๋ฉ”์ธ ํ™”๋ฉด์— ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ํ•˜๋‚˜์˜ ์œˆ๋„์šฐ๋งŒ ๊ฐ€์ง€์ง€๋งŒ, ๊ฐ์ฒด๋Š” ์™ธ๋ถ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์ปจํ…์ธ ๋ฅผ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ๋ถ€๊ฐ€์ ์ธ ์œˆ๋„์šฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•ฑ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ, ๋ถ€๊ฐ€์ ์ธ ์œˆ๋„์šฐ๋ฅผ ๊ฐ€์ง„๋‹ค๊ณ  ํ•ด์„œ ์œˆ๋„์šฐ ์ž์ฒด๋ฅผ ๊ต์ฒดํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ViewController๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • (์ฐธ๊ณ ) https://sibalja.tistory.com/3
    • (์ฐธ๊ณ ) https://www.notion.so/32b4a19f75d04f33ad92cdde611b189e

 

  • App thinning์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ์•ฑ์ด ๋””๋ฐ”์ด์Šค์— ์„ค์น˜๋  ๋•Œ, ์•ฑ์Šคํ† ์–ด์™€ OS๊ฐ€ ๋””๋ฐ”์ด์Šค์— ํŠน์„ฑ์— ๋งž๊ฒŒ ์„ค์น˜๋˜๋„๋ก ํ•˜๋Š” ์„ค์น˜ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ๋งํ•จ. ์ตœ์†Œํ•œ์˜ ๋””์Šคํฌ ์‚ฌ์šฉ๊ณผ ๋น ๋ฅธ ๋‹ค์šด๋กœ๋“œ ์ œ๊ณต. ์•ฑ ์‹œ๋‹์€, slicing, bitcode, on-demand resouce๊ฐ€ ์žˆ๋‹ค.
      • slicing : ์•ฑ์ด ์ง€์›ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋””๋ฐ”์ด์Šค์— ๋Œ€ํ•ด ๊ฐ๊ฐ ์กฐ๊ฐ ์•ฑ ๋ฒˆ๋“ค์„ ์ƒํ—ํ•˜๊ณ  ํ•ด๋‹น ๋””๋ฐ”์ด์Šค์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์กฐ๊ฐ์„ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ์ˆ 
      • bitcode : ๋น„ํŠธ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„ ์–ธ์–ด๋กœ ๋ฒˆ์—ญ๋˜๊ธฐ ์ด์ „ ๋‹จ๊ณ„์˜ ์ค‘๊ฐ„ํ‘œํ˜„์„ ๋งํ•จ.
      • on-demand-resource : ํ•„์š”ํ•  ๋•Œ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค๋Š” ์˜๋ฏธ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ, ๋‹ค์šด๋กœ๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค.
    • (์ฐธ๊ณ ) https://ttuk-ttak.tistory.com/42

 

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

 

  • @Main์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • Swift 5.3๋ถ€ํ„ฐ๋Š” @main(UIApplicationMain ๋Œ€์‹ ์—)์„ ์‚ฌ์šฉํ•œ๋‹ค. UIKit ๊ธฐ๋ฐ˜ ์•ฑ์˜ main entry point์ด๋‹ค.
    • (์ฐธ๊ณ ) https://jinnify.tistory.com/18
  • ์•ฑ์ด foreground์— ์žˆ์„ ๋•Œ์™€ background์— ์žˆ์„ ๋•Œ ์–ด๋–ค ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ๋‚˜์š”?
    • foreground mode๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๊ธฐํƒ€ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค์— ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์‹œ์Šคํ…œ์€ ์ด๋Ÿฌํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•„์š”์— ๋”ฐ๋ผ background์•ฑ์„ ์ข…๋ฃŒํ•œ๋‹ค. background mode๋Š” ๊ฐ€๋Šฅํ•œ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ธฐ ์–ด๋ ต๊ณ  ๊ณต์œ  ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๊ณ  ์ด๋ฏธ์ง€ ๊ฐ์ฒด ์ฐธ์กฐ ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ.

 

  • ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์•ฑ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ฉ”์„œ๋“œ๋“ค์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • iOS 12 ์ดํ•˜ ๋ฒ„์ „์—์„œ๋Š” AppDelegate๊ฐ€ 2๊ฐ€์ง€ ์—ญํ• ์„ ํ–ˆ๋Š”๋ฐ, process level์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์„ ์•Œ๋ ค์ฃผ๊ณ , UI์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์•Œ๋ ค์ฃผ์—ˆ๋‹ค. (1 process & 1 user interface)
    • iOS 13๋ถ€ํ„ฐ๋Š” ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ๋™์ž‘์€ SceneDelegate๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋˜์—ˆ์Œ. (1 process & multiple user interface)
    • ๊ธฐ์กด์—๋Š” UIWindow์—์„œ ๊ฐ์ฒด์— ๋Œ€ํ•œ configuration๋„ ์ง„ํ–‰ํ–ˆ์—ˆ๋Š”๋ฐ ์ด์ œ๋Š” ํ•˜๋‚˜์˜ window ๊ฐ์ฒด๋งŒ ๊ด€๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ appdelegate์˜ ์ผ๋ถ€ ์—ญํ• ์„ SceneDelegate์— ๋„˜๊ฒจ ์ฃผ์—ˆ๊ณ , AppDelegate๋Š” ์ƒˆ๋กœ์šด ์—ญํ•  ํ•˜๋‚˜๋ฅผ ๋” ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.
      • process level์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์„ ์•Œ๋ ค์ฃผ๊ณ  (๊ทธ๋Œ€๋กœ)
      • session life-cycledmf appDelegate์— ์•Œ๋ ค์ฃผ๊ฒŒ ๋˜์—ˆ์Œ (์‹ ๊ทœ)
      • ๊ธฐ์กด UI ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ SceneDelegate์—์„œ ์ฑ…์ž„์ง€๊ฒŒ ๋˜์—ˆ๊ณ , AppDelegate๋Š” ์ƒˆ๋กœ์šด Scene Session์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ฒ„๋ ค์งˆ ๋•Œ ์•Œ๋ฆฌ๋Š” ์—ญํ• ์„ ์ƒˆ๋กœ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค.
    • scene(_: willConnectTo: options:)
      sceneWillEnterForeground(_ :)
      sceneDidBecomeActive(_ :)
      sceneWillResignActive(_ :)
      sceneDidEnterBackground(_ :)
      sceneDidDisconnect(_ :)
      
      // iOS 12์ด์ „
      applicationWillResignActive // active -> inactive ์ƒํƒœ๋กœ ์ „ํ™˜์‹œ inactive์ „ํ™˜ ์ง์ „ ์‹คํ–‰
      applicationDidEnterBackground // background ์ƒํƒœ์ „ํ™˜ ์งํ›„
      applicationWillEnterForeground // background -> foreground ์ƒํƒœ๋กœ ์ „ํ™˜์‹œ foreground์ง์ „
      applicationDidBecomeActive // active์ƒํƒœ์งํ›„, ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ฌ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰
      applicationWillTerminate // ์•ฑ ์ข…๋ฃŒ์‹œ
      willFinishLaunching // didFinish์ „์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
      didFinishLaunching //  ์•ฑ ์‹คํ–‰์‹œ 1๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
    • (์ฐธ๊ณ ) https://github.com/iOS-SOPT-iNNovation/iOS_Traning/issues/4
    • (์ฐธ๊ณ ) https://sueaty.tistory.com/135

 

  • ์•ฑ์ด In-Active ์ƒํƒœ๊ฐ€ ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์ž ์‹œ ๋จธ๋ฌด๋Š” ์ƒํ™ฉ์ด๋‚˜, ์•ฑ์ด ๋กœ๋”ฉ๋˜๋Š” ์ƒํ™” ๋“ฑ
  • scene delegate์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • iOS 13์ด์ƒ์—์„œ ์•ฑ์—๋Š” ๋‘˜ ์ด์ƒ์˜ scene์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, iOS, iPadOS ๋“ฑ์—์„œ ๋‹ค์ค‘ ์ฐฝ ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด AppDelegate์— ์žˆ๋˜ UI ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ SceneDelegate๋กœ ์ด์ „๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • (์ฐธ๊ณ ) https://github.com/lunchScreen/Interview_Questions/issues/41
  • UIApplication ๊ฐ์ฒด์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์€ ์–ด๋””์— ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
    • AppDelegate์— ๊ตฌํ˜„ํ•˜์—ฌ์•ผ ํ•œ๋‹ค. UIApplication์€ ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜์ง€๋งŒ, ๋ณ„๋„๋กœ ์ƒ์„ฑํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„์—์„œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
    • (์ฐธ๊ณ ) https://min-mon.tistory.com/entry/UIKit-UIApplication
  • App์˜ Not running, Inactive, Active, Background, Suspended์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • Not running : ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š์€ ์ƒํƒœ
    • foreground : app์ด ์‹คํ–‰๋˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ
      • inactive : ์•ฑ์ด ์‹คํ–‰์ค‘์ด๋‚˜, ์•„์ง ์•„๋ฌด๋Ÿฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์ง€ ์•Š์€ ์ƒํƒœ. foreground์—์„œ ์ „ํ™”๋‚˜ ์ž ๊ธˆ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น ์Šคํฌ๋ฆฐ ๋“ฑ์—์„œ inactive์ƒํƒœ๋ฅผ ๊ฐ€์ง
      • active : ์•ฑ์ด ์‹คํ–‰์ค‘์ด๋ฉฐ, ํ˜„์žฌ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ์žˆ๊ณ , ๋ฐœ์ƒํ•œ ์ƒํƒœ.
    • background : ์•ฑ์ด ๋ฐฑ๊ทธ๋ž‘๋ˆ„๋“œ์— ์žˆ๋Š” ์ƒํƒœ๋ฉฐ, ์—ฌ์ „ํžˆ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ.
    • suspend : ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๊ณ  ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ์ƒํƒœ.(app์€ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋ฉฐ, ์„œ์ŠคํŽœ๋“œ๊ฐ€ ๋  ๋‹น์‹œ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์ง€๋งŒ, cpu๋‚˜ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•˜์ง€ ์•Š๊ณ , ์–ธ์ œ๋“ ์ง€ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ๋“ฑ์˜ ์ด์œ ๋กœ ์ข…๋ฃŒ ๊ฐ€๋Šฅ)

 

  • NSOperationQueue ์™€ GCD Queue ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • iOS ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
    • GCD(Grand Central Dispatch)๋Š” C๊ธฐ๋ฐ˜์˜ low-level API
    • NSOperation์€ Obj-c๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ high-level API
      • ๊ฐ์ฒด์˜ ์šฐ์„ ์ˆœ์œ„ ๋ฐ ์ค€๋น„ ์ƒํƒœ์— ๋”ฐ๋ผ ๋Œ€๊ธฐ์—ด์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. Operation Queue์— ์ถ”๊ฐ€๋œ ์ž๊ฒ…ใ…‚์€ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋–„๊นŒ์ง€ ๋Œ€๊ธฐ์—ด์— ๋‚จ์•„ ์žˆ๋‹ค. ์ž‘์—…์ด ์ถ”๊ฐ€๋œ ํ›„์—๋Š” ๋Œ€๊ธฐ์—ด์—์„œ ์ง์ ‘ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค.
      • ๋ชจ๋“  ์ž‘์—…์ด ๋๋‚˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ Operation Queue๋ฅผ ์ค‘์ง€์‹œํ‚ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ฆญ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
      • GCD์—์„œ๋Š” ํ•  ์ˆ˜ ์—†๋Š” ๊ธฐ๋Šฅ๋“ค(์žฌ๊ฐœ, ์ทจ์†Œ, ์ค‘์ง€)์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๊ณ  ๋ฌด๊ฒ๋‹ค.
      • KVO(Key-Value Observing) ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (GCD๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€)
        • operation (read only) : ํ˜„์žฌ ํ์— ์žˆ๋Š” ์ž‘์—…์˜ ๊ฐฏ์ˆ˜
        • operationCount (read only) : ํ˜„์žฌ ํ์— ์žˆ๋Š” ์ž‘์—…์˜ ๊ฐฏ์ˆ˜
        • maxConcurrentOperationCount (readable and writable) : ํ์—์„œ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์˜ ์ตœ๋Œ€ ๊ฐฏ์ˆ˜
        • suspended (readable and writable) : ์‹คํ–‰ ์ž‘์—…์„ ์ ๊ทน์ ์œผ๋กœ ์Šค์ผ€์ค„๋งํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ Boolean ๊ฐ’
        • name (readable and writable) : operationQueue์˜ ์ด๋ฆ„
      • ์ž‘์—…๊ฐ„์˜ ์˜์กด์„ฑ : ์–ด๋–ค ์ž‘์—…์„ ๋‹ค๋ฅธ ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ํ›„์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์ž‘์—…์˜ ๊ณ„์ธต์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • GCD(Grand Central Dispatch) Queue(Dispatch Queue)
      • ๋™์‹œ์„ฑ ๋ชจ๋ธ์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” low-level C๊ธฐ๋ฐ˜์˜ API
      • ์•ฑ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…์˜ ์‹คํ–‰์„ ์ง๋ ฌ ๋˜๋Š” ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
      • ์ž‘์—… ํ•ญ๋ชฉ์„ ๋™๊ธฐ ํ˜น์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์˜ˆ์•ฝํ•œ๋‹ค.
        • ๋™๊ธฐ์  : ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž‘์—…์„ ์ˆœ์ฐจ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
        • ๋น„๋™๊ธฐ์  : ๋ชจ๋“  ๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์ถ”๊ฐ€ ์Šค๋ ˆ๋“œ์˜ ์ž‘์—…์„ ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰ํ•ด์„œ ์ž‘์—…์„ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
      • ๋ฉ”์ธ ํ์—์„œ ์ž‘์—… ํ•ญ๋ชฉ์„ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • (์ฐธ๊ณ ) https://thoonk.tistory.com/30

 

  • GCD API ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ•„์š”์„ฑ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๋™์‹œ์ ์œผ๋กœ ์ž‘์—…์„ ์‹คํ–‰์‹œํ‚ค๋Š” low-level ๊ธฐ๋ฐ˜์˜ API
    • ์•ฑ์„ ์‹คํ–‰ํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๋ฉ”์ธ์Šค๋ ˆ๋“œ ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” Main ํ(Serial Queue)๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ. ๊ทธ ์™ธ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ Global ํ(Concurrent Queue)๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ํ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
      • Dispatch Queue : FIFO ์ˆœ์„œ๋กœ ์ž‘์—…์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์—ญํ• ์„ ๋‹ด๋‹น
      • Serial Dispatch Queue: ํ•œ๋ฒˆ์— ํ•œ ์ž‘์—…๋งŒ ์‹คํ–‰์‹œํ‚จ๋‹ค.
      • Concurrent Dispatch Queue: ์‹œ์ž‘ํ•œ ์ž‘์—…์ด ๋๋‚˜๋Š”๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์ž‘์—…์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.
      • Main Dispatch Queue, ์•ฑ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ์ „์—ญ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์‹œ๋ฆฌ์–ผ ํ
      • DispatchQueue.main: main thread queue, serial Queue๋กœ ๋™์ž‘ํ•œ๋‹ค
    • ํ•„์š”์„ฑ : GCD ์‚ฌ์šฉ ์ด์ „์—๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ ์Šค๋ ˆ๋“œ์™€ OperationQueue ๋“ฑ์˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ณต์žกํ•˜๊ณ  ciritical sction์„ ์ด์šฉํ•œ lock์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆํŽธํ–ˆ๋‹ค. OperationQueue๋Š” ๋ฌด๊ฒ๊ณ  boilerplate ์ฝ”๋“œ๋“ค์ด ๋งŽ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. Apple์—์„œ ์ œ๊ณตํ•˜๋Š” GCD๋ฅผ ํ†ตํ•ด ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๋ฅผ ์•ฑ๋ ˆ๋ฒจ์—์„œ OS๋ ˆ๋ฒจ๋กœ ์˜ฌ๋ ธ๋‹ค.
    • ๋˜ํ•œ, ๋„คํŠธ์›Œํฌ ์ž‘์—…์ฒ˜๋Ÿผ ํ—ค๋น„ํ•œ ์ž‘์—…์„ ํ• ๋•Œ, GCD๋ฅผ ์ ์ ˆํžˆ ์ด์šฉํ•œ๋‹ค๋ฉด ์•ฑ์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • Global DispatchQueue ์˜ Qos ์—๋Š” ์–ด๋–ค ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€, ๊ฐ๊ฐ ์–ด๋–ค ์˜๋ฏธ์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • userInteractive : ์‚ฌ์šฉ์ž ํ„ฐ์น˜์™€ ๊ฐ™์ด ์ œ์ผ ๊ธ‰ํ•œ๊ฑฐ
    • userInitiated : ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—… ์ด๊ฒƒ๋„ ๊ฑฐ์˜ ๋ฐ”๋กœ ์‹œํ–‰๋˜์–ด์•ผ ํ•  ์ž‘์—…
    • default : ์œ„์˜ ๋ ˆ๋ฒจ๋ณด๋‹ค ์กฐ๊ธˆ ๋œ ์ค‘์š”ํ•œ ์ž‘์—…
    • utility : ์ˆ˜์ดˆ~ ์ˆ˜๋ถ„ ๊ฑธ๋ฆฌ๋Š” ๋‚˜๋ฆ„ ๋ฌด๊ฑฐ์šด ์ž‘์—… ex) ๋„คํŠธ์›Œํฌ ๋ฐ ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • background : ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ”๋กœ ์ธ์‹๋  ํ•„์š”๋Š” ์—†๋Š” ์ž‘์—… ex) ๋‰ด์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋‹ค์šด ๋ฐ›๊ธฐ, ์šฉ๋Ÿ‰์ด ํฐ ์˜์ƒ์„ ๋ฐ›๊ธฐ, ์‚ฌ์šฉ์ž์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ
  • iOS ์•ฑ์„ ๋งŒ๋“ค๊ณ , User Interface๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€?
    • UIKit์ž…๋‹ˆ๋‹ค.
    • UIKit์ด๋ž€ ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์ฃผ ๋ชฉ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
    • (์ฐธ๊ณ ) https://www.notion.so/iOS-User-Interface-b8014e53472e400ea4718cf750c1d833
 

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

Cocoa Touch Framework

www.notion.so

 

  • Foundation Kit์€ ๋ฌด์—‡์ด๊ณ  ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • Foundation ํ”„๋ ˆ์ž„์›Œํฌ๋Š”, ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ง€์†์„ฑ, ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ, ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ๊ณ„์‚ฐ, ์ •๋ ฌ ๋ฐ ํ•„ํ„ฐ๋ง, ๋„คํŠธ์›Œํ‚น์„ ํฌํ•จํ•˜์—ฌ ์•ฑ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค. ์ฝ”์ฝ”์•„ ํ„ฐ์น˜ ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌํ•จ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ ์• ํ”Œ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ.
    • ์œ„์˜ ์„ค๋ช…์—์„œ ๋งํ•˜๋Š” ๊ฒƒ๋“ค์ด class๋กœ ์žˆ์œผ๋ฉฐ, import Foundation์—์„œ Foundation์˜ ๋‚ด๋ถ€๋ฅผ ์—ด์–ด๋ณด๋ฉด open class๋กœ ์œ„ ์— ๊ฒƒ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • (์ฐธ๊ณ ) https://developer.apple.com/documentation/foundation
 

Apple Developer Documentation

 

developer.apple.com

 

  • Delegate๋ž€ ๋ฌด์–ธ์ธ๊ฐ€ ์„ค๋ช…ํ•˜๊ณ , retain ๋˜๋Š”์ง€ ์•ˆ๋˜๋Š”์ง€ ๊ทธ ์ด์œ ๋ฅผ ํ•จ๊ป˜ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • delegate๋ž€ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์ผ ์ค‘ ์ผ๋ถ€๋ฅผ ์œ„ํ•จํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ถ„์‚ฐํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ผ๋ถ€๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋„˜๊น€์œผ๋กœ์จ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•จ. ๊ธฐ๋Šฅ์„ ์œ„์ž„ํ•˜์—ฌ, ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ ์–ด์ง. UITableViewDelegate, UITableViewDataSources ๋“ฑ๋„ delegate๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ ์ค‘์˜ ์ผ๋ถ€.
    • ratain์ด ๋‹น์—ฐํžˆ ์ผ์–ด๋‚จ. (์ด๊ฑธ๋กœ ์˜ˆ์ „์— ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ ์ด์Šˆ ๋ฐœ์ƒํ•ด์„œ ์—„์ฒญ ใ… ํ•˜ ;) delegate๋ฅผ ๊ฐ์ฒด๋กœ ํ™œ์šฉํ•ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด, weak์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, A-B์˜ delegate ๋ณ€์ˆ˜๋ฅผ ๋“ค๊ณ  ์žˆ๊ณ , B-A๋ฅผ ๋˜ ๋“ค๊ณ  ์žˆ๋‹ค๋ฉด ์žˆ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ.
  • NotificationCenter ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ™œ์šฉ ๋ฐฉ์•ˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • Notification: ์•Œ๋ฆผ ์„ผํ„ฐ๋ฅผ ํ†ตํ•ด ๋“ฑ๋ก๋œ ๋ชจ๋“  ๊ด€์ฐฐ์ž์—๊ฒŒ broadcast๋˜๋Š” ์ •๋ณด ์ปจํ…Œ์ด๋„ˆ
    • NotificationCenter: ๋“ฑ๋ก๋œ ๋ชจ๋“  Observaer์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
      • Key: Value๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋™์ž‘ํ•œ๋‹ค.
    • ๋™์ž‘ ๋ฐฉ์‹
      • ์˜ต์ €๋ฒ„๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
      • ์‹œ์Šคํ…œ์—์„œ ๋“ฑ๋ก๋œ ์˜ต์ €๋ฒ„๋ฅผ ๊ฐ์‹œํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋“ฑ๋กํ•œ ๊ฐ์ฒด์—๊ฒŒ ํ†ต์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • ํ™œ์šฉ ๋ฐฉ์•ˆ
      • ํ™”๋ฉด์˜ ๊ฐ€๋กœ์„ธ๋กœ ์ „ํ™˜, ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™˜์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ

NotificationTraining.zip
0.04MB

 

  • UIKit ํด๋ž˜์Šค๋“ค์„ ๋‹ค๋ฃฐ ๋•Œ ๊ผญ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ ์ด๋ฆ„์€ ๋ฌด์—‡์ธ๊ฐ€?
    • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์ด๋‹ค. (UI๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ์—์„œ๋„ ๋ฉ”์ธ์—์„œ!! ๊ทธ ์ด์œ ๋Š” ๊ทธ๋ ‡๊ฒŒ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—)
    • UIKit์€ Thread-Safeํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—
      • UIKit์˜ ๋Œ€๋ถ€๋ถ„์˜ ์š”์†Œ๋“ค์€ nonatomic์ด๋‹ค. ์ฆ‰, Thread-Safeํ•˜์ง€ ์•Š๋‹ค. UIKit์ด๋ž€ ๊ฑฐ๋Œ€ํ•œ framework๋ฅผ Thread-Safeํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋น„ํ˜„์‹ค์ ์ด๋ฉฐ, Thread-Safe์œผ๋กœ ๋งŒ๋“œ๋ ค๋ฉด atomic์œผ๋กœ ํ•˜๊ฑฐ๋‚˜ NSLock ๋“ฑ์˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Serialํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ UI๋Š” Main Thread์—์„œ Syncํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
      • ๋‘๋ฒˆ์จฐ๋Š” iOS์˜ Graphics rendering์ด ๊ถ๊ทน์ ์œผ๋กœ ๋™๊ธฐ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ํ•™์Šตํ•  ๋•Œ, ํ•™๊ต ๊ต์ˆ˜๋‹˜๊ป˜์„œ UI์—์„œ ๋งค์šฐ ์ƒ์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ์…จ๋Š”๋ฐ, ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋ฌดํ•œํžˆ ๋Œ๋ฉด์„œ ์‚ฌ์šฉ์ž์˜ ์–ธ์ œ ๋“ค์–ด์˜ฌ ์ง€ ๋ชจ๋ฅด๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทผ๋ฐ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋ง๊ณ ๋„ ๋ชจ๋‘ ๋ฉ”์ธํ•ด์„œ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ๋ฅผ ๋†“์น  ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ๋ฉ”์ธ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ๋„ ์ด ๋•Œ๋ฌธ์— ์กด์žฌํ•œ๋‹ค.
    • (์ฐธ๊ณ ) https://medium.com/remember/%EC%99%9C-ui-%EC%B2%98%EB%A6%AC%EB%A5%BC-main-thread%EC%97%90%EC%84%9C-%ED%95%B4%EC%95%BC%ED%95%98%EB%82%98-5b2ba268f4eb
  • App Bundle์˜ ๊ตฌ์กฐ์™€ ์—ญํ• ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ์• ํ”Œ ๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค ๋“ฑ์„ ํ•œ ๊ณต๊ฐ„์— ๋ฌถ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๋‹ค.
    • ์ฆ‰, ๋ฒˆ๋“ค์ด๋ž€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ์™€ ์ฝ”๋“œ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ–๋Š” standardized, hierarchical ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค.
    • App Bundle ํŒŒ์ผ์˜ ์œ ํ˜• 
      • Info.plist (ํ•„์ˆ˜) : ์‘์šฉ ํ”„๋กœ๊ธ€๋งค์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐํ™”๋œ ํŒŒ์ผ. SwiftUI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ดˆ๊ธฐ์— Info.plistํŒŒ์ผ์ด ๋ˆˆ์— ๋ณด์ด๊ฒŒ ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š”๋‹ค. ์ถ”ํ›„์— ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋˜๋ฉฐ, ์•ˆ๋ณด์ด๋Š” ์ •๋ณด๋Š” ํ”„๋กœ์ ํŠธ ๊ทธ ํด๋” ์ชฝ์— ์žˆ๋‹ค.
      • Excutable (ํ•„์ˆ˜) : ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์•ฑ์˜ ๊ธฐ๋ณธ ์ง„์ž…์ ๊ณผ ์•ฑ์˜ ๋Œ€์ƒ์— ์ •์ ์œผ๋กœ ๋งํฌ๋œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ.
      • Resource files : ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์˜ ์ด๋ฏธ์ง€, ์‚ฌ์šด๋“œ, nibํŒŒ์ผ, ๋ฌธ์ž์—ด ํŒŒ์ผ ๋“ฑ์ด ์œ„์น˜ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์„ ํŠน์ • ์–ธ์–ด ๋˜๋Š” ์ง€์—ญ์— ๋Œ€ํ•˜์—ฌ ํ˜„์ง€ํ™”ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ์ง€์—ญ์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ.
      • Other support files : iOS ์•ฑ ๋ฒˆ๋“ค์— ์‚ฌ์šฉ์ž ์ •์˜ ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ํฌํ•จํ•  ์ˆ˜ ์—†์Œ.
    • iOS App Bundle ํŒŒ์ผ์˜ ๊ตฌ์กฐ
      • MyApp (ํ•„์ˆ˜) : ์•ฑ์˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ
      • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์•„์ด์ฝ˜ (ํ•„์ˆ˜/๊ถŒ์žฅ)
      • Info.plist (ํ•„์ˆ˜) : ๋ฒˆ๋“ค ID, ๋ฒ„์ „ ๋ฒˆํ˜ธ ๋ฐ ์•ฑ ํ‘œ์‹œ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ธ€๋งค์˜ ๊ถ์„ฑ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ.
      • Launch Image (๊ถŒ์žฅ)
      • MainWindow.nib (๊ถŒ์žฅ)
      • Settings.bundle : ์„ค์ • ์•ฑ์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์•ฑ ๋ณ„ ํ™˜๊ฒฝ ์„ค์ •์„ ํฌํ•จํ•˜๋Š” ํŠน์ˆ˜ ์œ ํ˜•์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ
      • ์‚ฌ์šฉ์ž ์ง€์ • ๋ฆฌ์†Œ์Šค ํŒŒ์ผ : ์ง€์—ญํ™”๋˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋Š” ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜๋˜๊ณ , ์ง€์—ญํ™”๋œ ๋ฆฌ์†Œ์Šค๋Š” ์•ฑ ๋ฒˆ๋“ค์˜ ์–ธ์–ด๋ณ„ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜ (๋‹จ, iOS App Bundle์€ 'Resource' ๋ผ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํด๋”๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์—†์Œ.)
    • (์ฐธ๊ณ ) https://github.com/jwonyLee/TIL/blob/master/iOS/Interview/AppBundle.md
    • (์ฐธ๊ณ ) https://sihyungyou.github.io/iOS-app-bundle/

 

  • ๋ชจ๋“  View Controller ๊ฐ์ฒด์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์ด๊ณ  ๊ทธ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€?
    • UIViewController๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์—ญํ• ์€ ๋ทฐ์™€ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์— ์‘๋‹ตํ•˜๋ฉฐ, ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜, ์•ฑ์—์„œ ๋‹ค๋ฅธ ViewController๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๊ฐ์ฒด์™€ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ ํฌ๊ธฐ ์กฐ์ • ๋ฐ ์ „์ฒด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ž์‹ ๋งŒ์˜ Custom View๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • xib๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์œผ๋‚˜, ๊ฐœ์ธ์ ์œผ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜‘์—…์—์„œ ์ถฉ๋Œ์ด๋‚˜ ์†๋„ ๋“ฑ ๋ถˆํŽธํ•œ ์ ์ด ๋„ˆ๋ฌด ๋งŽ์•„์„œ ์•„์˜ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋‚˜๋Š” ์ฃผ๋กœ ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ๋กœ Custom View๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•  ๊ฒƒ์ž„.
    • ๊ทธ๋ƒฅ UIView ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ชฝ์— UIViewController์— ์ปค์Šคํ…€๋ทฐ(UIView)์˜ ํ”„๋ ˆ์ž„ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ  addSubView๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. 
    • ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ํ‰์†Œ์— MVVM์œผ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ, View๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ปค์Šคํ…€ ๋ทฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค. 
  • View ๊ฐ์ฒด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • UI์˜ ๊ธฐ๋ณธ๊ตฌ์„ฑ ์š”์†Œ์ด๋‹ค. ํ™”๋ฉด์˜ ์ง์‚ฌ๊ฐํ˜• ์˜์—ญ์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ชจ๋“  ๋ทฐ์— ๊ณตํ†ต์ ์ธ ๋™์ž‘์„ ์ •์˜ํ•œ๋‹ค. ๋ชจ๋“  ๋ทฐ ํด๋ž˜์Šค์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋‹ค. ๋ชจ๋“  ์กฐ์ž‘์€ main thread์—์„œ ํ•ด์•ผํ•œ๋‹ค. ์œ ์ €์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • UIView ์—์„œ Layer ๊ฐ์ฒด๋Š” ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • Layer๋Š” ๋ทฐ์˜ ๋ Œ๋”๋ง์„ ์œ„ํ•˜์—ฌ ๋ทฐ์— ์†ํ•ด ๋ทฐ๋ฅผ ์ง€์›ํ•ด์ฃผ๋Š” CroeAnimation ๊ณ„์ธต์ด๋‹ค. Layer๋Š” ๋ทฐ์˜ ์ปจํ…์ธ ์™€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋‹ด๋‹นํ•œ๋‹ค. UIView๋Š” ๊ฐ์ฒด์— ๋‚˜ํƒ€๋‚˜๋Š” ์ปจํ…์ธ ์˜ layer๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , UIView๋Š” ์ด๋ฏธ์ง€๋‚˜ ์• ๋‹ˆ๋ฉ”์ด์…˜๋“ค์„ ์ง์ ‘ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ , View์—๊ฒŒ ์ž‘์—…์„ ์ฃผ๋ฉด VIew ๋‚ด๋ถ€์˜ Layer๊ฐ์ฒด์—์„œ ์ง์ ‘ ์ˆ˜ํ–‰์„ ํ•œ๋‹ค.
    • UIView๋Š” CALayer๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•˜๊ณ  ์žˆ๋‹ค.
  • UIWindow ๊ฐ์ฒด์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€?
    • UIView๋Š” UIWindow์˜ ๋ถ€๋ชจ์ด๋‹ค.
    • UIWindow๋Š” UI์— backdrop(๋ฐฐ๊ฒฝ)์„ ์ œ๊ณตํ•˜๊ณ , ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ–‰๋™(behaviors)์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
    • Window๋Š” ์ž์‹ ์˜ ์‹œ๊ฐ์  ๋ชจ์Šต์„ ๊ฐ–๊ณ  ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ, ์•ฑ View์˜ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์— ์ค‘์š”ํ•˜๋‹ค. ์Šคํฌ๋ฆฐ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  View๋Š” Window๋กœ ๋ฌถ์—ฌ ์žˆ์œผ๋ฉฐ, ๊ฐ Window๋Š” ์•ฑ์˜ ๋‹ค๋ฅธ View์™€ ๋…๋ฆฝ์ ์ด๋‹ค. ์•ฑ์—์„œ ๋ฐ›์€ ์ด๋ฒคํŠธ๋Š” ํ•ด๋‹น View๊ฐ์ฒด๋กœ ๋ผ์šฐํŒ…๋˜๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ๋Š” ํ•ด๋‹น View๋กœ ์ „๋‹ฌ๋œ๋‹ค.
    • Windows๋Š” ์•ฑ์˜ ๊ธฐ๋ณธ์š”์†Œ์ด์ง€๋งŒ, ์ฝ”๋“œ์—์„œ ์ตœ์†Œํ•œ์˜ ๋ฐฉ์‹์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค.
    • UIKit์€ ๋Œ€๋ถ€๋ถ„์˜ Window๊ด€๋ จ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ๋งŽ์€ ์•ฑ์˜ ํ–‰๋™(behaviors)์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • (์ •๋ฆฌ)
      • ์—ญํ•  : ์•ฑ์˜ ์‹œ๊ฐ์  ์ฝ˜ํ…์ธ ๋ฅผ ๋‹ด์œผ๋ฉฐ, ๋ทฐ๋“ค๊ณผ ๋‹ค๋ฅธ ์•ฑ ๊ฐ์ฒด๋“ค์—๊ฒŒ ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ ๋ณ€ํ™”๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค๊ณผ ํ˜‘๋ ฅํ•œ๋‹ค.
    • (์ฐธ๊ณ ) https://zeddios.tistory.com/283

 

  • UINavigationController ์˜ ์—ญํ• ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • UINavigationController๋Š” ๋„ค๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. LIFO ๋ฐฉ์‹์œผ๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ํ†ตํ•ด ๋ทฐ๋ฅผ ์ด๋™ํ•  ๋•Œ, ์Šคํƒ ๊ตฌ์กฐ๋กœ ์Œ“์ธ๋‹ค.
  • TableView๋ฅผ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ํ™”๋ฉด์— Cell์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” DataSource ๋ฉ”์„œ๋“œ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • // ์„น์…˜์— ํ‘œ์‹œํ•  ํ–‰์˜ ๊ฐœ์ˆ˜
      @available(ios 2.0, *)
      func tableview(_ tableView: UITableView, numberOfRowInSection section : Int) -> Int
      
      @available(ios 2.0, *)
      // ํŠน์ • ์œ„์น˜์— ํ‘œ์‹œํ•  ์…€์„ ์š”์ฒญํ•˜๋Š” ๋ฉ”์„œ๋“œ
      func tableview(_ tableView: UITableView, cellForRowAt indexPath : IndexPath) -> UITableViewCell
       
    • ๋™์ž‘ ๋ฐฉ์‹
      • ์ฒ˜์Œ ์…€์ด awakeFromNib()๋กœ ํ˜ธ์ถœ, ํ™”๋ฉด์— ๋ชจ๋“  ํ•ญ๋ชฉ์„ tableView(_:prefetchRowsAt:indexPath:)๋กœ ํ†ตํ•ด ํ˜ธ์ถœ ํ”„๋ฆฌํŒจ์น˜ ํ™”๋ฉด์ด 10๊ฐœ ์ด์ƒ ํ˜ธ์ถœ๋œ๋‹ค. ๋‹ค์Œ์œผ๋กœ๋Š” cellForRow๋ฅผ ํ˜ธ์ถœ willDisplay ํ˜ธ์ถœ prepareForReuse ํ˜ธ์ถœ
  • ํ•˜๋‚˜์˜ ViewController ์ฝ”๋“œ์—์„œ ์—ฌ๋Ÿฌ TableViewController ์—ญํ• ์„ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปค์Šคํ…€ ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ identifer๋ฅผ ํ†ตํ•ด์„œ delegate ๋ฐ dataSource ๋ถ€๋ถ„์—์„œ if๋ฌธ ํ˜น์€ switch๋ฅผ ํ†ตํ•ด์„œ ํ…Œ์ด๋ธ” ๋ทฐ์˜ ์•„์ด๋””๋‚˜ ํƒœ๊ทธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด์ค€๋‹ค. 
  • setNeedsLayout์™€ setNeedsDisplay์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • (์ •๋ฆฌ) setNeedsLayout()๋ฉ”์†Œ๋“œ์™€ setNeedsDisplay() ๋ฉ”์†Œ๋“œ ๋ชจ๋‘ ํ˜ธ์ถœ ์ฆ‰์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ๋‹ค์Œ update cycle์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ ์šฉ๋œ๋‹ค. setNeedsLayout์€ layoutSubview ๋ฉ”์†Œ๋“œ๋ฅผ setNeedsDisplay๋Š” draw ๋ฉ”์†Œ๋“œ๋ฅผ ์‹œ์Šคํ…œ์ด ํ˜ธ์ถœํ•˜๊ฒŒ๋” ์œ ๋„ํ•œ๋‹ค. setNeedsLayout() ๋ฉ”์†Œ๋“œ๋Š” ๋ชจ๋“  ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ๊ถŒํ•œ์ด main run loop๋กœ ๋Œ์•„์˜ค๋Š” ์‹œ์ ์— view์˜ position์ด๋‚˜ layout์— ๊ด€ํ•œ ๋ฉดํ™”๋ฅผ ์ ์šฉ์‹œํ‚ค๊ณ  setNeedsDisplay() ๋ฉ”์†Œ๋“œ๋Š” ๋‹ค์Œ ๋“œ๋กœ์ž‰ ์‚ฌ์ดํด์ด ์˜ค๋ฉด ๊ทธ๋•Œ ์Œ“์—ฌ์žˆ๋Š” ๊ทธ๋ ค์•ผ ํ•  ์ปจํ…์ธ ๋“ค์„ ๋™์‹œ์— ์ ์šฉ ์‹œํ‚ต๋‹ˆ๋‹ค.
    • (์ฐธ๊ณ ) https://jeongupark-study-house.tistory.com/165
    • (์ฐธ๊ณ ) https://velog.io/@zeke/difference-between-setNeedsLayoutsetNeedsDisplay

 

  • NSCache์™€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์บ์‹œ๋ฅผ ๊ตฌ์„ฑํ–ˆ์„๋•Œ์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ์บ์‹œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š” ๊ณ ์šฉ๋Ÿ‰, ๊ณ ํ™”์งˆ ์ด๋ฏธ์ง€๋ฅผ ๊ณ„์†ํ•ด์„œ ๋‹ค์šด๋กœ๋“œ ํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ„์† ์†Œ๋ชจํ•˜๊ณ , ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋Š”๋ฐ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์šด ๋ฐ›์€ ์ด๋ฏธ์ง€๋ฅผ ์บ์‹ฑํ•ด์„œ ์ €์žฅํ•ด๋‘๊ณ  ๊ทธ ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.
      • NSCache: ์ €์žฅ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋Š” Key-Value ์Œ์„ ์ €์žฅ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋œ๋‹ค. ๋‹ค๋ฅธ ์•ฑ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์บ์‹œ๋˜์–ด ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.
    • ์ฐจ์ด์ 
      • NSDictionary๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ์‹œ์Šคํ…œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›์„ ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•˜์ง€๋งŒ, NSCache๋Š” ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. NSCache๋Š” Thread-Safeํ•˜๋ฉฐ NSDictionary๋Š” Thread-safe ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ ‘๊ทผํ•  ๋•Œ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. NSCache๋Š” Key๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์œ ์ง€ํ•œ๋‹ค.
  • URLSession์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • URLSession์€ iOS์—์„œ ์ œ๊ณตํ•˜๋Š” HTTP๋ฅผ ์ด์šฉํ•œ ๋„คํŠธ์›Œํ‚น์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” API๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. URLSession์€ Thread-Saftyํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์Šค๋ ˆ๋“œ์—์„œ๋“  ์ž์œ ๋กญ๊ฒŒ Session๊ณผ Task๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์ด์‹ฟ.
    • URLSession์€ URLSessionConfiguartion์„ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ์„ธ์…˜์€ ํ•œ๊ฐœ ์ด์ƒ์˜ URLSessionTask๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด์—ฌ ์‹ค์ œ๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • URLSessionConfiguration์€ ์•„๋ž˜์˜ ์„ธ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
      • Default : ๊ธฐ๋ณธ์ ์ธ ๋„คํŠธ์›Œํ‚น ์ •์ฑ…์„ ์‚ฌ์šฉํ•œ๋‹ค.
      • Ephemeral : ์ฟ ํ‚ค์™€ ์บ์‹œ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
      • Background : ์•ฑ์ด background์— ์žˆ์„ ๋•Œ ์ปจํ…์ธ ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ˜น์€ ์—…๋กœ๋“œํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • URLSessionTask ๋˜ํ•œ ์ž‘์—…์— ๋”ฐ๋ผ ์„ธ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • URLSessionTaskDataTask : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ์‚ฌ์šฉํ•œ๋‹ค.
      • URLSessionTaskUploadTask : ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ ์‹œ ์‚ฌ์šฉํ•œ๋‹ค.
      • URLSessionTaskDownloadTask : ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ์‹œ ์‚ฌ์šฉํ•œ๋‹ค.
    • (์ฐธ๊ณ ) https://velog.io/@folw159/iOS-URLSession

 

  • prepareForReuse์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ํ…Œ์ด๋ธ” ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋‹ค. ์žฌ์‚ฌ์šฉ ์…€์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ๊ฐ’์ด ์ดˆ๊ธฐํ™” ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • ๋‹คํฌ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • ๋ฐฉ๋ฒ•์€ ์ •๋ง ๋‹ค์–‘ํ•˜๊ฒ ์ง€๋งŒ, ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ Asset - ColorSet์„ ๋งŒ๋“ค์–ด์„œ Color๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
    • ViewController๋ณ„๋กœ ๋”ฐ๋กœ ๋‹คํฌ๋ชจ๋“œ๋ฅผ ์ง€์›์ด ๊ฐ€๋Šฅํ•œ๋ฐ, overrideUserInterfaceStyle = .dark๋กœ viewDidLoad() ํƒ€์ด๋ฐ์— ํ•ด์ฃผ๊ฑฐ๋‚˜ UIView๋งŒ๋„ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ViewController์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • init : ViewController์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
    • loadView : View๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•œ๋‹ค.
    • ViewDidLoad : view์˜ Controller๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ํ›„ ํ˜ธ์ถœํ•œ๋‹ค. ๋ณดํ†ต ํ™”๋ฉด์ด ํ‘œ์‹œ๋˜๊ธฐ ์ „ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
      • awakeFromNib : nibํŒŒ์ผ์ด๋ž€ xib์™€ ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ Xcode๊ฐ€ ์ปดํŒŒ์ผ ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋Ÿฐํƒ€์ž„ ์‹œ, View๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด nib ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. awakeFromNib์€ nibํŒŒ์ผ์ด ๋กœ๋“œ๋œ ํ›„ ์„œ๋น„์Šคํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์— ํ˜ธ์ถœ๋œ๋‹ค. 
      • (ํ˜ธ์ถœ ์ˆœ์„œ) awakeFromNib - loadView - viewDidLoad
    • viewWillAppear : ๋ทฐ๊ฐ€ ํ‘œ์‹œ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋œ๋‹ค.
    • viewDidAppear : ๋ทฐ๊ฐ€ ํ‘œ์‹œ๋œ ํ›„ ํ˜ธ์ถœ๋œ๋‹ค. ๋ทฐ์— ์ ์šฉํ•  ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ž‘์—…์„ ์ถ”๊ฐ€ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
    • viewWillDisappear : ๋ทฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
    • viewDidDisappear : ๋ทฐ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ ๋‚˜์„œ ํ˜ธ์ถœ
    • viewDidUnload : View๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋œ ํ›„ ํ˜ธ์ถœ
  • TableView์™€ CollectionView์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.
    • TableView : UIScrollView๋ฅผ ์ƒ์† ๋ฐ›๊ณ  ์žˆ์œผ๋ฉฐ, section - row์˜ ๊ตฌ์„ฑ์ด๋ฉฐ section์˜ header์™€ footer๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ColleftionView : ํ…Œ์ด๋ธ” ๋ทฐ์˜ ๊ธฐ๋Šฅ์„ ๋Œ€๋ถ€๋ถ„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ฐจ์ด์ ์€ ๋ ˆ์ด์•„์›ƒ ๊ฐ์ฒด๊ฐ€ ์žˆ์–ด์„œ ์›ํ•˜๋Š” ๋ชจ์–‘์œผ๋กœ ์ปค์Šคํ…€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

'โš ๏ธ deprecated โš ๏ธ > ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป iOSInterviewquestions' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

iOSInterviewquestions - ARC  (0) 2022.04.02
iOSInterviewquestions - Rx  (0) 2022.04.02
iOSInterviewquestions - Swift  (0) 2022.04.02
iOSInterviewquestions - Autolayout  (0) 2022.04.02
Comments