[iOS] Delegate Pattern(๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด) ์˜ˆ์‹œ(1) - ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ

2021. 9. 9. 20:01ยท๐ŸŽ iOS & Swift
๋ชฉ์ฐจ
  1. ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ
  2. ๐Ÿ“บ ์‹คํ–‰ ํ™”๋ฉด
  3. ๐Ÿง ์ƒ๊ฐํ•ด ๋ณผ ์ 
  4. โžก๏ธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
  5. 1. ํ”„๋กœํ† ์ฝœ - ์ž‘์—…์˜ ์„ค๊ณ„๋„
  6. 2. ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ - CartViewController(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)
  7. 3. ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ชฝ - ViewController(์ƒํ’ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)
  8. ๐Ÿ—’ ๋งˆ๋ฌด๋ฆฌ

 

๐Ÿ˜€์˜ค๋Š˜์€ ๊ฐ„๋‹จํ•˜๊ฒŒ Delegate Pattern์„ ์ ์šฉํ•ด๋ณด๋Š” ์˜ˆ์‹œ ์ค‘์—์„œ ํ™”๋ฉด ์ „ํ™˜ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋ณด๋‚ด๋Š” ์ž‘์—…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด (Delegate Pattern) ์‹ค์Šต ์˜ˆ์‹œ - 1

 

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ

Delegate Pattern(๐Ÿ˜‡? ๐Ÿ˜ˆ??), ํ•ญ์ƒ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๊ทธ ์ˆœ๊ฐ„์—๋Š” ์ดํ•ดํ–ˆ๊ณ  ๋ถ„๋ช… ์•Œ๊ฒ ๋Š”๋ฐ ๋„๋Œ€์ฒด ์–ด๋А ๋ถ€๋ถ„์— ยท ๋˜ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฐ์ด ์•ˆ ์žกํž™๋‹ˆ๋‹ค... ์ € ์—ญ์‹œ๋„ ๊ทธ๋Ÿฐ๋ฐ์š”... ์–ด์ฉ” ์ˆ˜ ์—†์–ด์š”... ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ์จ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•ด๋ณด๋Š” ์ˆ˜ ๋ฐ–์— ์ด๋ฒˆ์— ์ตœ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์ƒํ™ฉ์— ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ์–ด๋–ค ์žฅ๋‹จ์ ์ด ์žˆ๋Š”์ง€๋„ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉ๋ฒ•์— ์ต์ˆ™ํ•ด์ง€๋ ค๊ณ  ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ™์ด ๋…ธ๋ ฅํ•ด๋ณด์•„์š”.

 

 

๐Ÿ“บ ์‹คํ–‰ ํ™”๋ฉด

์˜ค๋Š˜ ๊ตฌํ˜„ํ•ด ๋ณผ ํ™”๋ฉด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํฌ๊ฒŒ ์ƒํ’ˆ ํ™”๋ฉด๊ณผ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด 2๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ตฌ์š”.

์šฐ์„  ํ๋ฆ„์„ ์„ค๋ช…ํ•ด๋“œ๋ฆด๊ฒŒ์š”.

 

  1. ์ƒํ’ˆ ํ™”๋ฉด์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฒ„ํŠผ์„ ํด๋ฆญ
  2. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด์œผ๋กœ ์ด๋™
  3. ๊ฐœ์ˆ˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ
  4. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด์ด ์‚ฌ๋ผ์ง€๋ฉด์„œ ์ƒํ’ˆ์„ ๋ช‡ ๊ฐœ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€ ์•Œ๋ฆผ ํ˜ธ์ถœ

 

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋  ์ง€ ์Šค์Šค๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌ์ƒํ•ด๋ณผ๊นŒ์š”?

๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒํ’ˆ์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๋Š” ๊ธฐ๋Šฅ

 

 

 

๐Ÿง ์ƒ๊ฐํ•ด ๋ณผ ์ 

๊ตฌ์ƒ์„ ํ•˜๋‹ค๋ณด๋ฉด ํ•œ ๊ฐ€์ง€ ๋“œ๋Š” ์ƒ๊ฐ์ด ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

