๊ณต๋ถ€ ์—ฐ์Šต์žฅ :-)

TIL_20180718 ~ 20180720

|

2018.07.16 ~ 17

  • ํœด๊ฐ€ํœด๊ฐ€ ๋ฌผ๋†€์ด๋ฌผ๋†€์ด :desert_island:

2018.07.18

  • ์Šคํ† ์–ด์•ฑ
    • ํ…Œ์ด๋ธ”๋ทฐ์— ๋“ค์–ด๊ฐ€๋Š” ์ด๋ฒคํŠธ ๋ฑƒ์ง€๋ฅผ ์œ„ํ•œ UILabel ์ปค์Šคํ…€ ํด๋ž˜์Šค ๊ตฌํ˜„

2018.07.19

TODO

  • URLSession ํ•จ์ˆ˜์—์„œ ํด๋กœ์ € ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ
  • ๋„คํŠธ์›Œํฌ ๊ฐ•์˜๋“ฃ๊ณ  ๋„คํŠธ์›Œํ‚นํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ •๋ฆฌ
  • step4 PR๋ณด๋‚ด๊ธฐ(์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ header์— ๋Œ€ํ•œ ์ •๋ณด๋งŒ ๋ฐ›์•„์˜ค๋ฉด ์—…๋ฐ์ดํŠธ๋˜๋Š” ์‹์œผ๋กœ ํ•˜๊ธฐ..)
  • URLSession ๋น„๋™๊ธฐ์ฒ˜๋ฆฌโ€ฆโ€ฆ.

์งˆ๋ฌธ๊ฑฐ๋ฆฌ

  1. Create a session configuration
  2. Create a session (with delegate)
  3. Create Task object with URL
  4. Send request with closure
  5. Wait for response (background)
  6. Wait and receive for data
  7. Finish or Error by closure

session() - 1,2,3 task๋งŒ๋“ค๊ณ  sessionํ•จ์ˆ˜ ์ข…๋ฃŒ task.resume() - 4,5?? viewDidLoad์ข…๋ฃŒ sessionํ•จ์ˆ˜์˜ taskํด๋กœ์ €์‹คํ–‰- ๋‹ค๋ฅธ thread์—์„œ..-6,7? (mainthread์—์„œ๋Š” viewdidLoadํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋์œผ๋ฏ€๋กœ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€์•Š๋Š”์ค‘) ํด๋กœ์ €์˜ response๋ฐ›๊ณ  ViewController์˜ storeItems ๊ฐ์ฒด์— ๊ฐ’์ด ํ• ๋‹น๋˜๋Š” ๋ธ”๋Ÿญ์—์„œ handler()์‹คํ–‰ ์ด ์ƒํƒœ์—์„œ viewdidLoad๋๋‚˜๋ฉด ๋นˆ ํ…Œ์ด๋ธ”๋ทฐ๋กœ ์ด๋ฏธ ๊ทธ๋ ค์กŒ๊ณ ๊ธฐ๋‹ค๋ฆฌ๋Š”์ค‘์ธ๊ฑด๊ฐ€?

  • viewDidLoad๊ฐ€๋๋‚˜๋ฉด storeItems๊ฐ€ ์—†๋Š” ์ƒํƒœ์—์„œ ํ…Œ์ด๋ธ”๋ทฐ ๊ทธ๋ฆผ
  • ์„ธ์…˜์œผ๋กœ๋ถ€ํ„ฐ storeItems๋ฅผ ๋ฐ›์œผ๋ฉด

