๐ŸŒฑ SeSAC iOS 3๊ธฐ

๐ŸŒฑ 4์ฃผ์ฐจ: ๋„คํŠธ์›Œํฌ ํ†ต์‹ 

Callie_ 2023. 8. 13. 00:44

 

4์ฃผ์ฐจ ๊ธฐ๋ก : ๋„คํŠธ์›Œํฌ ํ†ต์‹ 

 

๐Ÿง ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜?

 

๋”๋ณด๊ธฐ

- alamofire & swfityJSON์„ ์‚ฌ์šฉํ•ด์„œ API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ์‘๋‹ต๋ฐ›๊ธฐ

- key๋ฅผ .gitignore์™€ APIKey ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋”ฐ๋กœ ์ €์žฅํ•˜๊ธฐ (๊นƒํ—™์— ์˜ฌ๋ฆด ๋•Œ ํ‚ค ๋…ธ์ถœ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Œ, ๊ธฐ๋ฐ€์œ ์ง€)

- ๋กœ๋”ฉ๋ฐ” ํ™œ์šฉ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ์ฃผ๊ธฐ => ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ณ  ์žˆ๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ '๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ์–ด~' ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ.

- ์ผ๊ธ‰๊ฐ์ฒด & ํด๋กœ์ € (๋ฌธ๋ฒ•)

- ํ‰๊ฐ€๊ณผ์ œ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•; protocol, userDefaults, singleton

- ๋™๊ธฐ/๋น„๋™๊ธฐ 

 

๐Ÿ”จ ์˜ˆ์ œ

 

๋”๋ณด๊ธฐ

- ์นด์นด์˜ค ๊ฒ€์ƒ‰ API ํ™œ์šฉ

- ๋„ค์ด๋ฒ„ ํŒŒํŒŒ๊ณ  API ํ™œ์šฉ

 

 

๐Ÿ“š ๊ณผ์ œ

 

๋”๋ณด๊ธฐ

- ๋กœ๋˜API๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๋˜ ๋‹น์ฒจ๋ฒˆํ˜ธ ์ผ๊ณฑ์ž๋ฆฌ ๋ฝ‘์•„๋‚ด๊ธฐ. (UIPickerView, textfield๋ฅผ ํ”ฝ์ปค๋กœ ์‚ฌ์šฉํ•จ)

- bookwarm ํ”„๋กœ์ ํŠธ ์นด์นด์˜ค API ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ฑ… ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ. 

- ๋žœ๋ค๋งฅ์ฃผAPI๋ฅผ ์ด์šฉํ•ด์„œ ๋งฅ์ฃผ ์ถ”์ฒจํ™”๋ฉด ๋งŒ๋“ค๊ธฐ. (viewController๋กœ ๋‹จ์ˆœํžˆ ๋งŒ๋“ค๊ธฐ, tableView ์ถ”๊ฐ€ํ•ด์„œ ๋งŒ๋“ค๊ธฐ)

- ๋„ค์ด๋ฒ„ ํŒŒํŒŒ๊ณ  API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๊ธฐ๋Šฅ ๋งŒ๋“ค์–ด๋‚ด๊ธฐ. (์ˆ˜์—…์—์„œ ํ–ˆ๋˜ ๊ฒƒ์—์„œ ์–ธ์–ด๊ธฐ๋Šฅ API ์ถ”๊ฐ€ํ•ด์„œ ๊ธฐ๋Šฅ ๊ฐœ์„ )

 

 

๐Ÿ’ฆ ๋ณต๊ธฐ

 

โœ”๏ธ [๋ณต์Šต] tableView๋‚˜ collectionView๋ฅผ XIB ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด ์“ฐ๋Š” ๊ณผ์ œ๋ฅผ ๋๋‚ด๊ณ  XIB ์—†์ด viewController์— ์“ฐ๋ ค๊ณ  ํ•˜๋‹ˆ ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ์œผ๋กœ cellํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์—ฐ๊ฒฐ ํ•˜๋Š” ๊ฑธ ๊นŒ๋จน๊ณ  ๋ทฐ์ปจ์— ์•„์šธ๋ ›์„ ์—ฐ๊ฒฐํ•˜๋ ค ํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— xcode ์˜ค๋ฅ˜์ธ๊ฐ€ ์‹ถ์–ด์„œ ์• ๊ฟŽ์€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ๋งŒ ๋ฐ€๊ณ  ๋‹ค์‹œ ๋งŒ๋“œ๋А๋ผ ์‹œ๊ฐ„๋„ ๊นŒ๋จน์–ด์„œ ๊ฐ™์€ ์‹ค์ˆ˜ ๋‘ ๋ฒˆ์€ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋‚จ๊ธฐ๊ธฐ.

 

 

