๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(102)
MVVM + RxSwift MVVM(Model - View - ViewModel)   1. ๋ทฐ(View) (ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.)ํ™”๋ฉด์— ํ‘œํ˜„๋˜๋Š” ๋ ˆ์ด์•„์›ƒ ๊ด€์—ฌํ•œ๋‹ค. UI์— ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์„ ๋‹ค๋ฃจ๋ฏ€๋กœ UI๋กœ์ง์„ ํฌํ•จํ•œ๋‹ค.๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํฌํ•จํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ , ViewModel๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ• ์ง€๋“ฑ์„ ๋‹ด๊ณ ์žˆ๋‹ค. 2. ๋ทฐ๋ชจ๋ธ(ViewModel) (ํ™”๋ฉด์— ๊ทธ๋ฆด ์ •๋ณด๋ฅผ ์ค€๋น„ํ•œ๋‹ค.)ViewModel์€ ์•ฑ์˜ ํ•ต์‹ฌ์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๊ณ ์žˆ๋Š” ์ฝ”๋“œ ๊ณ„์ธต์ด๋‹ค.MVCํŒจํ„ด์˜ Controller์™€ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค.View์™€ Model์‚ฌ์ด์—์„œ View์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ๋กœ์ง์„ ์‹คํ–‰ํ•˜๊ณ , Model์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ View์˜ refreshํ•œ๋‹ค.Model์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด View์—๊ฒŒ notification์„ ๋ณด..
[iOS]์˜ต์ €๋ฒ„ ํŒจํ„ด ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด๋ž€?Observer Pattern(์˜ต์ €๋ฒ„)์ด๋ž€ ๊ด€์ฐฐ ์ค‘์ธ ๊ฐ์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์•Œ๋ฆฌ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. iOS์—์„œ๋Š” Swift 5.1 ๋ฒ„์ „๋ถ€ํ„ฐ Combine ํ”„๋ ˆ์ž„์›Œํฌ์— Publisher๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  NotificationCenter๋„ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.    Subject (Publisher)Observer๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ์ˆ˜๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.Observer๋“ค์„ ์ถ”๊ฐ€, ์ œ๊ฑฐํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.Concrete Subject (Publisher)Concrete Observer ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Observer(Subscriber)์—๊ฒŒ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.Observer (Subscrib..
[iOS] ReactiveX, Reactive Programming Reactive ProgrammingReactive Programming์ด๋ž€ ๋น„๋™๊ธฐ์  ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์ „๋‹ฌ์— ๊ด€ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค.Reative Programming์˜ ํ•ต์‹ฌ์€ ๋ชจ๋“  ๊ฒƒ์„ ๋น„๋™๊ธฐ์  ๋ฐ์ดํ„ฐ์˜ stream์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ง์ ‘ ์ •ํ•ด์„œ ์‹คํ–‰๋˜๋„๋ก ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋˜์—ˆ์„ ๋•Œ, ์ด๋ฅผ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ๋Š” Reative Programming์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์‹ค์‹œ๊ฐ„์„ฑ์„ ๊ฐ€์ง„๋‹ค.ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ˆœ์„œ์™€ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™”๋ฉด์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ง€์†์ ์œผ๋กœ ํŠน์ • ๊ฐ’์— ๋Œ€ํ•œ ๊ด€์ฐฐ์„ ํ•ด์•ผ ..
[iOS] iOS data storage - 2. Userdefault, Coredata, Realm, Keychain File Manager์ƒŒ๋“œ๋ฐ•์Šค๋ฅผ ํ†ตํ•ด ์•ฑ๋งˆ๋‹ค ๋ณ„๋„์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ๊ณต์œ ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ ์ ‘๊ทผ์—๋„ ๋ณดํ˜ธ๋˜๋Š” ์˜์—ญ์œผ๋กœ ์‹œ์Šคํ…œ์ด ๋ถ€์ •์ ์œผ๋กœ ์กฐ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ํŒŒ์ผ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด์„œ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ๊ณ , ๋งŒ๋“ค๊ณ , ๋ณต์‚ฌํ•˜๊ณ , ์ด๋™ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.ํŒŒ์ผ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์ฃผ๋กœ ์ ‘๊ทผํ•ด ์‚ฌ์šฉํ•  ๋””๋ ‰ํ† ๋ฆฌ๋“ค์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋ฉด์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€ ์•Œ์•„๋ณด์ž.์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉดfile system๊ณผ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šคfile๊ณผ directory๋ฅผ locate, create, copy, move ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.file system ๋‚ด ์ €์žฅ์‹œ ๊ฒฝ๋กœ(path) ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” NSURL์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ง€์ •iCloud ๋‚ด ์ €์žฅ๋˜์–ด ์žˆ..
[iOS] iOS data storage - 1. Sandbox(์ƒŒ๋“œ๋ฐ•์Šค) [Contents]SandBox ?SandBox ๊ตฌ์กฐBundle ContainerData ContainerDocumentLibrarytmpiCloud Container1. SandBox ?์•ฑ์„ ์ƒˆ๋กœ ์„ค์น˜ํ–ˆ์„ ๋•Œ, ๊ฐ„ํ˜น ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•ด๋‹ฌ๋ผ๋Š” Alert์€ ๋ณธ ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ๊ฐ ์•ฑ๋ณ„๋กœ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰๋˜๋Š”๋ฐ,๊ฐ ์•ฑ์ด ํŠน์ • ๋ฐ์ดํ„ฐ๋‚˜ ํ•˜๋“œ์›จ์–ด์— ์ ‘๊ทผํ•˜๋ ค๋ฉด *๊ถŒํ•œ (Permission)*์„ ์š”์ฒญํ•ด์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์Šน์ธํ•ด์•ผ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ App Sandbox๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ถŒํ•œ๊ณผ ์ ‘๊ทผ ๋ฒ”์œ„ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๊ฐ๊ฐ์˜ ์•ฑ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์ด ์ œ๊ณต๋˜๋ฉฐ, ์•ฑ์€ ์ด ํ™˜๊ฒฝ ์™ธ๋ถ€์˜ ์‹œ์Šคํ…œ ํŒŒ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ์•ฑ์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค...
์˜ค๋ธ”์™„์ฑŒ๋ฆฐ์ง€ - ํ‹ฐ์Šคํ† ๋ฆฌ(Tistory) ๋ธ”๋กœ๊ทธ ์ฑŒ๋ฆฐ์ง€ ๋„์ „! ํ‹ฐ์Šคํ† ๋ฆฌ์—์„œ ์‚ผ์ฃผ๋™์•ˆ ๋งค์ผ ๊ธ€์“ฐ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค!!!!์ด๋ฒคํŠธ๋Š” ๋ฐ”๋กœ๋ฐ”๋กœ ์ž‘์‹ฌ์‚ผ์ฃผ  '์˜ค๋ธ”์™„ ์ฑŒ๋ฆฐ์ง€'์˜ค๋Š˜ ๋ธ”๋กœ๊ทธ ์™„๋ฃŒ ์ฑŒ๋ฆฐ์ง€๋Š” 11์›” 7์ผ๋ถ€ํ„ฐ 11์›” 27์ผ๊นŒ์ง€์•ฝ ์‚ผ์ฃผ๋™์•ˆ ์ง„ํ–‰ ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ ํ™•์ธ!! ์ž‘์‹ฌ์‚ผ์ฃผ ์˜ค๋ธ”์™„ ์ฑŒ๋ฆฐ์ง€์˜ค๋Š˜ ๋ธ”๋กœ๊ทธ ์™„๋ฃŒ! 21์ผ ๋™์•ˆ ๋งค์ผ ๋ธ”๋กœ๊ทธ์— ๊ธ€ ์“ฐ๊ณ  ๊ธ€๋ ฅ์„ ํ‚ค์›Œ๋ณด์„ธ์š”.www.tistory.com  ์ฐธ์—ฌ ๋ฐฉ๋ฒ•์ฑŒ๋ฆฐ์ง€ ๊ธฐ๊ฐ„๋™์•ˆ ๋งค์ผ ํฌ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ์ด๊ณ ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ ์ถ”ํ›„ ์•ˆ๋‚ด ์˜ˆ์ •์ด๋‹ค.์–‘์‚ฐํ˜• ํฌ์ŠคํŒ…๊นŒ์ง€ ์ž˜ ๊ตฌ๋ณ„ํ• ์ง€ ๊ธฐ๋Œ€๋œ๋‹ค.์–‘์งˆ์˜ ๊ธ€์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ์ง€!! ์ฃผ 1ํšŒ์”ฉ 8์ฃผ๋ฅผ ์จ์•ผํ•˜๋Š” ๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ์ฑŒ๋ฆฐ์ง€์™€ ๋‹ค๋ฅด๊ฒŒ Tistory๋Š” 3์ฃผ๊ฐ„ ๋งค์ผ ์จ์•ผํ•œ๋‹ค!!!! ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€...?โญ๏ธ ์ฐธ์—ฌ ํ˜œํƒ ์ž…๋‹ˆ๋‹ค.โญ๏ธ ์ฑŒ๋ฆฐ์ง€ ์„ฑ๊ณต ์ผ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ถ”์ฒจํ•ด์„œ ์ƒํ’ˆ..
Mac(๋งฅ) ํ•„์ˆ˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๐Ÿ’š ๋งฅ์— ์„ค์น˜ํ•œ ํ•„์ˆ˜ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋กโœ”๏ธ Rectangle - ํ™”๋ฉด ๋ถ„ํ•  ์•ฑ RectangleMove and resize windows in macOS using keyboard shortcuts or snap areas. The official page for Rectangle.rectangleapp.com ํ•œ ํ™”๋ฉด์— ์•ฑ์„ n๊ฐœ ์ด์ƒ ๋„์›Œ์•ผ ํ•  ๋•Œ ํ•„์ˆ˜! ์›๋ž˜ Spectacle ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ๋”์ด์ƒ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค ใ… ใ…  ๋น ์ž‰*์„ค์ • ๊ฐ’ ๊ธฐ์–ตํ•˜๊ธฐ - ๋กœ๊ทธ์ธ ์‹œ ์‹คํ–‰์— ํ•„์ˆ˜ ์ฒดํฌ!! โœ”๏ธ ๋กœ์ง€ํ… ๋งˆ์šฐ์Šค(MX Anywhere 3S) ์„ค์ • ์•ฑ Logi Options+(Plus): ๋กœ์ง€ํ… ์ „์šฉ ์ปค์Šคํ…€ ์•ฑLogi Options Plus ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋กœ์ง€ํ… ์žฅ์น˜๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด๋ณด์„ธ์š”. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ ๋“ฑ์„ ..
[iOS, Swift] ์ด๋ฏธ์ง€(ํŒŒ์ผ) ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•˜๊ธฐ(multipart/form-data), ์‚ฌ์ง„์•จ๋ฒ”(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์—์„œ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ(UIImagePickerController) โœ”๏ธ GOAL ๐Ÿฉถ Step 1. ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์‚ฌ์ง„์•จ๋ฒ”(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)์— ์ ‘๊ทผ 1-1. ์„ ํƒํ•œ ์ด๋ฏธ์ง€๋ฅผ imageView๋กœ ๋ณด์—ฌ์ค€๋‹ค. 1-2. ์„ ํƒํ•œ ์ด๋ฏธ์ง€ ํ˜น์€ ์นด๋ฉ”๋ผ๋กœ ์ฐ์€ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•œ๋‹ค. ๐Ÿฉถ Step 2. ์„œ๋ฒ„ ํ†ต์‹  ํ›„ response url๋กœ imageView์— ๋ณด์—ฌ์ค€๋‹ค. โœ”๏ธ SETTING 1. Info.plist ์ˆ˜์ • privacy - Photo Library Usage Description, Privacy - Camera Usage Description ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์ง„์•จ๋ฒ”, ์นด๋ฉ”๋ผ ์ ‘๊ทผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ—ˆ๊ฐ€ + Description์— ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ๊ธฐ์žฌํ•œ๋‹ค. ์ด๋•Œ, ์ด์œ ๋Š” ์นด๋ฉ”๋ผ, ์•จ๋ฒ” ํ—ˆ๊ฐ€ ์š”์ฒญ ์•Œ๋ฆผ ์ฐฝ์— ๋ฉ”์‹œ์ง€๋กœ ๋‚˜์˜ค๋Š”๋ฐ, ๋ถˆ์นœ์ ˆํ•œ ๊ฒฝ์šฐ, ์ถ”ํ›„ ์•ฑ์Šคํ† ์–ด์— ์•ฑ ๋ฐฐํฌํ•  ๋•Œ, ๋ฆฌ..

๋ฐ˜์‘ํ˜•