A(์ƒํ’ˆ ํ™”๋ฉด) โ†’ B(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด)

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์ผ ๋•Œ,

 

A(์ƒํ’ˆ ํ™”๋ฉด)์—์„œ B(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด)๋กœ ๋ฐ์ดํ„ฐ(์ƒํ’ˆ ์ด๋ฆ„, ๊ฐ€๊ฒฉ)๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์€ ํ”„๋กœํผํ‹ฐ๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๋‹ˆ๊นŒ ์–ด๋ ต์ง€ ์•Š์€๋ฐ, B(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ํ™”๋ฉด)์—์„œ A(์ƒํ’ˆ ํ™”๋ฉด)๋กœ ๋ฐ์ดํ„ฐ(์ƒํ’ˆ ๋ช‡ ๊ฐœ ๋‹ด์•˜๋Š”์ง€ ์ƒํ’ˆ ๊ฐœ์ˆ˜)๋ฅผ ๋„˜๊ฒจ์ฃผ๋ ค๊ณ  ํ•˜๋‹ˆ ๋‹จ์ˆœํžˆ ํ”„๋กœํผํ‹ฐ์— ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๊ตฌํ˜„์ด ๋˜์ง€ ์•Š์ฃ .

 

์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ •๋ง ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ ํด๋กœ์ €(Closure)๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ฒˆ์— ์šฐ๋ฆฌ๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด(Delegate Pattern)์„ ์ด์šฉํ•ด์„œ ํ•œ ๋ฒˆ ์ฒ˜๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

(์ด๋ก ์ ์ธ ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ์—์„œ ๋ฏธ๋ฆฌ ๊ณต๋ถ€ํ•˜๊ณ  ์˜ค์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Š)

 

 

โžก๏ธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

์•„๋ž˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋น„์œ ๋Š” ์™„๋ฒฝํ•œ ๋น„์œ ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ธฐ์— ํ”„๋กœํ† ์ฝœ, ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฐœ๋… ๊ณต๋ถ€๋ฅผ ์šฐ์„  ํ™•์‹คํ•˜๊ฒŒ ํ•˜๊ณ  ์˜ค์‹œ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

์šฐ์„  ์„ธํŒ…๋ถ€ํ„ฐ ๋จผ์ € ๋ณด์—ฌ๋“œ๋ฆด๊ฒŒ์š”.

 

  • CartDelegate : ์ƒํ’ˆ ๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ
  • ViewController : ์ƒํ’ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ(ํ™”๋ฉด)
  • CartViewController : ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ(ํ™”๋ฉด)

๊ตฌ์กฐ
๊ตฌํ˜„ํ•  ํ™”๋ฉด

 

์ž ๊ตฌ์„ฑ์ด ์ดํ•ด๊ฐ€ ๋˜์—ˆ์œผ๋ฉด ๋‹ค์Œ์œผ๋กœ ํฌ๊ฒŒ 3๊ฐ€์ง€๋ฅผ ์‹ ๊ฒฝ ์“ธ ๊ฑฐ์˜ˆ์š”.

 

  • ํ”„๋กœํ† ์ฝœ(Protocol) - ์ž‘์—…์˜ ์„ค๊ณ„๋„
  • ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ(Sender)
  • ์‹ ํ˜ธ๋ฅผ ๋ฐ›๊ณ  ์ฒ˜๋ฆฌํ•  ์ชฝ(Receiver)

 

1. ํ”„๋กœํ† ์ฝœ - ์ž‘์—…์˜ ์„ค๊ณ„๋„

CartDelegate.swift์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ”„๋กœํ† ์ฝœ์—์„œ๋Š” ์ง์ ‘ ๊ตฌํ˜„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

// CartDelegate.swift
import Foundation

protocol CartDelegate {
    func alarmCartIsFilled(itemCount: Int)
}

์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์ด ์ฑ„์›Œ์กŒ์„ ๋•Œ ์–ด๋–ค ์•ก์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ธ๋ฐ์š”. ๊ทธ์™€ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋ฅผ 1๊ฐ€์ง€ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

2. ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ - CartViewController(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)