** XIB ํŒŒ์ผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜์„ ๋•Œ tableViewCell ์—ฐ๊ฒฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

1. ํ…Œ์ด๋ธ” ๋ทฐ ์„ ํƒ

 

 

 

 

 

2. ์…€ ํด๋ž˜์Šค ์ด๋ฆ„ ์—ฐ๊ฒฐ

 

 

 

3. identifier ์žŠ์ง€ ์•Š๊ณ  ์ง€์ •ํ•ด์ฃผ๊ธฐ.

 

 

 

4. ViewController ์˜์—ญ์œผ๋กœ ๋„˜์–ด์™€์„œ ์…€ ์—ฐ๊ฒฐ ์ง€์–ด์ฃผ๊ธฐ. ๋!

 

 

 

 

** (์ถ”๊ฐ€) XIB ํŒŒ์ผ ์ƒ์„ฑํ•ด์„œ tableViewCell ์—ฐ๊ฒฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

1. ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ํ…Œ์ด๋ธ”๋ทฐ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ.

- ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ์— ํ…Œ์ด๋ธ”๋ทฐ ์—ฐ๊ฒฐ๋„ ์žŠ์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ํ•ด์ฃผ๊ธฐ.

 

 

 

 

2. XIB ํŒŒ์ผ์„ ์ฒดํฌํ•œ ์ฑ„๋กœ TableViewCell ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ธฐ

 

 

3. ์…€ ์ด๋ฆ„ + identifier ์„ค์ • 

 

๋ณดํ†ต XIB ํŒŒ์ผ๋กœ ๋งŒ๋“ค๋ฉด ์ž๋™์™„์„ฑ ๋˜์–ด ์žˆ์ง€๋งŒ, ํ˜น์‹œ ๋ชจ๋ฅด๋‹ˆ ํ™•์ธ ํ•ด์ฃผ๊ธฐ.

 

 

 

identifier๋Š” ์ง์ ‘ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด cellํŒŒํŠธ์—์„œ ํ•  ์ผ์€ ๋.

 

 

 

4. ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์ฝ”๋“œ๋กœ ์…€ ์—ฐ๊ฒฐํ•˜๊ธฐ

 

    override func viewDidLoad() {
        super.viewDidLoad()
        
        trendingTableView.dataSource = self //ํ…Œ์ด๋ธ”๋ทฐ ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ
        trendingTableView.delegate = self //ํ…Œ์ด๋ธ”๋ทฐ ์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ

	//์…€ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ
        let nib = UINib(nibName: "TrendingTableViewCell", bundle: nil)
        trendingTableView.register(nib, forCellReuseIdentifier: "TrendingTableViewCell")
        
        
 }

 

UINib๊ณผ register ํ‚ค์›Œ๋“œ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

5.

 

extension TrendingViewController: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "TrendingTableViewCell") as! TrendingTableViewCell
        
        }
        
        return cell
    }

 

์—ฐ๊ฒฐ๋œ ์…€์€

let cell = tableView.dequeueReusableCell(withIdentifier: "TrendingTableViewCell") as! TrendingTableViewCell

์„ cellForRowAt์— ์จ์ฃผ๋ฉด ๋นŒ๋“œํ–ˆ์„ ๋•Œ ์…€์ด ์ž˜ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด์ œ ์ถ”๊ฐ€ํ•œ UI ๊ธฐ๋Šฅ๋“ค์€ tableView์ฒ˜๋Ÿผ extension์œผ๋กœ ์“ธ ์ค„ ์•Œ์•„์„œ ํŽธํ•˜๋‹ค.

 

(+) ํ…Œ์ด๋ธ”๋ทฐ๋Š” ๋”ฐ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋“ฏ. ์ด๊ฑธ ๋ชจ๋ฅด๊ณ  ์ปฌ๋ ‰์…˜๋ทฐ ๋ ˆ์ด์•„์›ƒ ์žก๋“ฏ ์žก๋‹ค๊ฐ€ tableViewLayout์ด ์—†์–ด์„œ ๋‹นํ™ฉํ–ˆ๋‹ค.

 

 

 

 

 


 

 

 

โœ”๏ธ  Alamofire์™€ SwiftyJSON ์‚ฌ์šฉํ•ด์„œ API ํ†ต์‹  ํ•˜๊ธฐ โญ๏ธโญ๏ธ

 

 

