[iOS] ํ”„๋กœ๊ทธ๋ž˜๋ฐ 5์ฃผ์ฐจ ์ •๋ฆฌ

2026. 4. 6. 16:35ยทiOS

๐Ÿ“Œ ๋ชฉ์ฐจ

    1. ํ”„๋กœํ† ์ฝœ(protocol)์ด๋ž€?
    1. Delegate ํŒจํ„ด ์ดํ•ด
    1. DataSource vs Delegate ์ฐจ์ด
    1. UIPickerView ๊ตฌํ˜„ ํ•ต์‹ฌ
    1. TableView ํ•ต์‹ฌ ๊ตฌ์กฐ
    1. ์‹ค๋ฌด์—์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ

๐Ÿ“– 1. ํ”„๋กœํ† ์ฝœ(protocol)์ด๋ž€?

โœ” ์ •์˜

ํ”„๋กœํ† ์ฝœ์€ **ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก(์„ค๊ณ„๋„)**์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด
๐Ÿ‘‰ “์ด ๊ธฐ๋Šฅ๋“ค ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค์–ด๋ผ!” ํ•˜๋Š” ๊ทœ์น™

๐Ÿ“Œ ํŠน์ง•

  • ๋ฉ”์„œ๋“œ “์„ ์–ธ๋งŒ” ์กด์žฌ (๊ตฌํ˜„ ์—†์Œ)
  • ํด๋ž˜์Šค/๊ตฌ์กฐ์ฒด/์—ด๊ฑฐํ˜•์—์„œ ์ฑ„ํƒ ๊ฐ€๋Šฅ
  • Java์˜ interface์™€ ๋™์ผ ๊ฐœ๋…

๐Ÿ“Œ ์˜ˆ์‹œ ์ฝ”๋“œ

protocol Runnable {
    var x: Int { get set }
    func run()
}

๐Ÿ‘‰ ๊ตฌํ˜„ (์ฑ„ํƒ + ์ค€์ˆ˜)

class Man: Runnable {
    var x: Int = 1
    func run() {
        print("๋‹ฌ๋ฆฐ๋‹ค~")
    }
}

๐Ÿ‘‰ ๊ตฌํ˜„ ์•ˆ ํ•˜๋ฉด?
โ— ์—๋Ÿฌ ๋ฐœ์ƒ
๐Ÿ‘‰ “protocol์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋‹ค”


๐Ÿ“– 2. Delegate ํŒจํ„ด ์ดํ•ด

โœ” ๊ฐœ๋… ํ•œ๋ฐฉ ์ •๋ฆฌ

  • protocol ๐Ÿ‘‰ ํ•ด์•ผ ํ•  ์ผ ๋ชฉ๋ก (์•Œ๋ฐ” ๊ณต๊ณ )
  • delegate ๐Ÿ‘‰ ์‹ค์ œ ์ผํ•˜๋Š” ์‚ฌ๋žŒ (์•Œ๋ฐ”์ƒ)

๐Ÿ“Œ ํ•ต์‹ฌ ๊ฐœ๋…
๐Ÿ‘‰ “์ผ์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ตฌ์กฐ”

๐Ÿ‘‰ ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ์ผ์„ ํ•˜์ง€ ์•Š๊ณ 
๐Ÿ‘‰ ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๋‹ค๋ฅธ ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„

๐Ÿ“Œ ์ž๋ฃŒ ์„ค๋ช… (4~5ํŽ˜์ด์ง€)

  • delegate = ๋Œ€๋ฆฌ์ž, ์กฐ๋ ฅ์ž
  • ํŠน์ • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ๋Œ€์‹  ์ฒ˜๋ฆฌ

๐Ÿ“– 3. DataSource vs Delegate ์ฐจ์ด

์ด๊ฑฐ ์‹œํ—˜ ํ•ต์‹ฌ๐Ÿ”ฅ

๊ตฌ๋ถ„์—ญํ• 

DataSource ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต
Delegate ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

โœ” ์‰ฝ๊ฒŒ ์ดํ•ด

  • DataSource ๐Ÿ‘‰ “๋ญ ๋ณด์—ฌ์ค„๊นŒ?”
  • Delegate ๐Ÿ‘‰ “์‚ฌ์šฉ์ž๊ฐ€ ๋ญ˜ ํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ?”

๐Ÿ“– 4. UIPickerView ํ•ต์‹ฌ ๊ตฌํ˜„

โœ” ๋ฐ˜๋“œ์‹œ ํ•ด์•ผ ํ•  ๊ฒƒ

1๏ธโƒฃ ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ

class ViewController: UIViewController,
UIPickerViewDelegate,
UIPickerViewDataSource {

2๏ธโƒฃ delegate ์„ค์ •

pickerView.delegate = self
pickerView.dataSource = self

โœ” ํ•„์ˆ˜ ๋ฉ”์„œ๋“œ (DataSource)

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView,
numberOfRowsInComponent component: Int) -> Int {
    return data.count
}

๐Ÿ‘‰ ์ด๊ฑด ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผ ํ•จ


โœ” ์„ ํƒ ๋ฉ”์„œ๋“œ (Delegate)

