[Design Patterns] ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด(Delegate Pattern)

๐Ÿ’ฌ  Introduction ํ…์ŠคํŠธํ•„๋“œ : ์œ ์ €๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค.  ์ž…๋ ฅ๋œ ๋™์ž‘๋“ค์„ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•œ๋‹ค.์ด๋•Œ, ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ(๋Œ€๋ฆฌ์ž) ํŒจํ„ด์ด ํ•„์š”ํ•˜๋‹ค. ์ฆ‰, ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๋Œ€๋ฆฌ์ž๋Š” ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋œ๋‹ค.  ํ…์ŠคํŠธํ•„๋“œ๋ผ๋Š” ๊ฐ์ฒด์™€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œํ…์ŠคํŠธํ•„๋“œ์™€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ ์˜์‚ฌ์†Œํ†ต์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์ด ์˜์‚ฌ์†Œํ†ต์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ค‘๊ฐ„์˜ ๋Œ€๋ฆฌ์ž(๋ธ๋ฆฌ๊ฒŒ์ดํŠธ)๋Š” ํ”„๋กœํ† ์ฝœ ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•˜๊ณ ํ”„๋กœํ† ์ฝœ ํƒ€์ž…์œผ๋กœ ๋™์ž‘์ด ์ „๋‹ฌ๋œ๋‹ค. ๊ฐ์ฒด ๋‚ด์—์„œ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค๋ฉด self๋ผ๊ณ  ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—†๋‹ค๋ฉด ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์„ค์ • ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ…์ŠคํŠธ ํ•„๋“œ์˜ ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•ด์•ผ ํ•œ๋‹ค. ์ด ํ”„๋กœํ† ์ฝœ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„ ํƒ์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ๋“ค(๋ฉ”์„œ๋“œ)์„ ๊ตฌํ˜„ํ•˜๋ฉดํ…์ŠคํŠธํ•„๋“œ์—์„œ ๋ฐœ์ƒํ•œ ๋‚ด์šฉ๋“ค์„ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•  ์ˆ˜ ..

๐ŸŽ iOS/Patterns & Arch 2024. 7. 8. 02:20

[iOS] toast message - ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€๋์Šต๋‹ˆ๋‹ค

์ด๋ฒˆ ํŒ€ ํ”„๋กœ์ ํŠธ๋Š” ํ•˜๋‚˜์˜ ํ™”๋ฉด์—์„œ ๊ฒฐ์ œ๊นŒ์ง€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณผ์ œ์˜€๋‹ค. ๊ณ ๋ฏผ์„ ํ•˜๋‹ค ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€๊ฐ€ ๋”ฐ๋กœ ๋งŒ๋“ค ์ˆ˜๊ฐ€ ์—†์–ด์„œ ํ•˜ํ”„ ๋ชจ๋‹ฌ์„ ๋„์šฐ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋‹ฌ์„ ์—ด๊ธฐ ์ „๊นŒ์ง„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์ด ์ œ๋Œ€๋กœ ๋‹ด๊ฒผ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š์•˜๋‹ค.   ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์•ฑ๋“ค์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ๋‹ค์–‘ํ•œ ์–ดํ”Œ๋“ค์„ ๊น”์•„๋ณด๊ณ  ์ฐพ์•„๋ณด์•˜๋‹ค. (์ด๋ ‡๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋‹ค ์‹ค์ œ๋กœ ์Šคํƒ€๋ฒ…์Šค ์‚ฌ์ด๋ Œ ์˜ค๋” ์ž๋™๊ฒฐ์ œ๋กœ ๋„˜์–ด๊ฐ€์„œ ํŠธ๋ Œํƒ€ ์‚ฌ์ด์ฆˆ ์•„์ด์Šคํ‹ฐ ๋งค์žฅ ํ”ฝ์—…ํ•˜๊ฒŒ ๋๋‹ค๋Š” ์ฐ๊ณผ ํ•จ๊ป˜....โ˜†)๊ทธ์ค‘์—์„œ ๋‚˜๋Š” ๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๋Š” ๊ธฐ๋Šฅ์ด ์ ํ•ฉํ•ด ๋ณด์˜€๋‹ค.   ๋ฐ”๋กœ ์ด ๊ธฐ๋Šฅ์ด๋‹ค!!!๊ทผ๋ฐ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€๋ฐ ๋ญ๋ผ๊ณ  ๊ฒ€์ƒ‰ํ•ด์•ผํ• ์ง€ ๊ฐ์กฐ์ฐจ ์˜ค์ง€ ์•Š์•˜๋‹ค...๋ฐฐ๋‹ฌ์˜ ๋ฏผ์กฑ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธธ ๋•Œ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธฐ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ๋“ฑ์ •๋ง ๋‹ค์–‘ํ•œ ๊ฒ€์ƒ‰์–ด๋กœ ์ฐพ์•„๋ณด๊ณ  ..