1. import ํ•˜๋Š” ๊ฒŒ ์ฒซ ์ˆœ์„œ์ผ ํ•„์š”๋Š” ์—†์ง€๋งŒ, ์—๋Ÿฌ ํ‘œ์‹œ์ค„๋งŒ ๋ณด๋ฉด ์‹์€๋•€์ด ๋‚˜์„œ Alamofire์™€ SwiftyJSON์„ ์‚ฌ์šฉํ•ด์•ผํ•  ๋• ๋จผ์ € import๋ถ€ํ„ฐ ํ•ด์ค€๋‹ค.

 

 

 

2. Alamofire + SwiftyJSON ๊ตฌ์กฐ ์ดํ•ด.

 

  • - AF๋Š” Alamofire ์•ฝ์ž์ธ๋ฐ, ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์“ฐ๊ณ ์ž ์—…๋ฐ์ดํŠธ ๋จ.
  • - url์ด ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ์–ด์„œ, ๋‚ด๊ฐ€ ์“ฐ๊ณ ์ž ํ•˜๋Š” API๋ฅผ let url = "๋งํฌ"๋กœ ์„ ์–ธํ•ด์ฃผ์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. (์—๋Ÿฌ ๋‚˜์˜ด)
  • - Switch ๋ฌธ์„ ๋ณด๋ฉด, .success ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ์ž˜ ๋˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ. .failure ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ํ†ต์‹ ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ.
  • - json์€ API๊ฐ€ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— json[ ] ํ˜•์‹์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค (ex. . ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— insomnia์—์„œ {์ค‘๊ด„ํ˜ธ} ํ™•์ธ์„ ์ž˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • - ๊ฐ€์ ธ์˜จ ๊ฐ’ [ ] ๋’ค์—๋Š” .์„ ์ฐ๊ณ  stringValue์ธ์ง€, intValue์ธ์ง€ ๋“ฑ์„ ์ž˜ ํ™•์ธํ•˜๊ณ  ๋ถ™์—ฌ์ฃผ๊ธฐ. 
  • - insomnia์—์„œ ๋ฏธ๋ฆฌ ๋“ค์—ฌ์“ฐ๊ธฐ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Œ€์‹  ์‚ฌ์šฉํ•  ๋• API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์ดํŠธ์—์„œ ํ•„์ˆ˜์กฐ๊ฑด์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ํ™•์ธํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ API ๋ฐ›์•„์˜ค๋Š” ์˜ต์…˜์„ ๋ญ๋กœ ์ •ํ•ด๋†“์•˜๋Š”์ง€๋„. (๊ธฐ์–ตํ•˜์ž ๋„ค์ด๋ฒ„ ์–ธ์–ด๊ฐ์ง€ API๋ฅผ...๐Ÿ”ช) ๋ณดํ†ต parameters์™€ header, ์•”ํ˜ธํ‚ค๋งŒ ์ž˜ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ฉ”์†Œ๋“œ๋ž‘!
  • - validate์€ ํ†ต์‹  ์ƒํƒœ๋ฅผ ๋„˜๋ฒ„๋กœ ๋‚˜ํƒ€๋‚ธ๊ฑด๋ฐ 200๋ฒˆ๋Œ€๊ฐ€ ์—ฐ๊ฒฐ์ƒํƒœ ์–‘ํ˜ธ, 400๋ฒˆ๋Œ€๊ฐ€ ์˜ค๋ฅ˜. ๊ทธ 404๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.

 

 

๊ตฌ์กฐ ์ฐธ๊ณ  :

    func callRequest() {
        
        let url = "https://์˜ˆ์‹œ.์˜ˆ์‹œ.์˜ˆ์‹œ/์˜ˆ์‹œ"
        
        AF.request(url, method: .get).validate().responseJSON { response in
            switch response.result {
            case .success(let value): // ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์ด ์ž˜ ๋˜๋Š” ์ค‘
                let json = JSON(value)
                print("JSON: \(json)")
             
                    
                }
               
                
            case .failure(let error): // ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์‹คํŒจ!
                print(error)
            }
        }
        
    }

 

 


 

 

 

โœ”๏ธ  HTTPS ๋ง๊ณ  HTTP url์„ ๊ฐ€์ ธ์™”๋Š”๋ฐ ๋ณด์•ˆ ์˜ค๋ฅ˜ ๋œฐ ๋•Œ?

 

 

