๐
Smile BlogSmile Blog : ์๊ณ ์ฝ์๋ค
๐
Index
๊ธฐ๋ฅ ๋ฐ ์๊ฐ
๋ฉ์ธ ํ์ด์ง
์ฌ์ฉ์์ ๋ฐฐ๊ฒฝ ํ๋ฉด๊ณผ ๋ธ๋ก๊ทธ ๊ธ ๋ฆฌ์คํธ๋ฅผ ํ์ธํ ์ ์๋ค.
keyword: UITableView, CustomView
๊ธ ๋ฑ๋ก
TabBarController๋ฅผ ํตํ ๋ชจ๋ฌ ๋ทฐ ์ ํ ํ ์ ๊ธ ์์ฑ์ ํ ์ ์๋ค. ์ ๋ ฅํด์ผํ ํญ๋ชฉ์ด ์ ๋ถ ์์ฑ๋์ด์ผ ๋ฑ๋ก์ด ๊ฐ๋ฅํ๋ค. ๊ธ์ด ์์ฑ๋๊ฑฐ๋, ์ทจ์๋๋ฉด ์ด์ ํ๋ฉด์ผ๋ก ์ ํ๋๋ค.
keyword: UITabBarController-Modal, DB Query
์ ๊ธ ์ฐ๊ธฐ | ์ผ๋ถ ๋ฏธ์ ๋ ฅ ์ | ํ๋ฉด ์ ํ | |
---|---|---|---|
๊ธ ์์ ๋ฐ ์ญ์
๋ค๋น๊ฒ์ด์ ๋ฐ ๋ฒํผ์ ํตํด ๊ธ์ ์์ ํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ค.
์์ ์์ ๊ฒ์๊ธ ๋ทฐ ์ ํ๋๊ณ , ์ญ์ ์์ ๊ฒ์๊ธ ๋ฆฌ์คํธ๋ก ํ๋ฉด์ด ์ ํ๋๋ค.
keyword: Notification Center, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ, DB Query
์์ ์์ฒญ | ๊ธ ์์ ํ๋ฉด | ์๋ฃ ์ ํ๋ฉด ์ ํ | |
---|---|---|---|
์ญ์ ์์ฒญ | ์์ฒญ ์ ์ผ๋ฟ ๋ทฐ ๋์ | ์๋ฃ ์ ํ๋ฉด ์ ํ | |
๋๊ธ ๊ธฐ๋ฅ
์ ํ๋ ํฌ์คํธ์ ๋๊ธ์ ์ธ ์ ์๋ค.
keyword: NotificationCenter, ScrollView, DB Query
ํค๋ณด๋ ON | ํค๋ณด๋ OFF | ๋๊ธ ๋ฑ๋ก | |
---|---|---|---|
๋ง์ด ํ์ด์ง
์ด๋ฏธ ๋ก๊ทธ์ธ์ด ๋์ด ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ ์ ์ค์ ์ ์ํด ์ถ๊ฐ ๊ตฌํํจ. ์ ๋ณด ์์ ์์ฒญ์ ๋ฐ๋ฅธ ์ผ๋ฟ ๋ทฐ ๊ตฌํ ์ธ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ ํ์ง ์์์.
๋ง์ด ํ์ด์ง | ์ ๋ณด ์์ ์์ฒญ |
---|---|
์ค๊ณ ๋ฐ ๊ตฌํ
ํ๋ก์ ํธ ๊ตฌํ ์ฌํญ
Project | Smile Blog |
---|---|
UI ๊ตฌํ | UIKit |
์ํคํ ์ณ | MVC |
๋ก์ปฌ ๋ฐ์ดํฐ ์ ์ฅ์ | SQLite |
๐
UML
UML ๋ด ๋ทฐ์ ๊ตฌ์ฑ ์์๋ ์ ์ธ.
๐
๋ฐ์ดํฐ Flow
๋ธ๋ก๊ทธ ์๋น์ค๋ ์ค์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ณผ์ ์ด ์๊ตฌ๋๊ธฐ ๋๋ฌธ์ ์๋ฒ๊ฐ ๊ตฌํ๋์ง ์์์ผ๋, ์ค์ ์๋ฒ ๊ตฌ์ถ์ด ๋ ๊ฒ์์ ๊ณ ๋ คํ์ฌ, ๋ฐ์ดํฐ ์์ฒญ์ ์ํ ๊ณผ์ ์ ๋ฏธ๋ฆฌ ๊ตฌํํ๋ค.
ํ๋ MOCK์ ์ฌ์ฉํ ํต์ ๋ก์ง์ ๊ตฌํํ๋๋ผ๋ ์ค์ ํต์ ์์ด๋ ๋ธ๋ก๊ทธ ๊ธ์ ๋ํ CRUD๊ฐ ์ด๋ ต๋ค๊ณ ํ๋จ์ด ๋์ด, ๋ฐ์ดํฐ ์์ฒญ์ ๋์ฒดํ๊ธฐ ์ํด ๋ก์ปฌ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ
- sqlite3 [O]
- coreData [X]
=> SQLite
์ ์ ๊ธฐ์ค
- CoreData๋ฅผ ํ์ฉํ ํ๋ก์ ํธ ๊ฒฝํ
โญ๏ธ ๋ฐ๋ผ์ SQLite๋ ์ฌ์ฉํด๋ณด๊ณ ์ถ์๋ค. ์ฟผ๋ฆฌ๋ฌธ์ ์ง์ ๋ค๋ฃจ๋ SQLite ์ฌ์ฉํด DB๋ฅผ ๊ตฌ์ฑ. ๋ด๋ถ์ ์ผ๋ก SQLite ์ฌ์ฉํ๋ ๊ฒ์ ๋์ผํ์ง๋ง, ์ง์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ผ ํ๋ค!์ด๋ฒ ๊ธฐํ์ ๋ง์ด ๋ค๋ค๋ณด์!
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ
-
Post Table
column ๋ด์ฉ ์์ฑ post_num ๊ธ ๋ฒํธ ์ ์ฅ / AutoIncrease INTEGER post_title ๊ธ ์ ๋ชฉ ์ ์ฅ TEXT post_content ๊ธ ๋ด์ฉ ์ ์ฅ TEXT post_date ๊ธ ์์ฑ ๋ ์ง ๋ฐ ์๊ฐ ์ ์ฅ TEXT -
comment Table
column ๋ด์ฉ ์์ฑ comment_num ๋๊ธ ๋ฒํธ ์ ์ฅ / AutoIncrease INTEGER comment_user ๋๊ธ ์์ฑ์ ์ ์ฅ TEXT comment_post ๋๊ธ์ด ์์ฑ๋ ๊ธ post_num ์ ์ฅ INTEGER comment_content ๋๊ธ ๋ด์ฉ ์ ์ฅ TEXT comment_date ๋๊ธ ์์ฑ ๋ ์ง ๋ฐ ์๊ฐ ์ ์ฅ TEXT
๐
์ํคํ
์ณ
MVC(Model-View-Controller)
MVC ๊ตฌ์กฐ๋ก ์์ฑํ ๊ฒฝ์ฐ, ViewController๊ฐ ํ๋ ์ญํ ์ด ๋ง์์ง๋๋ฐ(Massive View Controller) ํด๋น ๊ตฌ์กฐ์์ ์ต๋ํ ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ณตํต๋ ๊ตฌํ์ ๊ฒฝ์ฐ, Protocol์ Extension์ ํ์ฉํ๋ค.
๐
๋ ์ด์์ ๊ตฌ์ฑ
-
์ฝ๋๋ฅผ ํ์ฉํ ๋ ์ด์์ ๊ตฌ์ฑ
=>
ํ์ ์
์ธํฐํ์ด์ค ๋น๋์ ์ฌ์ฉ์ผ๋ก ์๊ธธ ์ ์๋ ์ฝ๋ ๊ฐ ์ถฉ๋์ ๋ง๋ค ์ ์๋ ๋จ์ ๋ณด์ํ๊ธฐ ์ํจ.
๐
๋๋ ํ ๋ฆฌ ๊ตฌ์ฑ ๋ฐ ์ญํ
Scene
protocol | ์ญํ |
---|---|
ViewConfiguration |
ViewController์์ ์ฑํ ํ ๋ทฐ์ ๊ณ์ธต, ์ ์ฝ, ์ค์ ์ ํ๋๋ก ํจ. |
PostReloadable |
Post๋ฅผ ๊ฐ์ง ์ผ๋ถ ViewController์์ ์ฑํ ํ MainView ๋ด ํ ์ด๋ธ๋ทฐ Reload ์์ฒญ. |
class | ์ญํ |
---|---|
IntroduceCell |
MainViewController์์ ๋ธ๋ก๊ทธ ์๊ฐ ์ ์ ๊ตฌ์ฑ |
MainTableViewCell |
MainViewController์ ๋ธ๋ก๊ทธ ํฌ์คํธ ์ ์ ๊ตฌ์ฑ |
DetailViewContentCell |
DetailViewController ๋ด ๋ธ๋ก๊ทธ ๊ธ์ ๊ตฌ์ฑ |
DetailViewCommentCell |
DetailViewController ๋ด ๋ธ๋ก๊ทธ ๋๊ธ์ ๊ตฌ์ฑ |
class | ์ญํ |
---|---|
MainTabBarController |
ํญ ๋ฐ ๊ตฌ์ฑ |
MainViewController |
๋ธ๋ก๊ทธ ํฌ์คํธ ๋ฆฌ์คํธ ํ๋ฉด ๊ตฌ์ฑ |
NewPostViewController |
์ ๊ธ ์์ฑ ํ๋ฉด ๊ตฌ์ฑ |
DetailViewController |
ํฌ์คํธ ํ๋ฉด ๊ตฌ์ฑ |
UpdatePostViewController |
ํฌ์คํธ ์์ ํ๋ฉด ๊ตฌ์ฑ |
UserSettingViewController |
์ฌ์ฉ์ ํ๋ฉด ๊ตฌ์ฑ(๋ฏธ๊ตฌํ) |
Model
struct | ์ญํ |
---|---|
Post |
๊ธ ๊ตฌ์ฑ |
Comment |
๋๊ธ ๊ตฌ์ฑ |
Module
class | ์ญํ |
---|---|
FMDBManager |
SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ ํ, ๋ฐ์ดํฐ CRUD |
๐
์์กด์ฑ ๊ด๋ฆฌ ๋๊ตฌ ์ฌ์ฉ
SPM(Swift Package Manager)
- FMDB : DB ๊ตฌ์ฑ์ ์ํด ์ฌ์ฉ
- ๋ด๋ถ์ ์ผ๋ก SQLite3๋ฅผ ์ฌ์ฉ.
Trouble shooting
1. ๋ชจ๋ฌ ๋ทฐ์ ๋ถ์ฌ
Navigation Controller1 - (root 1) -> View Controller A -(modal)-> Navigation Controller 2 -(root 2)-> View Controller B(UIVIewController) ์ ๊ณผ์ ์ผ๋ก ๋ชจ๋ฌ์ ๋์ฐ๋ ๊ณผ์ ์์ root 2์ ํด๋นํ๋ navigation Controller์์ navigation Item์ด ์ ๋๋ก ์ถ๋ ฅ๋์ง ์๋ ๋ชจ์ต์ ํ์ธํ ์ ์์๋ค. View Controller B๋ฅผ Navigation Controller 2๋ฅผ root๋ก ๊ฐ์ธ์คฌ์์๋ ๋ถ๊ตฌํ๊ณ ์ ๋๋ก ์ถ๋ ฅ์ด ๋์ง ์์์ ๋นํฉํ๋ค.
๋ฌธ์ ์ํฉ | ์ํ๋ ๋ชจ์ต |
---|---|
๋ค๋น๊ฒ์ด์ 2๋ฅผ ๋ชจ๋ฌ๋ก ๋์ธ ๋, View Controller B์์๋ NavigationBar์ด ๋์ค์ง ์๋๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
์ ๊ธ์ ์์ฑํ๋ ๋ทฐ๋ ์๋ก์ด ํ๋ฆ์ ๊ฐ์ ธ๊ฐ์ผํ๋๋ฐ, ๊ธฐ์กด ๋ค๋น๊ฒ์ด์ ์คํ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ทฐ์ ๊ตฌ์ฑ์์ ์ผ๊ด์ฑ์ ํด์น ์ ์๋ค๊ณ ์๊ฐํด modal ๋ทฐ๋ก์ ๊ตฌํ์ ์๊ฐํ์. ํ์ง๋ง ๋ณธ ๋ชจ๋ฌ์ ์ฑ์์ ์ ๊ธ ์์ฑ ์ธ์ ํ ๊ธฐ๋ฅ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ํฉ์ ๋ทฐ์ ์ง์ ๋ค๋น๊ฒ์ด์ ๋ฐ๋ฅผ ์์ฑํด์ฃผ๋ ๋ฐฉ์์ ํ์ฉํด ๋ทฐ๋ฅผ ๊ตฌ์ฑํ๋ค. Modal ์ ๋๋ก ๋จ์ง ์๋ ๋ฌธ์ ์ ๊ด๋ จ ์ฐธ๊ณ ๋งํฌ
2. ํค๋ณด๋์ ์ํ ํ ์คํธ๋ทฐ ๊ฐ๋ ค์ง
๋ณธ๋ฌธ์ ๋ด์ฉ์ด ๊ธธ์ด์ง ๊ฒฝ์ฐ, ํ๋จ์ ํค๋ณด๋ ์์ญ์ ์ํด ๋ณธ๋ฌธ์ ์์ญ์ด ์ ๋๋ก ๋ณด์ด์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์. ํค๋ณด๋๊ฐ ์ฌ๋ผ์ ์๋ ๊ฒฝ์ฐ, NotificationCenter์ ํ์ฉํด ํด๋น ํ ์คํธ ๋ทฐ์ ์ตํ๋จ์ด ํค๋ณด๋๋ณด๋ค ์๋ก ์ฌ๋ผ๊ฐ ์ ์๋๋ก ์ค์ ํ๋ค. ๋ํ ํค๋ณด๋๊ฐ ๋ด๋ ค๊ฐ๋ ์ํฉ์ ์ด์ ๋ฐ๋๋ก ํ ์คํธ ๋ทฐ๊ฐ ๋ค์ ๋ถ๋ชจ ๋ทฐ์ ์ตํ๋จ ์์ญ๊ณผ ๋์ผํ ๋ ์ด์์ ์ ์ฝ ๊ฐ์ ๊ฐ์ง๋๋ก ํ๋ค.
๋ฌธ์ ์ํฉ | ํด๊ฒฐ ์ํฉ |
---|---|
๊ธ ์์ฑ, ์์ , ๋๊ธ ์์ฑ ๋ชจ๋ ํค๋ณด๋์ ์ํ ๋ ์ด์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ผ ํด์ ์ฌ๋ฌ ์ํฉ์ ๋ง์ด ๊ฒฝํํ ์ ์์๋ค. ํ์ง๋ง NotificationCenter์ ์ฌ์ฉํ ๊ฒฝ์ฐ, Listener ๋ชจ๋์๊ฒ ์ ๋ฌ๋๋ ์ ์ ๊ณ ๋ คํ๋ฉด ๋๋ฌด ๋ง์ด ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ์ฝ๋ ์ ํ์ด ๋ง์ด ๋ฐ์ํ ์ ์์ด delegate Pattern๋ ๊ณ ๋ คํด๋ด์ผ๊ฒ ๋ค.