[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 12์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
Navigation Controller vs Root View Controller iOS ์•ฑ ๊ฐœ๋ฐœ์—์„œ root view controller์™€ navigation controller๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.Root View Controller๋Š” ์•ฑ ์‹คํ–‰ ์‹œ UIWindow์— ๊ฐ€์žฅ ์ฒ˜์Œ ์„ค์ •๋˜๋Š” ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ๋จผ์ € ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด์ด๋ฉฐ, ์•ฑ์˜ ์ง„์ž…์ ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.๋ณดํ†ต UINavigationController๋‚˜ UITabBarController์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ root view controller๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” Navigation Controller๊ฐ€ ๋ฃจํŠธ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ , ๊ทธ ๋‚ด๋ถ€์— ์‹ค์ œ ํ™”๋ฉด์„ ๋‹ด๋‹นํ•  View Controller๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 11์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
JSON ๋””์ฝ”๋”ฉ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ iOS ์•ฑ ๊ฐœ๋ฐœ ์ค‘ URLSession๊ณผ JSONDecoder๋ฅผ ์ด์šฉํ•˜์—ฌ API๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํŒŒ์‹ฑํ•  ๋•Œ, ํ”ํžˆ ๋งˆ์ฃผ์น˜๋Š” ์—๋Ÿฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ๐Ÿ”ง ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1: do-catch๋ฅผ ์‚ฌ์šฉํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌlet decoder = JSONDecoder()do { let decodedData = try decoder.decode(MovieData.self, from: JSONdata) // decodedData ํ™œ์šฉ} catch { print("Decoding failed with error: \(error)")} ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด JSON ํŒŒ์‹ฑ์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ์—๋„ ์•ฑ์ด ํฌ๋ž˜์‹œ ์—†์ด ๋™์ž‘ํ•˜๋ฉฐ, ์‹คํŒจ ์›์ธ์„ ๋กœ๊ทธ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿงน ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 10์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
์ž‘์„ฑ์ผ์ž(250507) ๊ธฐ์ค€ ์˜ํ™”์ง„ํฅ์œ„์›ํšŒ ๋ฐ•์Šค์˜คํ”ผ์Šค ์ˆœ์œ„ Table View, Auto Layout Constraints ํ”„๋กœํ† ์ฝœ์„ ์„ ์–ธ, ์š”๊ตฌ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ฏธ๊ตฌํ˜„ ์˜ค๋ฅ˜ UITableView์˜ delegate์™€ dataSourcetable.dataSource = selftable.delegate = self ์ด ๋‘ ์ค„์€ UITableView๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ•˜๊ณ , ์‚ฌ์šฉ์ž ๋ฐ˜์‘์— ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ• ์ง€๋ฅผ ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์ฝ”๋“œ๋‹ค.dataSourceํ…Œ์ด๋ธ”์— ๋ฌด์—‡์„ ์–ผ๋งˆ๋‚˜ ๋ณด์—ฌ์ค„์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์—ญํ• .์˜ˆ: ๋ช‡ ์ค„์ธ์ง€, ๊ฐ ์…€์— ์–ด๋–ค ํ…์ŠคํŠธ๋ฅผ ๋„ฃ์„์ง€.delegate์‚ฌ์šฉ์ž์˜ ํ–‰๋™์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ ์ฒ˜๋ฆฌ.์˜ˆ: ์…€์„ ๋ˆŒ๋ €์„ ๋•Œ ์–ด๋–ค ๋™์ž‘์„ ํ• ์ง€ ์ง€์ •.self๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ด์œ ViewController๊ฐ€ ์ง์ ‘ ์ด ๋‘ ์—ญํ• ์„..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 9์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
๐ŸŒ API๋ž€ ๋ฌด์—‡์ธ๊ฐ€?์›น ๊ฐœ๋ฐœ์ด๋‚˜ ์•ฑ ๊ฐœ๋ฐœ์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์šฉ์–ด, API.๋งŽ์ด ๋“ค์–ด๋ดค์ง€๋งŒ ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๊ณ , ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.๐Ÿ”ง API๋ž€?API (Application Programming Interface)๋Š”์†Œํ”„ํŠธ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์—ฐ๊ฒฐ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ **ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋Œ€ํ™”ํ•˜๋Š” ๋„๊ตฌ๊ฐ€ UI(User Interface)**๋ผ๋ฉด,ํ”„๋กœ๊ทธ๋žจ๋ผ๋ฆฌ ๋ฐ์ดํ„ฐ๋‚˜ ๊ธฐ๋Šฅ์„ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ์ฐฝ๊ตฌ๊ฐ€ API์ž…๋‹ˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, ์˜ํ™”์ง„ํฅ์œ„์›ํšŒ(KOBIS)์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ํ™” ์ˆœ์œ„ ์ •๋ณด๋ฅผ ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด,์•ฑ์€ KOBIS ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ์š”์ฒญ(Request)์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์‘๋‹ต(Response)์œผ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.์ด ์ „์ฒด ํ๋ฆ„์„ ๋‹ด๋‹นํ•˜๋Š”..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 7์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
UITableViewCell.CellStyleUITableView๋Š” iOS ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํŠนํžˆ UITableViewCell์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ์…€์˜ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๋Š” UITableViewCell.CellStyle ์—ด๊ฑฐํ˜•(enum)์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ์ œ๊ณตํ•ด ์‚ฌ์šฉ์„ฑ ๋†’์€ UI๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค. ๐Ÿ“Œ UITableViewCell.CellStyle์ด๋ž€?UITableViewCell.CellStyle์€ UITableViewCell์˜ ์ฝ˜ํ…์ธ  ๋ฐฐ์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ์—ด๊ฑฐํ˜•์ž…๋‹ˆ๋‹ค. Apple ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด, ์ด ์—ด๊ฑฐํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํƒ€์ผ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:defaultsubtitlevalue1value2์ด๋“ค ๊ฐ๊ฐ์€ textLabel๊ณผ d..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 6์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
Swift ์˜ต์…”๋„ ์ฒด์ด๋‹ (Optional Chaining)Swift์—์„œ ์˜ต์…”๋„ ์ฒด์ด๋‹์€ ์˜ต์…”๋„ ๊ฐ’์˜ ์†์„ฑ, ๋ฉ”์„œ๋“œ, ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•ˆ์ „ํ•œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ?๋ฅผ ํ†ตํ•ด ์ค‘์ฒฉ๋œ ์˜ต์…”๋„ ๊ตฌ์กฐ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ๐Ÿ”“ ์˜ต์…”๋„ ์–ธ๋ž˜ํ•‘ ๋ฐฉ์‹ ๋น„๊ตvar x: String? = "Hi"1. ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘ (x!) → โŒ ์œ„ํ—˜, nil์ด๋ฉด crash2. ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ (if let) → โœ… ์•ˆ์ „3. nil ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž (??) → โœ… ๊ธฐ๋ณธ๊ฐ’ ์ œ๊ณต4. ์˜ต์…”๋„ ์ฒด์ด๋‹ (x?.count) → โœ… ๊ฐ€์žฅ ๊ฐ„๊ฒฐํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•let b = x?.count // Optional(2)๐Ÿค– Optional Chaining์ด๋ž€?cell.textLabel?.texttextLabel์€ UI..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 5์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
Delegate์™€ DataSource ์‚ฌ์šฉ UI ์ปดํฌ๋„ŒํŠธ ์ •๋ฆฌUI ์ปดํฌ๋„ŒํŠธDelegate ์‚ฌ์šฉDelegate ์„ค๋ช…UITableViewO์…€ ์„ ํƒ, ํŽธ์ง‘, ๊ณ ์ • ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜๊ณผ ํ…Œ์ด๋ธ” ๋ทฐ ์‹œ๊ฐ์ ์ธ ๋ณ€ํ™” ๊ด€๋ฆฌUICollectionViewO์…€ ์„ ํƒ, ํŽธ์ง‘, ๋ ˆ์ด์•„์›ƒ ๋ณ€ํ™˜ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜๊ณผ ๋ทฐ์˜ ์‹œ๊ฐ์ ์ธ ๋ณ€ํ™” ๊ด€๋ฆฌUIPickerViewO๊ฐ ์ปดํฌ๋„ŒํŠธ(์—ด)์˜ ์„ ํƒ๋œ ํ•ญ๋ชฉ์„ ๊ด€๋ฆฌUIScrollViewO์Šคํฌ๋กค ์ด๋ฒคํŠธ, ํ™•๋Œ€/์ถ•์†Œ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ด€๋ฆฌUIPageViewControllerOํŽ˜์ด์ง€ ์ „ํ™˜๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ด€๋ฆฌUISearchBarOํ…์ŠคํŠธ ๋ณ€๊ฒฝ, ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ ํด๋ฆญ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ด€๋ฆฌUITextViewOํ…์ŠคํŠธ ๋ณ€๊ฒฝ, ์ž…๋ ฅ ์‹œ์ž‘/์ข…๋ฃŒ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ๊ด€๋ฆฌUITextFieldOํ…์ŠคํŠธ ํ•„๋“œ์˜ ๋ณ€..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 4์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
ViewController.swift ๊ธฐ๋ณธ ๊ตฌ์กฐXcode๋กœ ์ƒˆ iOS ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ViewController ์ฝ”๋“œ๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ํ›„ ์‹คํ–‰๋˜๋Š” ์ดˆ๊ธฐ ์„ค์ • ์œ„์น˜ }} ํ•ต์‹ฌ ํฌ์ธํŠธimport UIKit: iOS UI๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ํ”„๋ ˆ์ž„์›ŒํฌUIViewController: ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ๊ธฐ๋ณธ ํด๋ž˜์ŠคviewDidLoad(): ๋ทฐ๊ฐ€ ์ฒ˜์Œ ๋กœ๋“œ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ. ์ดˆ๊ธฐ UI ์„ค์ •์ด๋‚˜ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์— ์‚ฌ์šฉ   iOS ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ – configur..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 3์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
Xcode ํ”„๋กœ์ ํŠธ ์„ค์ • ์ฃผ์š” ํ•ญ๋ชฉ Minimum Deployments:iOS ๋ฒ„์ „: ์•ฑ์˜ ์ตœ์†Œ ์ง€์› ๋ฒ„์ „์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” iOS 16.0 ์ด์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.Identity:App Category: ์•ฑ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, ์ด ๊ฒฝ์šฐ "None"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.Display Name: ์•ฑ์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ํ™•์ธํ•  ๋•Œ ๋ณด๊ฒŒ ๋˜๋Š” ์ด๋ฆ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.Bundle Identifier: ์•ฑ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. Version: ์•ฑ์˜ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ "1.0"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.Build: ์•ฑ์˜ ๋นŒ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ, ํ˜„์žฌ๋Š” ๋นŒ๋“œ 1๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.Deployment Info:iPhone Orientation:..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 2์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
์˜ต์…”๋„(Optional) ํƒ€์ž…Swift์—์„œ๋Š” ๊ฐ’์ด ์—†์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜ต์…”๋„(Optional) ํƒ€์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.1. ์˜ต์…”๋„์ด๋ž€?์˜ต์…”๋„์€ ๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ nil์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.2. ์˜ต์…”๋„ ์„ ์–ธ ๋ฐฉ๋ฒ•์˜ต์…”๋„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ ค๋ฉด ํƒ€์ž… ๋’ค์— ?๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค.var index: Int? // index๋Š” Int ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , nil์ด ๋  ์ˆ˜๋„ ์žˆ์Œ3. ์˜ต์…”๋„ ๊ฐ’์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์˜ต์…”๋„ ํƒ€์ž…์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์˜ต์…”๋„์„ ํ•ด์ œ(Unwrapping) ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.1) ๊ฐ•์ œ ์–ธ๋ž˜ํ•‘ (Forced Unwrapping)!๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ•์ œ๋กœ ๊ฐ’์„ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๊ฐ’์ด nil์ผ ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹ค๋ฌด 1์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
์•ฑ ๊ฐœ๋ฐœ ๊ธฐ์ˆ  ์ •๋ฆฌ1. Native ์•ฑ ๊ฐœ๋ฐœ์•ˆ๋“œ๋กœ์ด๋“œ (Android)์‚ฌ์šฉ ์–ธ์–ด: Java, KotliniOS์‚ฌ์šฉ ์–ธ์–ด: Swift, Objective-C2. Cross Platform (ํฌ๋กœ์Šค ํ”Œ๋žซํผ)ํ•œ ๋ฒˆ ๊ฐœ๋ฐœํ•˜์—ฌ ์—ฌ๋Ÿฌ ์šด์˜์ฒด์ œ(Android, iOS)์—์„œ ์‹คํ–‰ ๊ฐ€๋ŠฅReact NativeFlutter (Dart ์‚ฌ์šฉ)3. Hybrid ์•ฑ ๊ฐœ๋ฐœ์›น ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•œ ์•ฑ ๊ฐœ๋ฐœ ๋ฐฉ์‹WebView ๊ธฐ๋ฐ˜ ์›น์‚ฌ์ดํŠธ ์•ฑ์‚ฌ์šฉ ๊ธฐ์ˆ : HTML, CSS, JavaScriptApache Cordova4. ๊ธฐํƒ€ ๊ธฐ์ˆ  ๋ฐ ํŠธ๋ Œ๋“œStack Overflow ํŠธ๋ Œ๋“œ: Flutter์˜ ์ธ๊ธฐ๊ฐ€ React Native๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ์ถ”์„ธFirebase: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค ์ œ๊ณตReactiveX: ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ API..
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ดˆ 14์ฃผ์ฐจ ์ •๋ฆฌ
ยท
Study/iOS
ํด๋กœ์ €๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ดํด๋กœ์ €(Closure)๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ 1๊ธ‰ ์‹œ๋ฏผ(First-Class Citizen)์ธ ์–ธ์–ด์—์„œ ํ”ํžˆ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ํด๋กœ์ €๋ฅผ ์ง€์›ํ•˜๋Š” ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค:1. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ดHaskell: ์™„์ „ํ•œ ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๋กœ ํด๋กœ์ €๋ฅผ ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์›.Scala: ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋ฉฐ ํด๋กœ์ € ์‚ฌ์šฉ ๊ฐ€๋Šฅ.Clojure: ์ด๋ฆ„ ์ž์ฒด๊ฐ€ ํด๋กœ์ €์—์„œ ์œ ๋ž˜. ํด๋กœ์ €๊ฐ€ ๊ธฐ๋ณธ ์ œ๊ณต.OCaml: ํด๋กœ์ €๋ฅผ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ํŠน์„ฑ์œผ๋กœ ์ œ๊ณต.F#: ํ•จ์ˆ˜ํ˜• ๋ฐ ๋ช…๋ นํ˜• ํŒจ๋Ÿฌ๋‹ค์ž„ ํ˜ผํ•ฉ, ํด๋กœ์ € ์ง€์›.2. ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ดJavaScript: ํด๋กœ์ €๋ฅผ ์™„์ „ํžˆ ์ง€์›ํ•˜๋ฉฐ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋‚˜ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ž์ฃผ ์‚ฌ์šฉ.Python: ํ•จ์ˆ˜ ๋‚ด..