์ด๋ ‡๊ฒŒ info์—์„œ ์„ค์ •์„ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑธ ํ•ญ์ƒ ํ•ด์ค˜์•ผํ•˜๋Š”์ง€, Alamofire + SwiftyJSON ์“ธ ๋• ์ƒ๋žตํ•ด๋„ ๋˜๋Š”์ง€ ์ฐพ์•„๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์ผ๋‹จ์€ ๊ทธ๋ƒฅ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ์„ค์ •ํ•˜๊ณ  ์žˆ๋Š” ์ค‘..

 

 

 


 

 

 

 

โœ”๏ธ  ๋„คํŠธ์›Œํฌ ๐Ÿฆˆ

 

  • ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์ด๋ผ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์žˆ์–ด์•ผ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ํ•œ๋‹ค. (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฒ€์ƒ‰ ๋“ฑ์„ ํ•œ๋‹ค. โ†’ ์„œ๋ฒ„๊ฐ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.)
  • HttpMethod : Get, Post, Put, Delete (์š”์ฒญ์ด ์ด ๋„ท ์ค‘ ๋ฌด์—‡์ธ์ง€ ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋ถ„ํ•ด์„œ ๋งž๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.)
  • ์ธ์ฆํ‚ค (์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ํ•  ๋•Œ ์ธ์ฆํ‚ค๋ฅผ ์š”๊ตฌํ•ด์„œ (์‚ฌ์ „์ค€๋น„) ๊ฒ€์ฆ๋œ ์ž์—๊ฒŒ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์ค€๋‹ค.  ์„œ๋ฒ„ ๋ฐ”๋ณด ์•„๋‹˜.)
  • API = ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์ง‘๊ณ„๋œ ์‚ฌ์ดํŠธ.
  • URLSession :  API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ์ด ์ œ๊ณตํ•ด์ฃผ๋Š” URL

 

 


 

 

โœ”๏ธ ๋ฌธ๋ฒ•

 

* ์ผ๊ธ‰๊ฐ์ฒด (First Class Object) ์ด๋ฆ„ ์œ ๋ž˜๋งŒ ๊ธฐ์–ต๋‚˜์„œ ์ผ๋‹จ ๊ฐœ๋…๋งŒ ์ •๋ฆฌ

 

 - ๋ณ€์ˆ˜/์ƒ์ˆ˜๋‚˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋‚ด์— ์ž๋ฃŒํ˜• ์ €์žฅ

 

func rookieDraftBaseball (team : String) -> Bool {
    let teamArray = ["๊ธฐ์•„ ํƒ€์ด๊ฑฐ์ฆˆ","ํ•œํ™” ์ด๊ธ€์Šค","์ผ€์ดํ‹ฐ ์œ„์ฆˆ"]
    return teamArray.contains(team) ? true : false
} //1. ์ž๋ฃŒํ˜• ํ•จ์ˆ˜ ์ƒ์„ฑ

let pickTeam = rookieDraftBaseball //2. ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋Œ€์ž…

pickTeam("๊ธฐ์•„ ํƒ€์ด๊ฑฐ์ฆˆ") // true
pickTeam("์—˜์ง€ ํŠธ์œˆ์Šค") // false

 

๋งŒ๋“  ํ•จ์ˆ˜์‹์„ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹.

 

(+) ํ•จ์ˆ˜๋ช…์ด ๊ฐ™์œผ๋ฉด ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜ ํ•„์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ๊นŒ์ง€ ๊ฐ™์œผ๋ฉด ํ•จ์ˆ˜ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํƒ€์ž…์–ด๋…ธํ…Œ์ด์…˜ ์ƒ๋žตํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ.

 

 - ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉ

 

func yesPostSeaon () -> String {
    return "๊ฐ€์„์•ผ๊ตฌ ์ง„์ถœ"
}

func noPostSeason () -> String {
    return "๊ฐ€์„์•ผ๊ตฌ ํƒˆ๋ฝ"
}

func forPostSeaon (team : String) -> () -> String {
    let teamArray = ["๊ธฐ์•„ ํƒ€์ด๊ฑฐ์ฆˆ","ํ•œํ™” ์ด๊ธ€์Šค","์ผ€์ดํ‹ฐ ์œ„์ฆˆ"]
    return teamArray.contains(team) ? yesPostSeaon : noPostSeason
}

let call = forPostSeaon(team:"๊ธฐ์•„ ํƒ€์ด๊ฑฐ์ฆˆ")
call() // ๊ฒฐ๊ณผ๊ฐ’: "๊ฐ€์„์•ผ๊ตฌ ์ง„์ถœ"

 

์ œ์ผ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” -> ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ์ด ๋ฐ˜ํ™˜๊ฐ’์„ ์˜๋ฏธ.

 