์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ์€ CartViewController์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐœ์˜ ์ƒํ’ˆ์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ์‹ ํ˜ธ(๋ฐ์ดํ„ฐ, ์•Œ๋ฆผ ๋“ฑ)๋ฅผ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ณ  ์‹ถ์€ ๊ฑฐ์˜ˆ์š”. ์ค‘์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ™์ด ์‚ดํŽด๋ด…์‹œ๋‹ค.

 

delegate ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์–ด์š”. ์ด ์นœ๊ตฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„๊นŒ ๋งŒ๋“ค์–ด ๋‘” CartDelegate ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์ฃ . ๋ณต์žกํ•˜๊ฒŒ ๋ง๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ค ๊ถŒํ•œ์„ ๋งŒ๋“ค์–ด์ฃผ์—‡๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค.

 

โœ… ์ด์ œ CartViewController์—๋Š” CartDelegate ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์ƒ๊ฒผ์–ด์š”.

 

์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ฒ„ํŠผ(insertCartButton)์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ”„๋กœํ† ์ฝœ ์ค‘ alarmCartIsFilled()๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด์š”. ์ธ์ž๋กœ๋Š” ์ƒํ’ˆ์˜ ๊ฐœ์ˆ˜(itemCount)๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ์–ด์š”. ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์ƒํ’ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ์š”๋ฆฌ์กฐ๋ฆฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฑฐ์˜ˆ์š”.

 

๊ธฐ๋Šฅ์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ๋Š” ํ•  ๊ฑด๋ฐ ์ด๊ฒƒ๋„ ์‹ ํ˜ธ์˜ ์ผ์ข…์œผ๋กœ ์ƒ๊ฐํ•ด์„œ ์‹ ํ˜ธ๋ฅผ ๋ฐ›๋Š” ์ชฝ์œผ๋กœ ๊ถŒํ•œ์ด๋‚˜ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๋‹ค ๋„˜๊ฒจ์ค„ ๊ฑฐ์˜ˆ์š”. (์‹คํ–‰์‹œํ‚ฌ๊ฑฐ์•ผ ๊ทผ๋ฐ ์–ด๋–ค ๊ธฐ๋Šฅ์ธ์ง€๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์—์„œ ์ฐพ์•„๋ด ~ ์ด๋Ÿฐ ๋А๋‚Œ??) (์•„๋ฌด๋ง ๋Œ€์ž”์น˜๋„ค์š”..)

 

class CartViewController: UIViewController {
    // ...
    var itemCount: Int = 0
    var delegate: CartDelegate?     // ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๋Š” ์–ด๋–ค ๊ถŒํ•œ
    // ...

	// ์•„์ดํ…œ ๊ฐœ์ˆ˜ ์ฆ๊ฐ€/๊ฐ์†Œ
    @IBAction func stepperValueChanged(_ sender: UIStepper) {
        itemCount = Int(sender.value)
        itemCountLabel.text = Int(sender.value).description
    }

	// ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ
    @IBAction func insertCartButtonTapped(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
        delegate?.alarmCartIsFilled(itemCount: itemCount)   // ๊ถŒํ•œ ์ค‘์— ์ด๋Ÿฐ ์•ก์…˜์„ ์‹คํ–‰ํ• ๊ฑฐ์•ผ, ์ด๋Ÿฐ ์š”์ฒญ์„ ๋‚ ๋ฆด๊ฑฐ์•ผ
    }
    // ...
}

 

์ž ์ผ๋‹จ ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ์„ ๋งŒ๋“ค์—ˆ์–ด์š”. ์‹ ํ˜ธ๋ฅผ ๋ฐ›๋Š” ์ชฝ๋„ ๋งŒ๋“ค์–ด๋ณผ๊ฒŒ์š”.

 

 

3. ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ชฝ - ViewController(์ƒํ’ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)

์ž์„ธํžˆ ๋ณด๋ฉด 3๊ฐ€์ง€ ํฌ์ธํŠธ๊ฐ€ ์žˆ์–ด์š”.

 

  1. CartDelegate ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ๋ถ€๋ถ„
  2. CartViewController์˜ delegate๋ฅผ ์œ„์ž„ํ•˜๋Š” ๋ถ€๋ถ„
  3. ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉํ•  ๋ฉ”์„œ๋“œ์˜ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„

 

