๋ ์ธ ๋ ๋ฌด์จ ์๊ฐํด? ๋๋ฅผ ์ํ ์๋น๊ธฐ๋ก, Pay fOr ME
์๋น์ ์ ๋ต์ด ์์๊น์?
๋ฌด์กฐ๊ฑด ์ ์ฝํ๋ ๊ฒ๋ ์๋๊ณ ๋์น๊ฒ ์ฌ์ฉํ๋ ๊ฒ๋ ์๋, ๋์ ๊ธฐ์ค์ ๋ง์กฑ์ค๋ฌ์ธ ๋ ํ๋ณตํ ์๋น๊ฐ ๋๋ค๊ณ ๋ฏฟ์ต๋๋ค.
๋ชฉํ์ ๋ฐ๋ฅธ ์๋น ๊ธฐ๋ก, ๋์ ์๋น ๊ฐ์ ๊ธฐ๋ก, ํ๊ณ , ์น๊ตฌ์ ์๋น ๊ณต๊ฐ, ๋ง์๋ฉ๋ก ๋ชจ์ผ๊ธฐ, ํธ์ ์๋ฆผ์ ํตํด
#๊ฐ์ ๊ธฐ๋ก์ ํตํ ์ฑ์ฅ
#์ฃผ๋์ ์ธ ์๋น
#ํจ๊ป ์ฑ์ฅํ๋ ์๋น
๋ฅผ ๊ฒฝํ ํด๋ณด์ธ์.30th THE SOPT APPJAM
ํ๋ก์ ํธ ๊ธฐ๊ฐ : 2022.07.02 ~ 2022.07.23
์์ฃผ | ์ฃผํ | ์ ์ง |
@jane1choi | @wngus4296 | @yujindonut |
๋ค์ด๋ฐ
- ํด๋์ค/๊ตฌ์กฐ์ฒด ์ด๋ฆ์ UpperCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
ํจ์์ ๋ณ์์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
๋ฒํผ๋ช ์๋ Btn ์ฝ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
๋ชจ๋ IBOutlet์๋ ํด๋น ํด๋์ค๋ช ์ ๋ค์ ๋ถ์ ๋๋ค.
-
๊ธฐ๋ณธ ํด๋์ค ํ์ผ์ ์์ฑํ๊ฑฐ๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋๋ ์ฝ์ด ๊ท์น์ ๋ฐ๋ผ ๋ค์ด๋ฐํฉ๋๋ค.
-
์์
TV
TVC
CV
CVC
VC
NVC
TBC
TableView -> TV TableViewCell -> TVC CollectionView -> CV CollectionView Cell -> CVC ViewController -> VC NavigationController -> NVC TabbarController -> TBC
์ข์ ์
@IBOutlet weak var pomeBtn: UIButton! @IBOutlet weak var pomeBackMainView: UIView! @IBOutlet weak var writeMainCV: UICollectionView!
๋์ ์
@IBOutlet weak var ScrollView: UIScrollView! @IBOutlet weak var pomeCollectionView: UICollectionView! @IBOutlet weak var tagCollectionView: UICollectionView! @IBOutlet weak var tableview: UITableView!
-
set
โ setDelegate (๊ธฐ๋ฅ๊ด๋ จ ํจ์)configure
โ configureUI (UI๊ด๋ จ ํจ์)IBAction
โ tapDismissBtn() : ๋จ์ ํด๋ฆญ, presentResultVC() : ํ๋ฉด์ ํ ๋ฉ์๋(push, present, pop, dismiss)
์ฃผ์
// MARK: Properties
// MARK: IBOutlet
// MARK: IBAction
// MARK: Life Cycle
- Extension Part
// MARK: - UI
// MARK: - Custom Methods
// MARK: - @objc
// MARK: - Delegate
// MARK: - Protocol
// MARK: - Network
- ETC
/// ~ ํ๋ ๋ฉ์๋ (ํจ์๋ ํญ์ ๋ฌธ์ํ)
// TODO: - ์์ผ๋ก ํ ์ผ์ TODO๋ก ์ ์ด๋๊ธฐ
๊ณต๋ฐฑ
-
ํญ ์ฌ์ด์ฆ๋ 4๋ก ์ฌ์ฉํฉ๋๋ค.
-
ํ ์ค์ ์ต๋ ๊ธธ์ด๋ 80์๋ก ์ ํํฉ๋๋ค.
-
๋ถํ์ํ ๊ณต๋ฐฑ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
-
์ต๋ tab depth ์ ํ
- tab์ ์ต๋ depth๋ 4๋ก ์ ํํฉ๋๋ค.
- ์ด ์ด์์ผ๋ก depth๊ฐ ๊ธธ์ด์ง๋ฉด ํจ์๋ฅผ ํตํด ๋๋ ์ ์๋๋ก ํฉ๋๋ค.
- ๊ทธ ์ด์์ผ๋ก ๊ฐ์ ํ ์ ์๋ค๊ณ ํ๋จ๋๋ ๊ฒฝ์ฐ, ํ์๋ค๊ณผ์ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ํตํด ๊ฐ์ ํฉ๋๋ค.
-
๊ดํธ ์ฌ์ฉ
- (if, while, for)๋ฌธ ๊ดํธ ๋ค์ ํ์นธ์ ๋์ฐ๊ณ ์ฌ์ฉํฉ๋๋ค.
if (left == true) { // logic }
-
๋์ด์ฐ๊ธฐ
let a = 5; // ์์ชฝ ์ฌ์ด๋ก ๋์ด์ฐ๊ธฐ ํ๊ธฐ if (a == 3) { // logic } else { }
dictionary [Key: Value]
๊ธฐํ ๊ท์น
- ์ธ๋ถ์์ ์ฌ์ฉ๋์ง ์์ ๋ณ์๋ ํจ์๋
private
์ผ๋ก ์ ์ธํฉ๋๋ค. - viewDidLoad() ์ ๊ฐ์ ์๋ช
์ฃผ๊ธฐ ํจ์๋ค์๋
function
๋ง ์์น์ํต๋๋ค. - ๋ถํ์ํ self๋ ์ง์ํฉ๋๋ค. ์์ธ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ๋๋ ์์ฒด ํจ์์ self๋ฅผ ๋ถ์ฌ์ค๋๋ค.
- extension ์ ์ฌ์ฉํด ๊ธฐ๋ฅ ๋จ์๋ก ์ฝ๋๋ฅผ ๋ ๊ฐ๋
์ฑ์๊ฒ ๊ตฌ๋ถํฉ๋๋ค.
- ๊ธฐ๋ณธ ํด๋์ค์ ๋ฐฐ์น๋๋ ๊ฒ:
IBOutlet
,Properties
,Life Cycle
,IBAction
- ์ด์ธ์ ์ฝ๋๋ extension์ ๋ฐฐ์นํฉ๋๋ค.
- ๊ธฐ๋ณธ ํด๋์ค์ ๋ฐฐ์น๋๋ ๊ฒ:
๐ธ POME-iOS Foldering Convention ๐ธ
POME-iOS
โ
โโโ Global
โ โโโ PublicData
โ โ โโโ AppModel
โ โโโ Factory
โ โโโ Class
โ โโโ Struct
โ โโโ Protocol
โ โโโ UIComponent
โ โโโ Extension
โ โโโ Font
โ โโโ LaunchScreen.storyboard
โ
โโโ Network
โ โโโ Bases
โ โ โโโ TargetType.swift
โ โ โโโ NetworkResult.swift
โ โโโ APIEssentials
โ โ โโโ APIConstants.swift
โ โ โโโ NetworkConstants.swift
โ โ โโโ GenericResponse.swift
โ โโโ Services
โ โโโ APIModels
โ โโโ APIManagers
โโโ Screen
โ โโโ Write
โ โโโ SB
โ โโโ VC
โ โโโ Cell
โ โ โโโ TVC
โ โ โโโ CVC
โ โโโ Xib
โโโ Support
โโโ Info.plist
โโโ AppDelegate.swift
โโโ SceneDelegate.swift
โโโ Assets.xcassets
โโโ Colorsets.xcassets
[CHORE] ์ฝ๋ ์์ , ๋ด๋ถ ํ์ผ ์์
[FEAT] ์๋ก์ด ๊ธฐ๋ฅ ๊ตฌํ
[ADD] Feat ์ด์ธ์ ๋ถ์์ ์ธ ์ฝ๋ ์ถ๊ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ, ์๋ก์ด ํ์ผ ์์ฑ ์, ์์
์ถ๊ฐ
[HOTFIX] issue๋, QA์์ ๊ธํ ๋ฒ๊ทธ ์์ ์ ์ฌ์ฉ
[FIX] ๋ฒ๊ทธ, ์ค๋ฅ ํด๊ฒฐ
[REMOVE] ์ธ๋ชจ์๋ ์ฝ๋ ์ญ์
[DOCS] README๋ WIKI ๋ฑ์ ๋ฌธ์ ๊ฐ์
[MOVE] ํ๋ก์ ํธ ๋ด ํ์ผ์ด๋ ์ฝ๋์ ์ด๋
[RENAME] ํ์ผ ์ด๋ฆ, ๋ณ์๋ช
, ํจ์๋ช
๋ณ๊ฒฝ์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
[REFACTOR] ์ ๋ฉด ์์ ์ด ์์ ๋ ์ฌ์ฉํฉ๋๋ค
๐ธ POME-iOS Gitflow ๐ธ
1. Issue๋ฅผ ์์ฑํ๋ค.
2. ๊น ์ปจ๋ฒค์
์ ๋ง๊ฒ Branch๋ฅผ ์์ฑํ๋ค.
3. Add - Commit - Push - Pull Request ์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
4. Pull Request๊ฐ ์์ฑ๋๋ฉด ์์ฑ์ ์ด์ธ์ ๋ค๋ฅธ ํ์์ด Code Review๋ฅผ ํ๋ค.
5. Code Review๊ฐ ์๋ฃ๋๋ฉด Pull Request ์์ฑ์๊ฐ develop Branch๋ก merge ํ๋ค.
6. merge๋ Branch๋ ์ญ์ ํ๋ค.
7. ์ข
๋ฃ๋ Issue์ Pull Request์ Label๊ณผ Project๋ฅผ ๊ด๋ฆฌํ๋ค.
- ๋ธ๋์น ๋จ์ = ์ด์ ๋จ์ = PR๋จ์
- ๋ธ๋์น๋ ๋ทฐ ๋จ์๋ก ์์ฑํฉ๋๋ค.
- ๋ธ๋์น ๊ท์น โ feature/#์ด์๋ฒํธ-(UI/Func)-ํญ-๊ธฐ๋ฅ๊ฐ๋ต์ค๋ช
ex) feature/#1-UI-home-navibar
- ํญ์ด๋ฆ - Write, Remind, Mate, Mypage
- ๊ณตํต์ ์ธ ๊ฒ ์์
- Global
- feature/chore/fix/network
- โจย [FEAT] - ๊ธฐ๋ฅ ๊ตฌํ
- ๐จย [FIX] - ๋ฒ๊ทธ ์์
- โป๏ธย [REFACTOR] - ์ฝ๋ ๋ฆฌํฉํ ๋ง(๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๋ง ์ฝ๋์ ํฅ์)
- โ ย [CHORE] - ์์
- โ [ADD] - ์ธํ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
- ํ๋ก์ ํธ ์ธํ
- ๊ณตํต ์ปดํฌ๋ํธ:
PomeBtn
,PomeNaviBar
,PomeTextField
,PomeMaskedImageView
,PomeAlertVC
๊ตฌํ๋ฐฉ๋ฒ
Custom Class๋ก ์์ฑํด๋๊ณ ์ปดํฌ๋ํธ ์คํ์ผ ์ ์ฉ
- ์นด์นด์ค ๋ก๊ทธ์ธ, ํ์๊ฐ์
๊ตฌํ๋ฐฉ๋ฒ
์นด์นด์ค์ ๋ก๊ทธ์ธ ์์ฒญ ํ ์์ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์ ์๋ฒ์ ์ ๋ฌ, ์๋ฒ์์ ์์ ํ ํฐ์ ์ด์ฉํด ๊ธฐ์กด ์ ์ ์ธ์ง ํ๋จํด ํ์๊ฐ์ or ๋ก๊ทธ์ธ์ผ๋ก ๋๊ธธ์ง ํ๋จ
- ์น๊ตฌ ๊ฒ์ ๋ฐ ์ถ๊ฐ
๊ตฌํ๋ฐฉ๋ฒ
๊ฒ์ํ๊ธฐ ๋ฒํผ ํด๋ฆญ ์ ์๋ฒํต์ . res๋ฅผ ์ด์ฉํด tableview์ ๊ฒฐ๊ณผ ๋ฟ๋ ค์ค
- ์น๊ตฌ ๊ฐ์ ๋จ๊ธฐ๊ธฐ ํ๋กํ
๋ทฐ
๊ตฌํ๋ฐฉ๋ฒ
์ ๋ง๋ค์ offset.y ๊ฐ์ ๋ฐ์์ ์ํ๋ ์ขํ์ ์ด๋ชจ์ง ์ ํ ๋ทฐ ๋ณด์ฌ์ค
- ๊ณตํต ์ปดํฌ๋ํธ:
SpendCVC
,PomeHalfModalVC
๊ตฌํ๋ฐฉ๋ฒ
๋ฐํ ์ํธ UIPresentationController๋ฅผ ์ฌ์ฉํด์ ํ๋ฉด ์ ํ์ผ๋ก ๊ตฌํ
- ๊ธฐ๋กํญ ๋ฉ์ธ
๊ตฌํ๋ฐฉ๋ฒ
์๋จ ์นดํ ๊ณ ๋ฆฌ CV, ์นดํ ๊ณ ๋ฆฌ ์ ์ธํ ๋ถ๋ถ CV ์ด 2๊ฐ๋ก ๊ตฌ์ฑ, ์๋จ ์นดํ ๊ณ ๋ฆฌ CV์์ ์ ํํ ๋ชฉํ์ ๋ฐ๋ผ ์๋์ ๋ฐ์ดํฐ ์๋ฒ ํต์
- ๊ธฐ๋กํญ ๋๋์๋ณด๊ธฐ
๊ตฌํ๋ฐฉ๋ฒ
1๊ฐ์ CV๋ก ๊ตฌ์ฑ
- ๊ธฐ๋กํญ ๋ชฉํ ์ถ๊ฐ
๊ตฌํ๋ฐฉ๋ฒ
FSCalendar ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ
- ๊ธฐ๋ก ๊ธ์ฐ๊ธฐ
๊ตฌํ๋ฐฉ๋ฒ
viewWillAppear์์ ๋ชฉํ ์นดํ ๊ณ ๋ฆฌ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ ธ์์ ์ ์ฅํด๋๊ณ ๋ชฉํ ์ ํ ๋ฐํ ์ํธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฟ๋ ค์ค
- ๊ณตํต ์ปดํฌ๋ํธ:
GoalCardCVC
๊ตฌํ๋ฐฉ๋ฒ
UICollectionView ์ด์ฉ
- ํ๊ณ ํญ
๊ตฌํ๋ฐฉ๋ฒ
- ์์ title๋ถ๋ถ์ ์ ์ธํ๊ณ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์ section๋ณ๋ก ์ ์ ์์ฑ
- ๊ฐ์ ํํฐ๋ง ๊ธฐ๋ฅ์ ์ํ ๋ถ๊ธฐ์ฒ๋ฆฌ - delegate ์ด์ฉํ๊ธฐ
- ๋ฐํ ๋ค๋น๊ฒ์ด์ ๋์์ ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ
- ์น๊ตฌ ํญ
๊ตฌํ๋ฐฉ๋ฒ
- ์์ title๋ถ๋ถ์ ์ ์ธํ๊ณ ์คํฌ๋กค์ด ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์ section๋ณ๋ก ์ ์ ์์ฑ
- ๊ฐ์ ํํฐ๋ง ๊ธฐ๋ฅ์ ์ํ ๋ถ๊ธฐ์ฒ๋ฆฌ - delegate ์ด์ฉํ๊ธฐ
- ๋ฐํ ๋ค๋น๊ฒ์ด์ ๋์์ ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ
- ๋ง์ดํ์ด์ง: ๋ฉ์ธ, ์๋ฃํ ๋ชฉํ
๊ตฌํ๋ฐฉ๋ฒ
- percentage๊ฐ์ ๋ฐ๋ฅธ progressbar ๋ถ๊ธฐ์ฒ๋ฆฌ
- ๊ธฐ๋ณธ progressbar๋ฅผ ์ด์ฉํ์ง ์๊ณ UIView๋ฅผ ๋๊ฐ ๋ง๋ค์ด์, progressbar๊ฐ์ด ๋ค์ด์ฌ๋๋ง๋ค constraint๊ฐ ๋ค์ ๋ถ๋ฌ์ค๊ธฐ
๋ผ์ด๋ธ๋ฌ๋ฆฌ(Library) | ๋ชฉ์ (Purpose) | ๋ฒ์ (Version) |
---|---|---|
Alamofire | ๋คํธ์ํฌ ํต์ | 5.6.1 |
SnapKit | autolayout ํํ | 5.0.0 |
Then | ํด๋ก์ ๋ฅผ ์ด์ฉํ ์ธ์คํด์ค ์์ฑ | 3.0.0 |
FSCalendar | ์บ๋ฆฐ๋ ๊ตฌํ | 2.8.4 |
KingFisher | ์ด๋ฏธ์ง ๋ถ๋ฌ์ค๊ธฐ | 7.3.0 |
Lottie | ์ ๋๋ฉ์ด์ ๊ตฌํ | 3.4.0 |
๊ธฐ์ ์ ์ผ๋ก ๊ฐ์ฅ ์ด๋ ค์ ๋ ๋ถ๋ถ์ multipart/form-data๋ฅผ ํตํ ํ์๊ฐ์ ์๋ฒํต์ ๋ถ๋ถ์ด์๋ค. Alamofire ๋คํธ์ํฌ ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์๋ฒ ํต์ ์ ์งํํ์๋๋ฐ ํ์๊ฐ์ ํต์ ๋ถ์์๋ง ์์ธ์ ํ์ ํ๊ธฐ ํ๋ ์๋ฌ๊ฐ ์๊ฒผ๊ณ , ์๋ฒ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ โboundary not foundโ, โunexpected end of formโ ๋ฑ์ ์๋ฌ ๋ฉ์์ง๊ฐ ์์๋ค. ๊ทธ๋์ boundary์ ๋ํด ์ฐพ์๋ณด์๋๋ฐ, ๋ฐ์ด๋๋ฆฌ๋ ๋ฉํฐํํธ ๋ฐ์ดํฐ์ ์์๊ณผ ๋์ ์๋ฆฌ๋ ๋ฌธ์์ด๋ก, ์๋ Alamofire ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด์์ ์ฒ๋ฆฌํด์ ์๋ฒ๋ก ๋ณด๋ด์ฃผ๋๋ฐ, ์ด์ ๋ํ ๋ด๋ถ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์ ๋๋ก ์๋๋ ๊ฒ ๊ฐ์๋ค. ๊ทธ๋์ ํ์๊ฐ์ ํต์ ๋ถ๋ง iOS์ ๊ธฐ๋ณธ์ ์ธ ํต์ ๋ฐฉ๋ฒ์ธ URLSession์ ์ด์ฉํด์ ํด์ฃผ์๋๋ API์ฐ๊ฒฐ์ด ๋์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธด ํ์ง๋ง ์ด๋ฒ trouble shooting ๊ณผ์ ์์ URLSession์ ์ด์ฉํด ์ฒ์ ํต์ ์ ํด๋ณด๋ ๊ฒ์ด๋ผ ํต์ ์ ์ฑ๊ณตํ๊ธฐ๊น์ง์ ๊ณผ์ ์ด ์ฝ์ง ์์๋ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ์ ๊ณ๊ธฐ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํต์ ์ ํ๋๋ผ๋ ๋คํธ์ํฌ ํต์ ์ ๊ธฐ๋ณธ ์๋ฆฌ์ ๋ํด ์ ๋๋ก ํ์ ํ๊ณ ์์ด์ผ ์์ธ์ ๋น ๋ฅด๊ฒ ํ์ ํ์ฌ ์์์น ๋ชปํ ์ด์์ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์์์ ๊นจ๋ฌ์๋ค. ์ด๋ค ๊ธฐ์ ์ ์ฌ์ฉํ๋์ง ํญ์ ๊ธฐ๋ณธ์ ์ถฉ์คํ ๊ณต๋ถํ๊ณ ๊ฐ๋ฐํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ ๊ฒ ๊ฐ๋ค.
๋ชฉํ ์์ฑ์์ ๋ ๊ฐ์ ์บ๋ฆฐ๋๊ฐ ์ฌ์ฉ๋์๋ค. ํ๋์ ์บ๋ฆฐ๋ VC๋ก ์ฌ์ฉํ๋ค๋ณด๋ ํ์ฑํ๋๋ ๋ ์ง, ์ด์ ๋ฌ์ด๋ ๋ค์ ๋ฌ๋ก ์ด๋ํ๋ ๋ฒํผ ํ์ฑํ ๋ถ๊ธฐ์ฒ๋ฆฌ ํ๋ ๊ณผ์ ์ด ์ด๋ ค์ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ์ ํ๋ ๋ ์ default ๊ฐ์ผ๋ก ๋์์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ์บ๋ฆฐ๋๋ฅผ ๋์ฐ๋ VC์์ ํ์ฌ ์ ํ๋ ๋ ์ง๋ฅผ ๋ณด๋ด์ฃผ๊ณ , ๋ค์ ์บ๋ฆฐ๋์์ ์ ํ๋ ๋ ์ง๋ก ๋ณ๊ฒฝํด์ฃผ๋ ์์ ๋ ์ฝ์ง ์์๋ค. ๋ชฉํ๋ฅผ ์์ฑํ ๋๋ ์ค๋๋ถํฐ ํ ๋ฌ ๊ฐ ์ ํ์ด ๊ฐ๋ฅํ ์์ ๋ ์ง ์บ๋ฆฐ๋, ์ ํํ ์์ ๋ ์ง๋ก๋ถํฐ ํ ๋ฌ ๊ฐ ์ ํ์ด ๊ฐ๋ฅํ ์ข ๋ฃ ๋ ์ง ์บ๋ฆฐ๋ ์ค ์ด๋ ์บ๋ฆฐ๋๋ฅผ ์ ํํ๋์ง์ ๋ฐ๋ผ isStartCalendar(bool)๊ฐ์ ์ ๋ฌํ๋ค. ์บ๋ฆฐ๋ VC์์๋ isStartCalendar๊ฐ์ ๋ฐ๋ผ minimumDate, maximumDate๋ฅผ ์ ํด์ฃผ์๋ค. ๋ํ ํ์ฌ ์ ํ๋์ด์๋ ๋ ์ง์ ์ ๋ฌด์ ๋ฐ๋ผ default๊ฐ๋ ์ ํด์ฃผ์๋ค. ๋ฒํผ ํ์ฑํ๋ isStartCalendar ๊ฐ์ ๋ฐ๋ผ ์ ํด์ฃผ์๋ค. ํ๋ก์ ํธ ์์ ์ ์ ์บ๋ฆฐ๋ ์ฐ์ต์ ํ์๋๋ฐ, ์บ๋ฆฐ๋๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ณณ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ์์์ ์ค์ ํ๋ก์ ํธ์์ ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ๊ทธ๋ฆฌ๊ณ ์ดํ์ ๋ ์บ๋ฆฐ๋๋ฅผ ์ฐ๋ VC๊ฐ ์์ ๊ฒฝ์ฐ ํ์ฅ์ฑ์ ์ํด ์ฝ๋ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ๊ฒ ๊ฐ๋ค. ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ์ด์ฌํ ํ์
๊ธฐ์ ์ ์ธ ๋ฉด์์๋, ์น๊ตฌ ํญ์์ ์ด๋ชจ์ง๊ฐ balloon ์ฐฝ์ฒ๋ผ ๋ ์ผ ํ๋ค๋ ์ ์ด์๋ค. ์๋๋ก์ด๋๋ ๊ทธ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์์ง๋ง, is์์๋ ๋ฒ๋ฃฌ์ฐฝ์ ์์ฑํ๋ ๊ฒ์ด ์ฝ์ง ์์๋ค. ๊ฒ์ํด๋ณด์์ง๋ง, ๋ฐ๋ก ์ข์ ์๊ฐ์ด ๋์ง ์์๋ค. ์ด ๋ถ๋ถ์ ์ต๊ณ ์ ๋ฆฌ๋ ์์ฃผ๊ฐ ํด๊ฒฐํด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๊ธฐ๋กํ ๊ฐ์ ํํฐ๋ง ๊ธฐ๋ฅ์ด ์ด๋ ค์ ๋ค. ๋ฒํผ์ ์ถ๊ฐํ ์๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌํด์ค์ผ ํ๋ ๋ถ๋ถ์ด ๋ง์์ก๊ณ , ์ด์ํ ๋ฐ์ดํฐ๊ฐ ๋์ด์ง๊ธฐ ์์ํ๋ค. ์ด ๋ถ๋ถ์์๋ ์๋ฒ ํต์ ์ ํ๋ฉด์ ๋ ๊ณ ์ณ์ผ ํ ์ ์ด ๋ง์์ง๊ฒ ์ง๋ง ์ข์ ๊ฒฝํ์ ํ๋ค๊ณ ์๊ฐํ๋ค. ๋ํ, ์๋ฒ ํต์ ์ ํ๋ฉด์ ๋ฐ์ดํฐ๊ฐ ๋ฒ์ฉ์์ด ์๊ธด๋ค๋ ๊ฒ์ด์๋ค. ํนํ ์ด๋ฏธ์ง๋ฅผ ๋ฃ๋ ๋ถ๋ถ์์ ์ฌ์ง์ด ํตํต ํ๊ฒ ๋์๋ค. ์ด ๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํนํผ์ ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ๋ ํด๊ฒฐ์ด ๋์๋ค. ํนํผ์ ๊ฐ ์บ์ ์ฒ๋ฆฌ๋ฅผ ๋์ ํด์ฃผ์ด์ ์ฌ์ง์ด ํตํต ํ๋ ๊ฒ์ด ์ฌ๋ผ์ง๊ฒ ๋์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ข๋ค ~
ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ด๋ ค์ ๋ ์ ์ ์ํต์ด๋ค. ๊ธฐํ์ ๋ํ ๊ธฐ๋ฅ์ด ํท๊ฐ๋ฆฌ๊ธฐ ์์ํ๋๊น, ๊ฐ๋ฐํ๋ ๊ฒ์ ๋ํด์ ์ด๋ ค์์ ๋๊ผ๋ค. ๊ธฐํ์ ๋ํ ๊ถ๊ธ์ฆ์ด ์ฌ๋ผ์ ธ์ผ, ๊ฐ๋ฐ์ ์ ์งํํ ์ ์๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค. ๊ธฐํ์ด ํํํด์ผ ํจ์ ์์๊ณ , ๊ถ๊ธ์ฆ์ด ์๊ธฐ๋ ๋ถ๋ถ์ ๋ํด์ ์ง๋ฌธ์ ๋ฐ๋ก ํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ์ง๋ฌธ์ ์ ๋ ๋ฏธ๋ฃจ์ง ์์์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ํ, ๊น ์ปจ๋ฒค์ ์ ์งํค๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. ๋ณ์๋ช ๋ฑ์ ๊ท์น์ ์ ํด ์ ํ๋ ๊ฒ์ด ๋ชธ์ ๋ฐฐ์ง ์์์, ์ฃผ์๋ ์ ์์ฑํ์ง ์์๊ณ ๋ณ์๋ช ๋ ๊ณ์ํด์ ํ๋ ธ๋ค. ํ์ง๋ง, ๋ด๊ฐ ์ง ์ฝ๋๋ฅผ ๋ค๋ฅธ ๋๋ฃ๋ค์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ฃผ์์ด๋ ๋ณ์ ๋ฑ์ ์ ๋๋ก ์์ฑํ์ง ์์ผ๋ฉด ํ์ ์ด ์ด๋ ค์์ง๋ค๋ ๊ฒ์ ์ ๋ง ๋ง์ด ๊นจ๋ซ๊ฒ ๋์๋ค. ํต์ผ๋ ๊ท์น์ด ์์ด์ผ, ์์ , ํ์ ์ด ์ฌ์์ง๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ณ ๋๋, ์ด๋ค ํ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ท์น์ ๊ผญ ์ ํ ๊ฒ์ด๋ค!
๋ํ, ์๋ก ์์ ์๊ฐ์ด ๋ฌ๋ผ ์ฒ์์๋ ์ด๋ ค์์ ๊ฒช์๋ค. ํ์ง๋ง, ๊ทธ ํ๋ก์ ํธ ๊ธฐ๊ฐ์๋, ๋ค์์ ์์ ์๊ฐ์ ํต์ผํด, ์๋ก ๊ถ๊ธ์ฆ์ด ์๊ธธ ๋๋ง๋ค ๋ฐ๋ก ๋ฌป๊ณ ๋๋ตํจ์ด ์ค์ํจ์ ๊นจ๋ฌ์๋ค. ์ดํ์, ์ต๋ํ ์์ ์๊ฐ์ ํต์ผํด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ฐฉ์์ผ๋ก ๊ทน๋ณตํ์๋ค.
์ฑ์ผ ๋๋๊ณ ๋ ์ฝ๋ ๋ฆฌํฉํ ๋ง ํ ๊ฒ์ด๋ค~