func pickerView(_ pickerView: UIPickerView,
didSelectRow row: Int,
inComponent component: Int) {
    print("์„ ํƒ๋จ")
}

๐Ÿ‘‰ ํ•„์š”ํ•  ๋•Œ๋งŒ ๊ตฌํ˜„


๐Ÿ“– 5. TableView ํ•ต์‹ฌ ๊ตฌ์กฐ

โœ” TableView๋ž€?

๐Ÿ‘‰ “๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๋Š” UI”


โœ” ํ•„์ˆ˜ ๋ฉ”์„œ๋“œ (์‹œํ—˜ ์ค‘์š”๐Ÿ”ฅ)

override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
    return items.count
}

๐Ÿ‘‰ ํ–‰ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜


override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(
        withIdentifier: "cell",
        for: indexPath)

    cell.textLabel?.text = "๋ฐ์ดํ„ฐ"
    return cell
}

๐Ÿ‘‰ ์…€ ์ƒ์„ฑ + ๋ฐ์ดํ„ฐ ํ‘œ์‹œ


โœ” Delegate ์ฃผ์š” ๊ธฐ๋Šฅ

func tableView(_ tableView: UITableView,
didSelectRowAt indexPath: IndexPath) {
    print("ํด๋ฆญ๋จ")
}

๐Ÿ‘‰ ์‚ฌ์šฉ์ž ํด๋ฆญ ์ฒ˜๋ฆฌ


๐Ÿ“– 6. ์‹ค๋ฌด ํ•ต์‹ฌ ํฌ์ธํŠธ

์ž๋ฃŒ 2ํŽ˜์ด์ง€ ํ•ต์‹ฌ ์š”์•ฝ๐Ÿ”ฅ

โœ” iOS ํ•„์ˆ˜ ๊ธฐ์ˆ 

  • TableView
  • ๋„คํŠธ์›Œํฌ ํ†ต์‹  (REST API)
  • JSON ํŒŒ์‹ฑ
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

โœ” ์•ฑ ๊ฐœ๋ฐœ ํ๋ฆ„

  1. Open API ์š”์ฒญ
  2. JSON ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ
  3. ํŒŒ์‹ฑ
  4. TableView์— ์ถœ๋ ฅ

๐Ÿ‘‰ ์ด๊ฒŒ ์‹ค๋ฌด ๊ธฐ๋ณธ ๊ตฌ์กฐ


โœ… ์ •๋ฆฌ (ํ•ต์‹ฌ ์š”์•ฝ)

โœ” protocol = ๊ธฐ๋Šฅ ์„ค๊ณ„๋„
โœ” delegate = ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋‹ด๋‹น
โœ” datasource = ๋ฐ์ดํ„ฐ ๊ณต๊ธ‰

โœ” TableView ํ•ต์‹ฌ 2๊ฐœ

  • numberOfRows
  • cellForRow

โœ” iOS ์•ฑ ํ•ต์‹ฌ ํ๋ฆ„
๐Ÿ‘‰ API → JSON → ํŒŒ์‹ฑ → UI ์ถœ๋ ฅ

 

'iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] 7์ฃผ์ฐจ ์—ด๊ฑฐํ˜• & ๊ตฌ์กฐ์ฒด ์ •๋ฆฌ  (0) 2026.04.20
[iOS] ์˜ต์…”๋„ ์ฒด์ด๋‹, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ์ œ๋„ค๋ฆญ, Array ์™„์ „์ •๋ฆฌ  (0) 2026.04.13
[iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ 4์ฃผ์ฐจ ์ •๋ฆฌ  (0) 2026.03.30
[iOS] Swift ๋ฐ์ดํ„ฐ ํƒ€์ž… ยท Tuple ยท Optional ยท ์—ฐ์‚ฐ์ž ยท ์ œ์–ด๋ฌธ ์ •๋ฆฌ  (0) 2026.03.16
[iOS]BMI ์•ฑ ๋งŒ๋“ค๊ธฐ 3์ฃผ์ฐจ  (0) 2025.11.25
'iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [iOS] 7์ฃผ์ฐจ ์—ด๊ฑฐํ˜• & ๊ตฌ์กฐ์ฒด ์ •๋ฆฌ
  • [iOS] ์˜ต์…”๋„ ์ฒด์ด๋‹, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ์ œ๋„ค๋ฆญ, Array ์™„์ „์ •๋ฆฌ
  • [iOS] iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ 4์ฃผ์ฐจ ์ •๋ฆฌ
  • [iOS] Swift ๋ฐ์ดํ„ฐ ํƒ€์ž… · Tuple · Optional · ์—ฐ์‚ฐ์ž · ์ œ์–ด๋ฌธ ์ •๋ฆฌ
harang Lee
harang Lee
404...
  • harang Lee
    SkyWith628
    harang Lee
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (122) N
      • AI (51) N
      • C (20)
      • C++ (23)
      • iOS (18)
      • Python (1)
      • AWS (4)
      • Git (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Cํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.4
harang Lee
[iOS] ํ”„๋กœ๊ทธ๋ž˜๋ฐ 5์ฃผ์ฐจ ์ •๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”