// ViewController.swift (์ƒํ’ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)

import UIKit

class ViewController: UIViewController, CartDelegate // (1) {

    @IBOutlet weak private var productNameLabel: UILabel!
    @IBOutlet weak private var priceLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setUI()
    }
    
    private func setUI() {
        navigationController?.navigationBar.isHidden = true
    }
    
    // (3) ํ”„๋กœํ† ์ฝœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„
    func alarmCartIsFilled(itemCount: Int) {
        let alertVC = UIAlertController(title: "์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ™•์ธ", message: "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— \(itemCount)๊ฐœ์˜ ์ƒํ’ˆ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", preferredStyle: .alert)
        
        let okAction = UIAlertAction(title: "ํ™•์ธ", style: .default, handler: nil)
        alertVC.addAction(okAction)
        
        present(alertVC, animated: true, completion: nil)
    }
    
    @IBAction func cartButtonTapped() {
        let cartVC = storyboard?.instantiateViewController(identifier: "CartViewController") as! CartViewController
        cartVC.delegate = self // (2) cartVC์˜ ๊ถŒํ•œ์€ ๋‚ด๊ฐ€ ๋Œ€์‹ ํ• ๊ฑฐ์•ผ
        
        if let productName = productNameLabel.text,
           let price = priceLabel.text {
            cartVC.productName = productName
            cartVC.price = price
        }
        present(cartVC, animated: true, completion: nil)
    }
}

 

๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ์กฐ๊ธˆ๋งŒ ๋” ์ƒ์„ธํ•˜๊ฒŒ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

(1) CartDelegate ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” ๋ถ€๋ถ„

ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ์–ด์š”. ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€๋กœ ๊ตฌํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 3๋ฒˆ์—์„œ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

 

 

(2) CartViewController์˜ delegate(๊ถŒํ•œ)๋ฅผ ์œ„์ž„ํ•˜๋Š” ๋ถ€๋ถ„

cartVC.delegate = self // (2) cartVC์˜ ๊ถŒํ•œ์€ ๋‚ด๊ฐ€ ๋Œ€์‹ ํ• ๊ฑฐ์•ผ

CartViewController์˜ delegate(๊ถŒํ•œ)์„ self(์ž๊ธฐ ์ž์‹  = ์—ฌ๊ธฐ์„œ๋Š” ViewController)๊ฐ€ ๋Œ€์‹  ํ•˜๊ฒ ๋‹ค.

์ด๋Ÿฐ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ •๋ง ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์˜ˆ์š”. ๊ถŒํ•œ์„ ๋ˆ„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋ช…์‹œ์— ์ฃผ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋Šฅ์„ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์š”.

 

(3) ํ”„๋กœํ† ์ฝœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„

์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋ช‡ ๊ฐœ์˜ ์ƒํ’ˆ์„ ๋‹ด์•˜๋Š”์ง€ ์•Œ๋ฆผ์„ ๋„์šฐ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๊ฑด๋ฐ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ทฐ์—์„œ ๋„˜๊ฒจ์ค€ ์•„์ดํ…œ ๊ฐœ์ˆ˜(itemCount)๋ฅผ ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.

// (3) ํ”„๋กœํ† ์ฝœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„
func alarmCartIsFilled(itemCount: Int) {
    let alertVC = UIAlertController(title: "์žฅ๋ฐ”๊ตฌ๋‹ˆ ํ™•์ธ", message: "์žฅ๋ฐ”๊ตฌ๋‹ˆ์— \(itemCount)๊ฐœ์˜ ์ƒํ’ˆ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", preferredStyle: .alert)
    
    let okAction = UIAlertAction(title: "ํ™•์ธ", style: .default, handler: nil)
    alertVC.addAction(okAction)
    
    present(alertVC, animated: true, completion: nil)
}

 

 

๐Ÿ—’ ๋งˆ๋ฌด๋ฆฌ

