안녕하세요.
extension을 잘 사용하여 코드 가독성을 올릴 수 있는 방법을 간단하게 소개하려고 합니다.
extension은 언제 사용하는가?
extension(확장)은 기존 클래스, 구조체, 열거형, 프로토콜 타입에 새로운 기능을 추가할 때 사용합니다.
구성 및 예제
뷰컨트롤러는 많은 코드를 포함하고 있기 때문에 extension(확장)을 올바르게 사용하면 코드 구성을 크게 향상 시킬 수 있습니다.
일단 크게 Class Block, Private Extension, Protocol Extension 이렇게 분리할 것입니다.
1. Class Block
여기에는 private, public, 오버라이드 메소드, 생명주기 등 내부 메소드가 있는 부분입니다.
final class ViewController: UIViewController {
// MARK: - IBOutlet
@IBOutlet private weak var tableView: UITableView!
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
initView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
}
2. Private Extension
여기에는 Private한 메소드, 이벤트가 있는 부분입니다.
// MARK: - Private
extension ViewController {
func initView() {
}
@IBAction func touchUpInsideNextButton(_ sender: UIButton) {
}
}
3. Protocol Extension
뷰 컨트롤러에서 델리게이트 메서드, 그 외 프로토콜 구현부가 있는 부분입니다. (ex 테이블뷰, 콜렉션뷰 델리게이트)
// MARK: - UITableViewDelegate
extension ViewController: UITableViewDelegate {
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
}
// MARK: - SomeDelegate
extension ViewController: SomeDelegate {
func someTask() {
}
}
전체 코드
import UIKit
final class ViewController: UIViewController {
// MARK: - IBOutlet
@IBOutlet private weak var tableView: UITableView!
@IBOutlet private weak var nextButton: UIButton!
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
initView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
}
// MARK: - Private
extension ViewController {
func initView() {
}
@IBAction func touchUpInsideNextButton(_ sender: UIButton) {
}
}
// MARK: - UITableViewDelegate
extension ViewController: UITableViewDelegate {
}
// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
}
// MARK: - SomeDelegate
extension ViewController: SomeDelegate {
func someTask() {
}
}
마무리
extension은 Swift언어에서 강력한 기능입니다.
잘 사용한다면 뷰 컨트롤러 안에서 요구사항에 따라 기능을 분리하여 보기 좋은 코드를 작성하는데 많은 도움이 될 것입니다.
'Swift' 카테고리의 다른 글
[Swift] Extension이란 (0) | 2020.01.05 |
---|---|
[Swift] SwiftLint 적용하기 (0) | 2020.01.05 |
[Swift] 구조체란 무엇인가? (0) | 2020.01.03 |
[Swift] 델리게이트(Delegate) 패턴이란 (0) | 2020.01.03 |
[Swift] 타입메소드, 인스턴스 메소드란 (0) | 2020.01.03 |