[Xcode] Xcode ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ถ„์„ ๋„๊ตฌ : Codeface

ํ”„๋กœ์ ํŠธ์˜ ํด๋” ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ธ Codeface๋ฅผ ์†Œ๊ฐœํ•ด ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ํˆด์ด, ๊ธฐ์กด์—๋„ ์žˆ์—ˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด์ง€๋งŒ, ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Codeface ์„ค์น˜ ์šฐ์„  ๊ณต์‹ ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. https://codeface.io/ Codeface See the Architecture of any Codebase codeface.io ํ•ด๋‹น ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ํ•˜๋‹จ์—, ์•ฑ์Šคํ† ์–ด ๋งํฌ๊ฐ€ ์žˆ์œผ๋‹ˆ ์„ค์น˜ ํ•ด์ค๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š”, LSPService๋ผ๋Š” ์˜คํ”ˆ์†Œ์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ๋จผ์ € LSPService๋ฅผ ์„ค์น˜ ํ•ด์ค๋‹ˆ๋‹ค. ๊ณต์‹์‚ฌ์ดํŠธ ์ตœํ•˜๋‹จ์— ์žˆ๋Š” LSPService ๋งํฌ๋ฅผ ๋ˆ„๋ฅด๋ฉด, ์„ค์น˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ด๋™ํ•œ ๋งํฌ์—์„œ, ๊ฐ์ž ํ”„๋กœ์„ธ..

๐ŸŽ/iOS 2023. 4. 5. 12:02
[iOS] ์˜์กด์„ฑ ์ฃผ์ž…(Dependency Injection) ๊ฐœ๋…๊ณผ ์˜ˆ์ œ ( feat. Clean Architecture + MVVM)

Clean Architecture๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…์ด์—ˆ๋˜ '์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)'์— ๋Œ€ํ•œ ์ •๋ฆฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, Clean Architecture์— ๋Œ€ํ•œ ์ „ ๊ณผ์ •์„ ๋‹ค๋ฃจ๋Š” ๊ธ€์ด ์•„๋‹ˆ๋‹ˆ ์ด ์  ์ฐธ๊ณ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์™„๋ฒฝํ•œ ๊ธ€์ด ์•„๋‹ˆ๋‹ค๋ณด๋‹ˆ, ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋งŽ์€ ์ง€์  ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! :) ์˜์กด์„ฑ(Dependency)์ด๋ž€? ํ”ํžˆ, Clean Architecture์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™์„ ์„ค๋ช…ํ•  ๋•Œ "๊ฐ ๊ณ„์ธต(Layer)์€ ์„œ๋กœ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ํ•œ ๊ณ„์ธต์˜ ๋ณ€ํ™”๊ฐ€ ๋‹ค๋ฅธ ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค!" ๋ผ๊ณ  ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” '๊ณ„์ธต์ด ์„œ๋กœ ๋…๋ฆฝ์ ' ์ด๋ผ๋Š” ๋ง์€, ๊ฐ ๊ณ„์ธต์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™” ํ•˜๋Š”๊ฒƒ์„ ์ง€ํ–ฅํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, iO..

๐ŸŽ/iOS 2023. 3. 31. 00:30
[iOS/UIScrollView] RxSwift๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, KeyboardNotification ๋‹ค๋ฃจ๊ธฐ ( + textField ์„ ํƒ ์‹œ Keyboard ๋†’์ด๋งŒํผ ScrollView์ด๋™ )

