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
- Human interface guide
- swiftUI
- combine
- swift documentation
- map
- Refactoring
- clean architecture
- ios
- uitableview
- SWIFT
- RxCocoa
- 스위프트
- 리팩토링
- MVVM
- Observable
- 리펙토링
- 클린 코드
- ribs
- tableView
- Protocol
- UITextView
- 리펙터링
- uiscrollview
- Xcode
- collectionview
- Clean Code
- UICollectionView
- 애니메이션
- rxswift
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] protocol을 준수하는 1회용 모델 생성 팁 (protocol 구현체) 본문
Refactoring (리펙토링)
[iOS - swift] protocol을 준수하는 1회용 모델 생성 팁 (protocol 구현체)
jake-kim 2024. 3. 22. 01:39protocol 준수하는 모델 넘기기
- ViewController에서 viewModel로 SomeModelable을 준수하는 모델을 넘겨야 하는 경우?
- 단, SomeModelable을 준수하는 모델은 여기서밖에 사용하지 않음
protocol SomeModelable {
var a: Int { get }
var b: String { get }
}
class ViewController: UIViewController {
let viewModel = ViewModel()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.configure(model: /*여기!*/)
}
}
class ViewModel {
func configure(model: SomeModelable) {
// ...
}
}
- 보통 별도의 .swift파일이나 하단에 SomeModelable을 준수하는 구조체를 생성하여 이 값으로 넘길 수 있음
// bad case
struct MyModel: SomeModelable {
var a: Int
var b: String
}
- 하지만 이 모델은 단순히 한곳에서만 필요하기 때문에, 확장성을 제한하여 MyModel의 코드 응집도를 높일 필요성이 존재
- 단순히 1회용으로 모델을 넘겨야하는 경우라면 아래처럼 클로저 안에서 모델을 정의하고 이 모델은 외부에서 몰라도 되도록 구현하면 더욱 이 모델은 단순히 데이터를 넘길때 사용하는 용도이구나 라는 코드 의도 파악도 쉬운 장점이 존재
// good case
let instance: SomeModelable = {
struct TemporaryModel: SomeModelable {
let a: Int
let b: String
}
return TemporaryModel(a: 12345, b: "67890")
}()
override func viewDidLoad() {
super.viewDidLoad()
viewModel.configure(model: instance)
}
'Refactoring (리펙토링)' 카테고리의 다른 글
[iOS - swift] DataSource 리펙토링 - Section과 Item을 enum으로 놓고 dictionary로 관리하기 (1) | 2024.01.26 |
---|---|
[iOS - swift] 리펙토링 - 로직을 위임하기 (#로직분리) (0) | 2024.01.25 |
[iOS - swift] 단순 열거 switch 리펙토링 (dictionary 활용하기) (0) | 2024.01.22 |
[iOS - swift] property 관리 리펙토링 (computed property를 활용한 리펙토링) (0) | 2024.01.21 |
[iOS - swift] extension을 활용한 네임스페이스 리펙토링 방법 (0) | 2024.01.20 |
Comments