๋ฐฐ๊ฒฝ
์คํ ๋ฆฌ๋ณด๋๋ก table view ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ค ์์ฐ์ค๋ฝ๊ฒ table view์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์กฐ์ฒด๋ก ๋ง๋ค์ด ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ์ฝ๋์ ์ด์ ๊ฐ ์์ด์ผ ํ๊ณ ์๊ฐํ๋ฉฐ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค์ตํ ์ฝ๋๋ฅผ ๋๊ณ ์ ์ด๋ ๊ฒ ์ฝ๋ฉํ์๊น ์๊ฐ์ ํด๋ณด์์ต๋๋ค.
ํ๋ฉด ์ดํด ๋ฐ ์ฝ๋ ๋ณด๊ธฐ
ํด๋ํฐ์ ์ค์ ํ๋ฉด์ฒ๋ผ table view controller์ ๊ณ ์ ๋ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ์ฝ์ ํ์ฌ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋จํ ๊ตฌํ์ ๋๋ค. 3๊ฐ์ ๋๋ถ๋ฅ์ ๊ทธ ์๋ ์๋ถ๋ฅ title์ด ์์ด ๊ฐ ์น์ ๋ณ๋ก ํด๋นํ๋ ํญ๋ชฉ์ ์ฝ์ ํด์ผ ํฉ๋๋ค.
import UIKit
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
//MARK: - TableViewDelegate
extension TableViewController {
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
guard let section = Setting.Header(rawValue: section) else {
print("Unknown Section")
return nil
}
return section.title
}
override func numberOfSections(in tableView: UITableView) -> Int {
return Setting.Header.allCases.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return Setting.samples[section].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "case-2-identifier") else { return UITableViewCell() }
cell.textLabel?.text = Setting.samples[indexPath.section][indexPath.row].title
return cell
}
}
struct Setting {
enum Header: Int, CaseIterable {
case full, personal, others
var title: String {
switch self {
case .full:
return "์ ์ฒด ์ค์ "
case .personal:
return "๊ฐ์ธ ์ค์ "
case .others:
return "๊ธฐํ"
}
}
}
let header: Header
let title: String
static let samples = [ [Setting(header: .full, title: "๊ณต์ง์ฌํญ"),
Setting(header: .full, title: "์คํ์ค"),
Setting(header: .full, title: "๋ฒ์ ์ ๋ณด")],
[Setting(header: .personal, title: "๊ฐ์ธ"),
Setting(header: .personal, title: "์๋ฆผ")],
[Setting(header: .others, title: "๊ณ ๊ฐ์ผํฐ")]]
}
์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ์๊น?
1. ์ ๊ตฌ์กฐ์ฒด๋ก ํ๋์?
์ฌ์ฉ ์ด์ ์ ์์ ํด๋์ค์ ๊ตฌ์กฐ์ฒด๋ฅผ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.
ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ผ๋ก, ํ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ํ๋กํผํฐ์์ ํด๋น ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ณ์/์์๋ง ์๋ค๋ฉด ARC์ ์ํด ๋ฉ๋ชจ๋ฆฌ ์์์ ์ค๋ ์ ์ง๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ํ๋ฅผ ์ ์งํ ํ์๊ฐ ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋๋ถ์ด ์์ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๋ฉค๋ฒ(๊ธฐ๋ฅ)์ ์ด์ด ๋ฐ๊ฑฐ๋ ๊ทธ ๊ธฐ๋ฅ์ ํ์ฅํ ํ์๊ฐ ์๋ค๋ฉด ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด์๋ ๋ฐ๋๋ก ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ ์ผ๋ก, ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๋ค๋ฅธ ๋ณ์์ ํ ๋น ์ ๊ทธ ์ธ์คํด์ค๊ฐ ๋ณต์ฌ๋์ด ์ ์ฅ๋๋ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋นํ๋ ์์ญ์ ์์ ์ด ๋๋๋ฉด ์คํ ํ๋ ์์ ์ ๊ฑฐ๋๋๋ฐ, ์ด์ ํจ๊ป ์คํ์ ์์ฑ๋ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค๋ ํจ๊ป ์ ๊ฑฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ํด๋์ค์ ๋นํด ์ธ์คํด์ค๊ฐ ๋น ๋ฅด๊ฒ ์์ฑ๋๊ณ ๋ฐ๋ก ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํด์ฃผ์ง ์์๋ ๋์ง๋ง ์ค๋ ์ง์ํ๋ฉฐ ์ํ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
Setting ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ๊ตฌ์กฐ์ฒด๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ํ๋ฉด Setting์ ์ค์ ํ๋ฉด์ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ์์ดํ ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ตฌ์กฐ๋ก, ์ธ์คํด์ค๋ฅผ ์ ์งํด์ ์ค๋ ์ํ๋ฅผ ํ์ธํ ํ์๊ฐ ์์ต๋๋ค. ๋ํด ์์์ ํตํด ๊ธฐ๋ฅ์ ํ์ฅํ ํ์๊ฐ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Setting์ ์์ฑ์ด ๋น ๋ฅด๊ณ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ๊ตฌ์กฐ์ฒด๊ฐ ์ ํฉํฉ๋๋ค.
2. ์ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋์?
ํค๋์ ์ข ๋ฅ๋ 3๊ฐ์ง๋ก ๊ณ ์ ์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํค๋์ ๋ฐ๋ฅธ ์๋ถ๋ฅ์ ํญ๋ชฉ๋ค์ด ์กด์ฌํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํค๋๋ ๊ตฌ๋ถ์ด ํ์คํด์ผํ๋ฉฐ ์ด๋ฌํ ๊ตฌ๋ถ์ ๊ธฐ๋ฅ ๊ตฌํ ๋ ์์ฃผ ์ฌ์ฉ๋์ด ๊ตฌํ์ด ๊ฐํธํด์ผ ํฉ๋๋ค. ๊ธฐ๋ฅ ๊ตฌํ ๋๋ง๋ค String์ ๋น๊ตํด ์ผ์นํ๋ ํค๋๋ฅผ ์ฐพ์ ํด๋นํ๋ ํญ๋ชฉ์ ๊ธฐ์ ํ ์๋ ์์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ ์คํ์๋ฅผ ์ฃผ์ํด์ผํ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ switch๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํด์ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ ์ด๊ฑฐํ์ ์ฌ์ฉํ์ต๋๋ค.
3. ์ ์์๊ฐ ํ์ ์ผ๋ก String์ด ์๋ Int๋ฅผ ์ฌ์ฉํ๋์? ๊ทธ๋ฆฌ๊ณ ์ String์ title์ด๋ผ๋ ํ๋กํผํฐ๋ก ๋ฐ๋ก ๊ตฌ๋ถํด ์ฌ์ฉํ๋์?
๋ชฉ์ ์ด ๋ช ํํ ๋ณ์/์์๋ช ์ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ํ์ ์ ์ฝ๋์ ์ดํด๋ ํฅ์์ ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ๋ช ์์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ด์ ๊ฐ์ ์ด์ ๋ก ์ด๊ฑฐํ์ ์์๊ฐ ํ์ ์ Int๋ก ์ฌ์ฉํ์ผ๋ฉฐ, title ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์์ฑํ์ต๋๋ค. ๋จผ์ ์ด๊ฑฐํ์ ์์๊ฐ์ Int ํ์ ์ผ๋ก ์ ์ธํ๋ฉด, ์ด๊ฑฐํ ์ธ์คํด์ค ์์ฑ ์ rawValue๋ก Int๊ฐ์ ๋ฃ์ ์ ์๊ฒ ๋๋ฉฐ case ์ ์ธ์ ์์๋๋ก ํด๋นํ๋ case๋ฅผ ๊ฐ์ง ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ํ์ฉํ ๊ฒฝ์ฐ, table view์ section ๋ณ ๋ค๋ฅธ ์์ ์ ์ํํด์ผํ ๋ switch๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ช ์์ ์ธ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค. ๋๋ถ์ด title ์ฐ์ฐ ํ๋กํผํฐ์ ๊ฒฝ์ฐ ์์๊ฐ์ String์ผ๋ก ํด rawValue ํ๋กํผํฐ๋ก ์ฌ์ฉํด๋ ๋์ง๋ง ๊ทธ rawValue๊ฐ ๋ฌด์์ ๋ด์ ํ๋กํผํฐ์ธ์ง ๋ช ํํ์ง ์๋ค๊ณ ์๊ฐํด title์ด๋ผ๋ ํ๋กํผํฐ๋ฅผ ๋ฐ๋ก ์์ฑํด ๊ทธ ์ฌ์ฉ ์๋ฏธ๋ฅผ ๋ช ํํ ํ๊ณ ์ ํ์ต๋๋ค.
4. ์ CaseIterable์ ์ฌ์ฉํ๋์?
numberOfSections์์ section์ ๊ฐ์๋ฅผ ์ ๋ฌํด์ผํ๋๋ฐ, ๋ฐ๋ก ๊ฐ์ ๊ตฌ์ฑํด ์ ๋ฌํ๋ฉด ์ดํ section ์ถ๊ฐ ๋๋ ์ ๊ฑฐ ์ ์์ ํ ๋ถ๋ถ์ด ๋ง์์ง๊ฒ ๋๋ฌธ์ ํจ์จ์ ์ธ ์์ ์ ์ํด Header์ CaseIterable๋ฅผ ์ฑํํด ๋ฐฐ์ด๋ก Header์ ๋ชจ๋ ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌํํ์ต๋๋ค.
5. ์ samples ๋ฐ์ดํฐ ๋ชฉ๋ก์ Setting์ ๋์๋์? ๊ทธ๋ฆฌ๊ณ static ํค์๋๋ฅผ ๋ถ์ธ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ์?
ํด๋น ํ๋ฉด์ ์ค์ ํ๋ฉด์ผ๋ก, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ, ์ ๊ฑฐ๋ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ view controller์ ๋์ง ์๊ณ Header์ ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ธ์คํด์ค์์ samples๊ฐ ๋์ผํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ samples ๊ฐ ์๊ธฐ๋ ๊ฒ์ ํจ์จ์ ์ด์ง ์์ต๋๋ค. ๋ฐ๋ผ์ static ํค์๋ ํตํด samples๋ฅผ ํ์ ํ๋กํผํฐ๋ก ์ ์ธํ๋ฉด, ํ์ ์์ญ์ ํ๋์ samples๋ง ์กด์ฌํ๊ฒ ๋๊ณ ์ด๋ฅผ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๊ฒ ๋๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
์ ๋ฆฌ
Setting ๊ตฌ์กฐ๋ table view์ ์์ดํ ์ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฅ ํ์ฅ์ ์ํ ์์๊ณผ ์ง์์ ์ธ ์ํ ํ์ธ ์์ ์ด ํ์ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ํด๋์ค์ ๋น๊ตํด ์ธ์คํด์คํ๊ฐ ๋น ๋ฅด๊ณ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ์ง ์์๋ ๋๊ธฐ์ ๊ตฌ์กฐ์ฒด๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
์ค์ ํ๋ฉด์์ ์ฌ์ฉ๋๋ ๋๋ถ๋ฅ์ธ header๋ ์๋ ์๋ถ๋ฅ๋ฅผ ๊ฐ์ง๊ณ ์์ด section ๋ณ๋ก ํด๋นํ๋ ํญ๋ชฉ์ ์ฐพ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ๋ช ํํ๊ณ ํจ์จ์ ์ธ ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ด๊ฑฐํ์ ์ฌ์ฉํ์ต๋๋ค.
๋ํ ๋ชจ๋ ๋๋ถ๋ฅ์๋ '์ ์ฒด ์ค์ '๊ณผ ๊ฐ์ด ์ ๋ชฉ์ ๊ฐ์ง๊ณ ์๋๋ฐ, title ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ดํ ๋๋ถ๋ฅ์ ์ถ๊ฐ/์ ๊ฑฐ ์ ๋ฐ์ดํฐ ์์ ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด, CaseIterable์ ์ฑํํด Header์ ๋ชจ๋ case๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ section ๊ตฌ์ฑ ์ ์ฌ์ฉํ์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ค์ ํ๋ฉด์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๋ชฉ๋ก์ ๊ณ ์ ๋์ด์๊ณ , ์ด๋ค Header ์ธ์คํด์ค์์๋ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ Header ํ์ ์ ํ์ ํ๋กํผํฐ๋ก samples ์ ์ฅ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ์ต๋๋ค.
์๊ฐ
ํญ์ ๋ฐฐ์ฐ๋๊ฑด ๋์ด๊ฐ๋๋ฐ ๋ญ๊ฐ๋ฅผ ์ค๋ช ํ๊ณ ์ ํ๋ฉด ๋ง์ด ์ด๋ ค์ ์ต๋๋ค. ์ญ์ ๊ณต๋ถ์์ ์ค์ํ ๊ฒ์ ๊ณต๋ถํ ๋ด์ฉ์ ์ง์ ์ ์ฉํ๊ณ ์ ๋ฆฌํด๋ณด๋ฉฐ ์ค๋ช ํ ์ ์์ ๋๊น์ง ์ฐ์ตํ๊ธฐ ๊ฐ์ต๋๋ค. ํญ์ ๋ชจ๋ธ์ ๋ง๋ค ๋๋ ๋ชจ๋๊ฐ ๊ทธ๋ฌํ๋ฏ ํฐ ๊ณ ๋ฏผ์์ด ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณค ํ๋๋ฐ, ์์ผ๋ก๋ ์ค๋ ์ ๋ฆฌํ๋ ๋ด์ฉ์ ์์ผ๋ก ํ ๋ฒ์ฉ ๋๋์ด๋ฉฐ ๋ง๋ค์ด์ผ๊ฒ ์ต๋๋ค.