2018.07.20

  • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ
    override func viewDidLoad() {
      doSomething1()
      doSomething2()
      resetTableView()
      doSomething3()
    }
    
    private func resetTableView() {
      DispatchQueue.main.async { [weak self] in
          self?.tableView.reloadData()
      }
    }
    // resetTableView๋Š” reloadData๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋๋‚˜๊ณ  ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์™€์ค‘์— reloadData๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์ผ์„ ํ•˜๊ณ ์žˆ์Œ
    // viewDidLoad()์—์„œ resetTableView์•ˆ์˜ reloadData()๊ฐ€ ์™„๋ฃŒ๋˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ doSomething3์ด ์‹คํ–‰๋œ๋‹ค.   
    
  • mainํ(serial queue)์— self?.tableView.reloadData์ฝ”๋“œ๋ธ”๋Ÿญ์„ ๋„ฃ์Œ
  • async๋ผ๋Š” ๋œป์€ resetTableView(): (worker, but ์ผ์„ ์‹œํ‚ค๋Š”)ํ•จ์ˆ˜๋Š” ํ์— ๋„ฃ์€ ์ฝ”๋“œ๋ธ”๋Ÿญ(์ด ๋˜ํ•œ worker์ง€๋งŒ ์ด ๊ด€๊ณ„์—์„œ๋Š” ์ผ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ž„)์ธ self?.tableView.reloadData์ด ์™„๋ฃŒ๋˜๋“ ๋ง๋“  ์‹คํ–‰๋งŒ ์‹œํ‚ค๊ณ (์ผ๋งŒ ์‹œํ‚ค๊ณ )์ข…๋ฃŒ๋˜๊ฒ ๋‹ค๋Š” ๋œป์ž„
  • ์ผ์„ ์ง€์‹œํ•˜๋Š” ์ชฝ๊ณผ ์ง€์‹œ๋ฐ›์€๊ฑธ ์ฒ˜๋ฆฌํ•˜๋Š” ์ชฝ์˜ ๊ด€๊ณ„๋ฅผ ํ•ญ์ƒ ์ƒ๊ฐํ•˜์ž
  • ์ผ์„ ์ง€์‹œํ•˜๋Š” worker(assignor)๊ณผ ์ผ์„ ์ง€์‹œ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” worker(assignee)๋ฅผ ํŽธ์˜์ƒ ์ €๋ ‡๊ฒŒ ๋ถ€๋ฅธ๋‹ค๊ณ  ๊ฐ€์ •
  • Queue๋Š” ์ผ๋‹จ ์ƒ๊ด€์—†์ด .sync๋กœ ํ˜ธ์ถœํ•˜๋Š”์ง€ .async๋กœ ํ˜ธ์ถœํ•˜๋Š”์ง€๋กœ ๊ตฌ๋ถ„ํ•˜์ž.
  • ๋น„๋™๊ธฐ, async: assignor๋Š” assignee์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๊ณ  ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋”ฐ๋ผ์„œ assignor๊ฐ€ ํ•˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ผ๋“ค๊ณผ ํ•จ๊ป˜ ๋ณด๋ฉด ์–ด๋–ค๊ฒŒ ๋จผ์ € ์™„๋ฃŒ๋ ์ง€ ๋ณด์žฅ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋™๊ธฐ, sync: assignor๋Š” assignee์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๊ณ  ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์ด๋•Œ๋Š” assignor๊ฐ€ ํ•˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ผ๋“ค๊ณผ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.
    • ๋‹ค๋งŒ ์ฃผ์˜ํ•  ์ ์€ main queue์—์„œ syncํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ํ•  ๋•Œ์ธ๋ฐ, assignor๊ฐ€ ๋ฉ”์ธํ์—์„œ ๋˜ ๋‹ค๋ฅธ assignee์—๊ฒŒ ๋ฉ”์ธํ์—์„œ syncํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ˜ธ์ถœํ•˜๋ฉด ์„œ๋กœ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ๋งŒ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ๋“œ๋ฝ ์ด๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์Œ.
  • Queue: Concurrent / Serial ํ๋Š” ์ข€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž„
  • serial: ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ, Concurrent: ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ
  • serial์€ ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ด๊ธฐ๋•Œ๋ฌธ์—, ๋ฐ๋“œ๋ฝ ๋ฐœ์ƒ์˜ ์œ„ํ—˜์ด ์žˆ์Œ

Comments