RxSwift๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ KeyboardNotification ๋‹ค๋ฃจ๊ธฐ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด, TextField๋ฅผ ์„ ํƒํ•˜์˜€์„ ๋•Œ ํ•ด๋‹น TextField์˜์—ญ์„ KeyBoard๊ฐ€ ์นจ๋ฒ”ํ•˜์—ฌ [1] ์ž‘์„ฑํ•˜๋Š” ๋‚ด์šฉ [2] ์™„๋ฃŒ ๋ฒ„ํŠผ ๋“ฑ์„ ๊ฐ€๋ฆฌ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Notification์ด๋ผ๋Š” Class๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. UIScrollView ๋‚ด๋ถ€์— ์ •์˜๋˜์–ด ์žˆ๋Š” TextField์˜ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด TextField๋ฅผ ์„ ํƒ ํ•˜์˜€์„ ๋•Œ, KeyBoard์˜ ๋†’์ด๋งŒํผ ScrollView๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class SignUpViewController: BaseViewController{ var keyBoardUpDown = false override fu..

๐ŸŽ/iOS 2023. 2. 19. 04:52
[iOS] MVVM ํŒจํ„ด ์•Œ์•„๋ณด๊ธฐ (vs MVC ํŒจํ„ด) (2)

์˜ค๋Š˜์€, ์ด์ „์— ํฌ์ŠคํŒ… ํ•œ ๊ธ€์— ์ด์–ด์„œ MVVM ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•ž์„œ ์•Œ์•„๋ดค๋˜ MVCํŒจํ„ด๊ณผ ์–ด๋–ค์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋ฉฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. โ€ป ๊ธ€ ์ž‘์„ฑ์‹œ ์ž˜๋ชป ๋œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ž˜๋ชป๋œ ๋‚ด์šฉ ์ง€์ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.!! MVVMํŒจํ„ด์€ ์•„์ฃผ ํ›Œ๋ฅญํ•œ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. Model๊ณผ View๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์•Œ๊ณ ์žˆ๋Š” component์ธ๋ฐ, MVC์™€ ๋‹ค๋ฅด๊ฒŒ View Model๋ผ๋Š” ์ƒˆ๋กœ์šด ์ค‘์žฌ์ž๊ฐ€ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. (์‚ฌ์‹ค MVVM๊ณผ Apple's MVC ์‚ฌ์—์ด ์žˆ๋Š” MVP๋ชจ๋ธ์„ ์ž์ฃผ ๋น„๊ตํ•˜๊ณ ๋Š” ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.) ๋˜ํ•œ, ์ด๋ฏธ ์•Œ๊ณ ์žˆ๋Š” Model๊ณผ View์˜ ์—ญํ• ๋„ ์กฐ๊ธˆ ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. Model - Model์€ ๋ฐ์ดํ„ฐ,..

๐ŸŽ/iOS 2022. 12. 27. 12:58
[iOS] MVVM ํŒจํ„ด ์•Œ์•„๋ณด๊ธฐ (vs MVC ํŒจํ„ด) (1)

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

๐ŸŽ/iOS 2022. 12. 23. 13:59
[iOS] iOS Application LifeCycle (iOS ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ) ์•Œ์•„๋ณด๊ธฐ

์˜ค๋Š˜์€ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ๋งŽ์ด ๋“ค์–ด๋ณธ ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ž€ ๋ฌด์—‡์ธ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. (๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋กํ•˜๊ธฐ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ) . . . ์ผ๋‹จ ๊ธฐ๋ณธ์ ์œผ๋กœ iOS์—์„œ ์ƒ๋ช…์ฃผ๊ธฐ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•  ๋•Œ iOS 13.0 ๋ฒ„์ „ ์ด์ „๊ณผ ์ดํ›„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์„ค๋ช…์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€๋ฐ, iOS 13.0 ์ด์ „์—๋Š” Scene์ด๋ผ๋Š” ๊ฐœ๋…์ด App์œผ๋กœ ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ์ดํ›„ ๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” AppDelegate์™€ SceneDelegate๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋กœ ๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ์ด์ฒ˜๋Ÿผ AppDelegate์™€ SceneDelegate๊ฐ€ ํ•˜๋Š” ์—ญํ• ์ด ๋ถ„๋ฆฌ๊ฐ€ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ €๋Š” 13.0๋ฒ„์ „ ์ดํ›„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ..

๐ŸŽ/iOS 2022. 12. 22. 16:47
[iOS] Delegate ํŒจํ„ด์ด๋ž€? (Delegate๋ฅผ ํ™œ์šฉํ•œ TextField ๋‹ค๋ฃจ๊ธฐ)

์˜ค๋Š˜์€ iOS ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด ๋น ์งˆ ์ˆ˜ ์—†๋Š” Delegate์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ์‚ฌ์‹ค, ์ œ๊ฐ€ ์ฒ˜์Œ iOS ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ, ์ œ์ผ ์ฒ˜์Œ ๋งˆ์ฃผ์ณค๋˜ ๋‚œ๊ด€์ด ์ด DelegateํŒจํ„ด์˜ ์ดํ•ด์˜€๋˜,,,, ๊ทธ๋ž˜์„œ, ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ test์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์‹ค์ œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„์ด ๋˜๊ณ , ๋™์ž‘์ด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! (๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€ ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋กํ•˜๊ธฐ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์—, ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ) . . . Delegate๋ž€? Delegate๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ‘protocol’ ์ด๋ผ๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, Delegate๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœํ† ์ฝœ์˜ ์ง‘ํ•ฉ(?)์œผ๋กœ ๊ตฌํ˜„์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœํ† ์ฝœ์„ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋น„๊ต๋ฅผ ํ•˜์ž๋ฉด, Java์—์„œ ์‚ฌ์šฉํ•˜๋Š” ‘์ถ”์ƒ ํด๋ž˜์Šค'์™€..

๐ŸŽ/iOS 2022. 12. 22. 16:21
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday