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 |
Tags
- Protocol
- rxswift
- ribs
- Human interface guide
- Refactoring
- UITextView
- MVVM
- uiscrollview
- Clean Code
- combine
- 클린 코드
- HIG
- swift documentation
- Observable
- 리펙토링
- Xcode
- collectionview
- UICollectionView
- swiftUI
- uitableview
- map
- SWIFT
- clean architecture
- 스위프트
- tableView
- ios
- 애니메이션
- RxCocoa
- 리팩토링
- 리펙터링
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] Custom View와 protocol (커스텀 뷰 구현 시 프로토콜 사용하기, DIP) 본문
iOS 응용 (swift)
[iOS - swift] Custom View와 protocol (커스텀 뷰 구현 시 프로토콜 사용하기, DIP)
jake-kim 2024. 1. 1. 23:01Custom View 구현 시 프로토콜을 사용하면 좋은 이유
- 보통 커스텀 뷰를 구현하면 사용하는쪽에서 가져다 쓰는데, 사용하는곳이 여러곳이면 이 커스텀 뷰를 수정할때 여러곳을 고려해야하여 수정이 어려움이 존재
- 프로토콜을 사용한다면?
- 구현체의 의존성을 사용하는쪽에 두지 않는것이 가장 큰 의미, DIP(Dependency Inversion Principle)
- 사용하는쪽에서는 Interface에만 의존하고 있기 때문에 구현체에 여러가지 변화를 주더라도 유연한 구조 유지가 가능
- ex) 커스텀 뷰가 공통 뷰이고 이 뷰가 Swift에서 SwiftUI로 넘어갈 때 역시도 protocol로만 외부에게 노출했으면 유연하게 수정이 가능
protocol로 커스텀 뷰 구현하기
- 커스텀 버튼을 만든다고 했을 때, UIView로 추상화하고 Titleditlable만 따르도록 구현
class MyButton: UIView, TitleEditable {
private let button = UIButton()
func changeText(_ text: String) {
button.setTitle(text, for: .normal)
}
}
protocol TitleEditable {
func changeText(_ text: String)
}
- 사용하는쪽에서는 TitleEditlable에 의존하고 있는 상태이므로, MyButton이 SwiftUI로 변경되도, 다른 뷰로 교체해도 사용하는쪽에서는 changeText만 바라보고 있으므로 유연하게 수정이 가능
class ViewController: UIViewController {
let myButton = MyButton()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(myButton)
myButton.changeText("A")
}
}
정리
- protocol로 인터페이스를 제공하는 방향으로 커스텀 뷰를 만들다 보면, 커스텀 뷰 구현체의 변경이 더욱 쉽게 가능
- protocol로 인터페이스를 기능별로 쪼개다보면 protocol자체도 여러곳에서 재활용이 가능
- ex) TitleEditable이라는 프로토콜은 버튼의 타이틀 변경에도 필요하지만 텍스트 필드와 같은 곳에서도 커스텀을 만든다면 사용이 가능
'iOS 응용 (swift)' 카테고리의 다른 글
Comments