๐ŸŽ iOS/UIKit 2024. 7. 7. 14:20

[iOS] Lottie ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜๋ฐฉ๋ฒ• - ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ ๋งŒ๋“ค๊ธฐ_์ฝ”๋“œ๋ฒ ์ด์Šค

ํŒ€ํ”„๋กœ์ ํŠธ ๋•Œ ๋‚ด๊ฐ€ ๋งก์€ ๋ถ€๋ถ„์€ ๊ตฌํ˜„์ด ๋๋‚˜์„œ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„ ์ฐพ์•„ ๋ณธ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.   Lottie ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Lottie๋Š” gif์™€ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ JSON ํ˜•์‹์œผ๋กœ ์—์–ด๋น„์•ค๋น„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ importํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฝ”์ฝ”์•„ํŒŸ, ์นด๋ฅดํƒ€๊ณ , SPM ๋“ฑ์ด ์žˆ์ง€๋งŒ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ SPM์ด ๊ฐ„๋‹จํ•ด์„œ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ถ”๊ฐ€ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.    ์„ค์น˜ ๋ฐฉ๋ฒ•1. ๊ณต์‹ ๊นƒํ—ˆ๋ธŒ์—์„œ ๋งํฌ ๋ณต์‚ฌhttps://github.com/airbnb/lottie-ios   2. project์—์„œ packages์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.      3. Lottie ํ™ˆํŽ˜์ด์ง€์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ฒ€์ƒ‰ ํ›„ ํŒŒ์ผ ์ €์žฅ https://lottiefiles.com/    4. Xcode์—์„œ Assets ํ•˜๋‹จ์— JSONํŒŒ์ผ ..

๐ŸŽ iOS/UIKit 2024. 7. 5. 03:23

[UIKit] UITableView ์ฝ”๋“œ๋ฒ ์ด์Šค ์‚ฌ์šฉ๋ฒ•

โœ… TableView(ํ…Œ์ด๋ธ”๋ทฐ): ๋‚ด๋ถ€์— ์…€์ด ์กด์žฌํ•˜๊ณ  ์„ธ๋กœ๋กœ๋งŒ ์Šคํฌ๋กค์ด ๊ฐ€๋Šฅํ•œ ๋ทฐ๊ทธ๋ฃน์„ ์ง€์„ ์ˆ˜๋„ ์žˆ์Œ  ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋…  โœ… ํ…Œ์ด๋ธ”๋ทฐ์˜ ๊ตฌ์กฐ ViewController(๊ฐ์ฒด)tableView(๊ฐ์ฒด)tableViewCell(๊ฐ์ฒด) ViewController์™€ tableView ๊ฐ„์— ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์˜์‚ฌ์†Œํ†ต ํ•„์š”ํ•œ๋ฐ์ด๊ฒƒ์„ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. UITableVivewController๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” UITableViewDatSource ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•ด์ค˜์•ผ ํ•œ๋‹ค.์ด ํ”„๋กœํ† ์ฝœ์€ tableView์™€ ViewController๊ฐ€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ปจํ…์ธ ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ํ‘œ์‹œํ•  ๊ฑด์ง€์— ๋Œ€ํ•œ ์†Œํ†ต. ์…€์€ ๋ช‡๊ฐœ ํ•„์š”ํ•œ์ง€, ์…€์€ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œํ•ด์•ผํ•˜๋Š”์ง€  โœ… UITa..

๐ŸŽ iOS/UIKit 2024. 7. 4. 00:09

