๊ธฐ์ ์ปจํผ๋ฐ์ค
๊ธฐ์ ์ปจํผ๋ฐ์ค, ๋ธ๋ก๊ทธ ์์ฃผ ๋ณด๊ธฐ!
- wwdc
- if kakao
- slash
- tech blog
๋ชจ๋ํ์ ์ ๊ทผ ์ ์ด
๋ชจ๋ํ
์์ ์ ํ๋ค๋ณด๋ฉด ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์์ ์ ์๋ค. UI ์ปดํฌ๋ํธ, ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค ๋ฑ๋ฑ์ด ์์ํ ๋ฐ ์ด๋ฅผ ๋งค ํ๋ก์ ํธ ๋ด์์ ์ง์ ์์ฑํด์ฃผ๋ ๊ฒ๋ณด๋ค ๋น์ทํ ์ฑ๊ฒฉ์ ์ฝ๋๋ผ๋ฆฌ ๋ชจ์์ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ์ด๋ค.
- ํ๋ ์์ํฌ๋ฅผ ๋ง๋ ๋ค๊ณ ๋ ์ดํดํด๋ณผ ์ ์์
- ๋ชจ๋ํ๋ฅผ ํด๋ณด๋ฉด ์ ๊ทผ ์ ์ด์ ๋ํ ๊ฐ๋ ์ด ์กฐ๊ธ ๋ช ํํด์ง (- ์ค์ ๋ก ๋ด๊ฐ EasyKit์ด๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด์ ๋๊ผ๋ ๋ถ๋ถ์ด๋ค.)
- ์ค์ ํ๋ก์ ํธ๋ ์กฐ๊ธ ๊ฐ๋ฒผ์์ง
- ๊ฐ๊ฐ ์ญํ ์ ๋ํ ๋ถ๋ฆฌ๊ฐ ๋ช ํํด์ง
- ์์ฃผ ์ฌ์ฉํ๋ ์ฝ๋, UI ๋ชจ์๋๊ธฐ
์ ๊ทผ ์ ์ด
์ด๋ก ์ ์ผ๋ก ์ ๋ฆฌํ๋ ๊ฒ๋ ์ค์ํ์ง๋ง ์ค์ ๋ก ๋ชจ๋์ ๋ง๋ค์ด๋ณด๊ณ ์ฝ๋๋ฅผ ์ง๋ณด์.
- ๋ฉ์๋ ๋ณ๋ก, ํด๋์ค ๋ณ๋ก ๋ค ๋ค๋ฅธ ์ ๊ทผ ์ ์ด๋ฅผ ํ ์ ์๋ค.
- open, public : ๋ชจ๋ ๊ฐ, ๋์ ์ฐจ์ด๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฌ๋ถ(- ์์์ ์ฌ๋ถ, ํด๋์ค์ธ์ง ์๋์ง)
- internal : ๋ชจ๋ ๋ด, ๋ช ์ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก internal ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ ์ ์ด์ค๋ ๋จ
- fileprivate, private : ๋ชจ๋ ๋ด, ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํด๋ณผ ์ ์๋ ์ ๊ทผ ์ ์ด์
extension ์์๋ open ํค์๋๋ฅผ ๋ถ์ผ ์ ์๋ค. ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์์ง๊ฐ ๋์จ๋ค.
- extensions cannot be declared 'open'; declare individual members as 'open' instead
Framework, Library
๋ ๋ค ๊ฐ๋ฐ์ ์ฝ๊ฒํ ์ ์๋๋ก ๋์์ฃผ๋ ์ฝ๋, ๋๊ตฌ ๋ชจ์์ธ ๊ฒ ๊ฐ์๋ฐ ๊ทธ ์ฐจ์ด๊ฐ ์ฃผ์ฒด์ ๊ธฐ๋ฅ์ ์ ์ด๊ถ์ด ์ด๋ ์ชฝ์ ์๋๋๋ผ๊ณ ํ๋ค. ํ๋ ์์ํฌ๋ ์กฐ๊ธ ๋ ์์ ๋๊ฐ ๋ฎ๊ณ ์จ์ผํ๋ ๊ฒ๊ณผ ์ง์ผ์ผ ํ๋ ๋ฃฐ ๋ฑ์ด ์กด์ฌํ๋ค. UIKit ํ๋ ์์ํฌ์์ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์๊ฐํด๋ณด๋ฉด ์กฐ๊ธ ๋ ์ ๋ฟ๋ ๊ฒ ๊ฐ๋ค. ๋ค์ ๋ธ๋ก๊ทธ ์ฐธ๊ณ , ๋ฉ์๋์ ์ํ๋ ๋์๋ง ๋ฃ์ด๋๋ฉด ์คํ๋๋ ์์ ๊ณผ ์ค์ ๋์์ ํ๋ ์์ํฌ๊ฐ ์์์ ํ๊ฒ ๋๋ค.
Framework
- ์ฌ์ฉํ๋ ์ฃผ์ฒด์ ๊ธฐ๋ฅ์ ์ ์ด๊ถ์ด ์ญ์ , ๋ด ์ฝ๋๊ฐ ํธ์ถ๋นํจ
- ์ฌ๋ฌ ํด๋์ค๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ, ์ปดํฌ๋ํธ๋ค์ ์ฌ์ฌ์ฉํ ์ ์์
- ํ๋ ์์ํฌ๋ฅผ ํตํด ์ํํธ์จ์ด ๊ฒฐํฉ๋๋ ๋ฎ๊ฒ, ์์ง๋๋ ๋๊ฒ ๊ตฌ์ฑํ ์ ์๋ค.
Library
- ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ๊ฐ๋ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋๊ตฌ
- ์ฌ์ฉํ๋ ์ฃผ์ฒด๊ฐ ๊ธฐ๋ฅ์ ์์ฒญํ๊ณ ์ฌ์ฉ, ๋ด ์ฝ๋๊ฐ ํธ์ถํจ
์ฌ์ค ์ฐจ์ด๊ฐ ์์ ํ ์๋ฟ์ง๋ ์๋๋ค. ์ข ๋ ๊ณต๋ถํด๋ณด๊ณ static · dynamic ๋ถ๋ถ์ ๋ํด์๋ ์กฐ์ฌํด๋ด์ผ๊ฒ ๋ค.
Framework ๋ง๋ค์ด๋ณด์
- ์ฝ๊ฐ ํ๋ก์ ํธ ํ์ผ์ฒ๋ผ ์๊ฒผ๋๋ฐ ์ ํํ๋ ๋ค๋ฆ
1. Framework ํ์ผ ๋ง๋ค๊ธฐ
์ผ๋ฐ์ ์ผ๋ก ๋ง๋๋ App์ด ์๋๋ผ Framework๋ฅผ ์ ํํด์ ๋ง๋ ๋ค.
์ ์ด์์ค์ ์ ์งํค๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
2. Framework ๋ถ๋ฌ์ค๊ธฐ
์ด ๋ถ๋ถ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์๋ ์์ธํ๊ฒ ์ค๋ช ๋์ด ์์ด ๊ฐ๋จํ๊ฒ ์์ฝ๋ง ํ๋ค.
- ํ๋ ์์ํฌ๋ฅผ ๋ถ๋ฌ์ฌ ํ๋ก์ ํธ์ ๋ฃจํธ ์์น์์ ์ฐํด๋ฆญ - Add Files to๋ฅผ ํ ๋ค Framework ํ๋ก์ ํธ์ xcodeproj ํ์ผ์ ๋ถ๋ฌ์จ๋ค.
- Target - General - Frameworks, Libraries, and Embedded Content์์ Framework๋ฅผ ๋ถ๋ฌ์จ๋ค.
PageViewController
1. PageViewController(Root)์ ์ปจํ ์ธ ๋ก ๋ค์ด๊ฐ Controller ๋ง๋ค๊ธฐ
2. ์ฝ๋ ์์ฑ
์๋์ ๊ฐ์ด ์์ฑํด์ฃผ๋ฉด ํ์ด์ง ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋์์ ์ํํ ์ ์๋ค.
// ๋ฐฐ์ด ํํ๋ก ๋ทฐ ์ปจํธ๋กค๋ฌ ์ถ๊ฐ
var pageViewControllerList: [UIViewController] = []
// ๋ฐฐ์ด์ ๋ทฐ ์ปจํธ๋กค๋ฌ ์ถ๊ฐ
func createPageViewController() {
let sb = UIStoryboard(name: "WalkThrough", bundle: nil)
let vc1 = sb.instantiateViewController(withIdentifier: FirstViewController.reuseIdentifier) as! FirstViewController
let vc2 = sb.instantiateViewController(withIdentifier: SecondViewController.reuseIdentifier) as! SecondViewController
let vc3 = sb.instantiateViewController(withIdentifier: ThirdViewController.reuseIdentifier) as! ThirdViewController
pageViewControllerList = [vc1, vc2, vc3]
}
// ํ์ด์ง ๋ทฐ ์ปจํธ๋กค๋ฌ ์ธํ
func configurePageViewController() {
view.backgroundColor = .green
delegate = self
dataSource = self
guard let first = pageViewControllerList.first else { return }
setViewControllers([first], direction: .forward, animated: true)
}
// ์ข์ฐ ์ ํ์ ์ํ ํ๋กํ ์ฝ ํ์ ๋ฉ์๋ ๊ตฌํ
extension WalkThroughViewController: UIPageViewControllerDelegate, UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
// ํ์ฌ ํ์ด์ง ๋ทฐ ์ปจํธ๋กค๋ฌ์ ๋ณด์ด๋ ๋ทฐ ์ปจํธ๋กค๋ฌ์ ์ธ๋ฑ์ค ๊ฐ์ ธ์ค๊ธฐ
guard let viewControllerIndex = pageViewControllerList.firstIndex(of: viewController) else { return nil }
let previousIndex = viewControllerIndex - 1
return previousIndex < 0 ? nil : pageViewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let viewControllerIndex = pageViewControllerList.firstIndex(of: viewController) else { return nil }
let nextIndex = viewControllerIndex + 1
return nextIndex >= pageViewControllerList.count ? nil : pageViewControllerList[nextIndex]
}
}
'๐ฑ SeSAC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SeSAC] 220818 TIL (0) | 2022.08.20 |
---|---|
[SeSAC] 220817 TIL (0) | 2022.08.20 |
[SeSAC] 220812 TIL (0) | 2022.08.15 |
[SeSAC] 220811 TIL (0) | 2022.08.15 |
[SeSAC] 220810 TIL (0) | 2022.08.14 |