์‚ฌ์‹ค ๊ธ€๋กœ๋Š” ํฌ๊ฒŒ ๊ฐ์ด ์•ˆ ์žกํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ํ•ด๋ด์•ผ ํ•ด์š”. ๊ทธ๋ž˜์•ผ ์ž์‹ ๋งŒ์˜ ์ •์˜๊ฐ€ ์ƒ๊ธฐ๊ณ  ์ดํ•ด๊ฐ€ ์ž์—ฐ์Šค๋ ˆ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ ๋˜ ์ฐพ์•„์˜ฌ๊ฒŒ์š”. ์ €๋„ Delegate Pattern ์ •๋ฆฌ ์ค‘์ด๊ฑฐ๋“ ์š”. ํ™”์ดํŒ… ^__^

'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] CollectionView Cell ๋„ˆ๋น„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๊ธฐ  (8) 2021.10.28
[iOS] ์„œ๋ธŒ ํด๋ž˜์‹ฑ  (6) 2021.10.07
[iOS] Associated Type  (3) 2021.09.05
[iOS] Typealias, ํƒ€์ž… ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ  (3) 2021.09.02
[iOS] ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTMLํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ  (0) 2021.08.28
  1. ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป ๋“ค์–ด๊ฐ€๋ฉฐ
  2. ๐Ÿ“บ ์‹คํ–‰ ํ™”๋ฉด
  3. ๐Ÿง ์ƒ๊ฐํ•ด ๋ณผ ์ 
  4. โžก๏ธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
  5. 1. ํ”„๋กœํ† ์ฝœ - ์ž‘์—…์˜ ์„ค๊ณ„๋„
  6. 2. ์‹ ํ˜ธ๋ฅผ ์ฃผ๋Š” ์ชฝ - CartViewController(์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)
  7. 3. ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ชฝ - ViewController(์ƒํ’ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ)
  8. ๐Ÿ—’ ๋งˆ๋ฌด๋ฆฌ
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [iOS] CollectionView Cell ๋„ˆ๋น„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๊ธฐ
  • [iOS] ์„œ๋ธŒ ํด๋ž˜์‹ฑ
  • [iOS] Associated Type
  • [iOS] Typealias, ํƒ€์ž… ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ
taeeekki
taeeekki
๐ŸŒฑiOS ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ด ๋งŒ๋“œ๋Š” ๋ธ”๋กœ๊ทธ
taekki.dev๐ŸŒฑiOS ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ด ๋งŒ๋“œ๋Š” ๋ธ”๋กœ๊ทธ
taeeekki
taekki.dev
taeeekki
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • All (130)
    • ๐ŸŒฑ SeSAC (40)
    • โ˜€๏ธ 100DaysOfSwift (18)
    • ๐ŸŽ iOS & Swift (60)
    • ๐Ÿ“ฉ Essay (3)
    • ๐ŸŽ Tip (4)
    • ๐ŸŒˆ UIUX (2)
    • ๐Ÿง OOP (1)
    • ๐Ÿฅณ Side Project (0)
    • โœจ Problem Solving (1)
    • ๐Ÿ“ Note (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

Diary App
iOS UIUX
์˜ต์…”๋„
github tip
URLSession
๊ฐœ๋ฐœ
TIL
Realm
IOS
CollectionView
์Šค์œ„ํ”„ํŠธ
tableView
SeSAC
network
commit
OOTD
100DaysOfSwift
iOS ์•ฑ ์ถœ์‹œ
์†ํŠธ
GIT
iOS H.I.G
๊นƒํ—ˆ๋ธŒ
์Šค์œ„ํ”„ํŠธ๋ฌธ๋ฒ•
์Šค์œ„ํ”„ํŠธ ๋ฌธ๋ฒ•
ํด๋กœ์ €
swift
PageViewController
๊ฐœ์ธ ์•ฑ ์ถœ์‹œ
์˜ค์˜คํˆฌ๋‘
github

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLOยท Designed By์ •์ƒ์šฐ.v4.5.3
taeeekki
[iOS] Delegate Pattern(๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด) ์˜ˆ์‹œ(1) - ์ด์ „ ํ™”๋ฉด์œผ๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ
์ƒ๋‹จ์œผ๋กœ

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

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.