[UIKit] ํ•˜ํ”„๋ชจ๋‹ฌ ๊ตฌํ˜„(Scrollable Bottom Sheet) - SheetPresentationController

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์™ผ์ชฝ์˜ ๊ฒ€์€์ƒ‰ ํ™”๋ฉด ์ฒ˜๋Ÿผ ๋œฌ๋‹ค. ์™œ ๋ชจ๋‹ฌ์ด ์•ˆ ๋œจ๊ณ  ๋ฒ„ํŠผ์ด ๋œจ๋Š”์ง€ ์˜๋ฌธ์ด์—ˆ๋‹ค. ๋ฐฐ๊ฒฝ์„ ํ™”์ดํŠธ๋กœ ์„ค์ •ํ•ด๋‘๊ณ  ๋ณด๋‹ˆ ๋ชจ๋‹ฌ์€ ์˜ฌ๋ผ ์™”์œผ๋‚˜๋ฐฐ๊ฒฝ์ด ๊ฒ€์€์ƒ‰์ด์–ด์„œ ๋ฒ„ํŠผ๋งŒ ์˜ฌ๋ผ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ์˜ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ vc๋ฅผ ํ˜„์žฌ์˜ ViewController๋กœ ์„ค์ •ํ•ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ! ํ•ด๊ฒฐ์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ชจ๋‹ฌ์„ ๋„์–ด์ค„ ์ƒˆ๋กœ์šด UIViewController ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.   Cocoa Touch Class ํŒŒ์ผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.    Subclass of : ๋ถ€๋ถ„์„ UIViewController๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค๋กœ ์„ค์ •ํ•ด์ค€๋‹ค.   import UIKit//ModalController.swiftclass ModalController: UIViewController { override func v..

๐ŸŽ iOS/UIKit 2024. 7. 3. 17:46

[GitHub] Pull Request ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ - ํŒ€์›๋“ค์˜ Approve๋ฅผ ๋ฐ›์•„์•ผ Merge๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ

๊นƒํ—ˆ๋ธŒ๋กœ ํ˜‘์—…ํ•  ๋•Œ ์ถฉ๋Œ์„ ์ค„์ด๊ธฐ ์œ„ํ•ดPull Request๋ฅผ ๋งŽ์ด ์ถ”์ฒœ ํ•œ๋‹ค.  ์ด๋•Œ, ์š”์ฒญ์„ ๋ณด๋‚ด๋„ Merge๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜ ์žˆ์–ดํ”„๋กœ์ ํŠธ ์†์ƒ์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์—ˆ๋‹ค.  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œPull Reqest ํ•  ๋•Œ, ํŠน์ • ์ธ์›์˜ ์ˆ˜๊ฐ€ ์Šน์ธ์„ ํ•ด์•ผMerge๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์„ค์ •์ด ์žˆ๋‹ค.    Pull Request ๊ถŒํ•œ ์„ค์ • ๋ฐฉ๋ฒ•1. Settings  ->  Branchs -> Add classic branch protection rule    2. Branch name pattern ์—์„œ ๊ถŒํ•œ ์„ค์ •ํ•  ๋ธŒ๋žœ์น˜๋ช… ์ž…๋ ฅ ๋ช‡๋ช…์˜ ์Šน์ธ์„ ๋ฐ›์•„์•ผ ๋จธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์„ค์ •.์ˆซ์ž๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์˜ ์Šน์ธ์„๋ฐ›์•„์•ผ๋งŒ ๋จธ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. Pull Request ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ1. ์ฝ”๋“œ ์ˆ˜์ •   2. ๋‚ด ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹..

๐ŸŽ iOS/Git&GitHub 2024. 7. 2. 23:55

[ UIKit ] addTarget(_:action:for:) ๋ฉ”์„œ๋“œ

→์ด๋ฒˆ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์ด๊ฐ ์ฝ”๋“œ๋“ค๊ฐ„์˜ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๋ฅผ ์ด์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋‹ˆ ์˜๋ฌธ์ด ๋“œ๋Š” ๋ฉ”์„œ๋“œ๋‹ค.  ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณค ํ•˜๋Š”๋ฐtarget์— ์ฃผ๋กœ self๊ฐ€ ์‚ฌ์šฉ๋˜์–ด ์˜๋ก€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณค ํ–ˆ์—ˆ๋‹ค.  ํ•˜์ง€๋งŒ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์„ ์˜๋งˆํ•˜๊ณ ,์–ด๋–ป๊ฒŒ ์ด ์ฝ”๋“œ๋กœ ์ธํ•ด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•œ์˜๋ฌธ์ด ์ƒ๊ฒจ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.  addTarget(_:action:for:) ์ปจํŠธ๋กค๊ณผ ํƒ€๊ฒŸ ๊ฐ์ฒด ๋ฐ ์•ก์…˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let ..

๐ŸŽ iOS/UIKit 2024. 6. 30. 20:00