func forPostSean (team : String) -> () -> String

 

๋ฆฌํ„ด๋˜์–ด ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜๋Š” ์ฆ‰ ์˜ค๋ฅธ์ชฝ ๋ฐ˜ํ™˜๊ฐ’.

 

 

 - ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ’์œผ๋กœ ์ž๋ฃŒํ˜•์„ ์ „๋‹ฌ

 

์€... ์ผ๋‹จ ๋ณด๋ฅ˜. ์ˆ˜์‹๊ณผ ๊ด€๋ จ๋œ ์ „๋‹ฌ๋ฐฉ๋ฒ•๊ฐ™์€๋ฐ ๋ณด๋ฉด ๋ณผ์ˆ˜๋ก ํ—ท๊ฐˆ๋ฆฐ๋‹ค. string์„ int๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”.. ๊ฑด๊ฐ€? ์•„๋ฌด๋ž˜๋„ ๊ฐ€์žฅ ํด๋กœ์ € ๊ฐœ๋…์ด๋ž‘ ๋น„์Šทํ•ด์„œ ์•ˆ ์™€๋‹ฟ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜์ค‘์— ๋ณด๊ฐ•ํ•˜๊ธฐ.

 

 

 

 

 


 

 

 

โœ”๏ธ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

 

๐Ÿ”– ํ•˜๋“œ์บ๋ฆฌํ•˜๋Š” ๋‹ญ ์•Œ๋ฐ”์ƒ ์ƒ๊ฐํ•˜๊ธฐ

 

- ๋™๊ธฐ (Sync): Queue(๋งค๋‹ˆ์ €)์— ๋“ค์–ด๊ฐ„ ์ž‘์—…์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ(๋‹ญ)์ด ๋‹ค์Œ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒฝ์šฐ.

- ๋น„๋™๊ธฐ(Async): ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ task๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋˜ ๊ฑธ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋“ค๊ณผ ์—ญํ•  ๋ถ„๋‹ด์„ ํ•œ๋‹ค (- >concurrent). (ํ์—๊ฒŒ ๋ณด๋‚ด๋†“๊ณ  ๋ฐ”๋กœ ๋‹ค์Œ ์ž‘์—…ํ• ๊ฒŒ~ task 1,2๋ฅผ ์ฃผ๋ฉด task3๋ฅผ ๋ฐ”๋กœ ์‹œ์ž‘)

 

- ํ(queue)๋Š” task๋ฅผ ๋ถ„๋ฐฐํ•˜๋Š” ์—ญํ• .

 

๋™์ž‘ ๊ตฌ์กฐ:

- ํ๊ฐ€ ๋ถ„๋ฐฐ๋ฅผ ํ•˜๊ธด ํ•˜๋Š”๋ฐ ๊ฑฐ์˜ ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ์— ๋ชฐ์•„์ค€๋‹ค = ์ง๋ ฌ (serial)

- ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋“ค์— ๊ณจ๊ณ ๋ฃจ ๋ถ„๋ฐฐํ•ด์ฃผ๋Š” ๊ฒƒ : concurrent (global)

 

- dispatchQueue + main (serial๋กœ ๋™์ž‘)/ global (concurrent๋กœ ๋™์ž‘) : ์ž๋ฃŒ ํ†ต์‹ ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

- ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ: global.syncโ†’ ๊ฒฐ๊ตญ์—” ๋ฉ”์ธ์ด ์ผ์„ ํ•จ, main.async โ†’ ํ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ๋ชปํ•จ.

 

- global.async์˜ ์žฅ์ :

  1. ๋” ๋นจ๋ฆฌ ๋๋‚œ๋‹ค.
  2. ์–ด๋–ค ์ž‘์—…์ด ์–ธ์ œ ๋๋‚ ์ง€ ๋ชจ๋ฅธ๋‹ค. (๊ทธ๋ž˜๋„ ์–ธ์  ๊ฐ„ ๋๋‚˜๊ธด ๋๋‚จ)

 

 

์š”์•ฝ:

 

main.async โ†’ UI update

global.async โ†’ network ๋‹ด๋‹น

 

 

 

 

 

 

 

 


 

 

 

์ธ์ƒ์—์„œ ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•œ์ง€ ํ•œ๋‹ฌ ์ฐจ์˜ ๋‚˜:

 

๋ฌธ๋ฒ• !!!! ์‘์šฉ !!!! ๋ฆฌํŒฉํ† ๋ง !!! ์ถฉ๋ถ„ํ•œ ์—ฐ...์Šต...