Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MVVM
- 애니메이션
- 리펙터링
- swiftUI
- rxswift
- clean architecture
- RxCocoa
- Protocol
- Xcode
- collectionview
- HIG
- UICollectionView
- Observable
- uitableview
- ios
- uiscrollview
- tableView
- combine
- 클린 코드
- 스위프트
- Refactoring
- 리팩토링
- 리펙토링
- SWIFT
- UITextView
- swift documentation
- ribs
- map
- Clean Code
- Human interface guide
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] extension을 활용한 네임스페이스 리펙토링 방법 본문
일반적인 방법
- 네임스페이스를 구성할 때 보통 해당 클래스 혹은 해당 블록 안에 선언하여 구현
- ex) 커스텀 버튼을 만들 때 (MyButton) 안쪽에 struct Config를 선언하여 사용
public class MyButton: UIButton {
public struct Config {
public let backgroundColor: UIColor
public init(backgroundColor: UIColor) {
self.backgroundColor = backgroundColor
}
}
private let config: Config
public init(config: Config) {
self.config = config
super.init(frame: .zero)
setupUI()
}
required init?(coder: NSCoder) {
fatalError()
}
private func setupUI() {
backgroundColor = config.backgroundColor
}
}
- 이렇게되면 MyButton안에 또 다른 타입이 정해지게되어 가독성이 낮아지는 문제가 존재
- 개발자는 코드를 위에서 아래로 읽어내려갈 때 MyButton이라는 이름을 보고, 그 다음 바로 Config가 나오는데 Config의 정의부는 개발자가 직접 안보아도 사용하는것만 봐도 예측이 가능하므로 굳이 MyButton 안에 있을 필요가 없는 것
extension으로 네임스페이스 관리하기
- 별도의 파일을 생성한 다음 여기에 extension으로 추가
// MyButton+Config.swift
public extension MyButton {
struct Config {
public let backgroundColor: UIColor
public init(backgroundColor: UIColor) {
self.backgroundColor = backgroundColor
}
}
}
- 다시 MyButton을 보면, 개발자는 MyButton이라는 이름을 보고 바로 config 프로퍼티, 초기화 메서드를 읽어내려가면서 밑에 setupUI()에서 config.backgroundColor를 보며 굳이 Config 코드 부분으로 jumb하여 보지 않아도 예측이 가능
- extension과 별도의 파일로 나눔으로써 더욱 가독성 높은 코드관리가 가능
public class MyButton: UIButton {
private let config: Config
public init(config: Config) {
self.config = config
super.init(frame: .zero)
setupUI()
}
required init?(coder: NSCoder) {
fatalError()
}
private func setupUI() {
backgroundColor = config.backgroundColor
}
}
* 전체 코드: https://github.com/JK0369/ExRefactorExtension
'Refactoring (리펙토링)' 카테고리의 다른 글
[iOS - swift] 단순 열거 switch 리펙토링 (dictionary 활용하기) (0) | 2024.01.22 |
---|---|
[iOS - swift] property 관리 리펙토링 (computed property를 활용한 리펙토링) (0) | 2024.01.21 |
[iOS - swift] enum에 공통 변수가 필요한 경우 리펙토링 방법 (wrapping) (0) | 2024.01.11 |
[iOS - swift] 프로토콜로 리펙토링하기 (5) | 2024.01.05 |
[iOS - swift] 예외처리로 리펙토링하기 (throw, try, catch) (2) | 2023.12.17 |
Comments