개발/Swift
[Swift] 프로토콜 지향 제네릭
Liber21
2021. 6. 3. 18:53
반응형
프로토콜 지향 설계에서는 언제나 프로토콜로 시작한다
protocol List {
associatedtype T
subscript<E: Sequence>(indices: E) -> [T] where E.Iterator.Element == Int { get }
func length() -> Int
func get(at index: Int) -> T?
mutating func add(_ item: T)
mutating func delete(at index: Int)
}
아래는 활용편이다
선언부, 구현부로 분리하여 네트워킹 코드를 작성할 것이다
이 글은 RxSwift를 사용한다
Usecase (선언부)
import RxSwift
protocol PasswordUsecase: PasswordCheckUsecase, PasswordChangeUsecase { }
protocol PasswordCheckUsecase {
/// 비밀번호 확인
func reqCheckPassword(path: CheckPassword_API.Path, req: CheckPassword_API.Request) -> Observable<CheckPassword_API.Response>
}
protocol PasswordChangeUsecase {
/// 비밀번호 변경
func reqChangePassword(path: CheckPassword_API.Path, req: CheckPassword_API.Request) -> Observable<CheckPassword_API.Response>
}
최상위 PasswordUsecase 를 두고, 이에 타 프로토콜을 선언해두어 최상위로 확장한다
분리하여 작성해둔 이유는 추가, 삭제, 수정 등 변경사항이 있을 때 해당 Protocol만 붙이고 떼어내면 되어 간략해지기 때문 🙂
Service (구현부)
import RxSwift
class PasswordService: PasswordUsecase {
func reqCheckPassword(path: CheckPassword_API.Path, req: CheckPassword_API.Request) -> Observable<CheckPassword_API.Response> {
...
}
func reqChangePassword(path: CheckPassword_API.Path, req: CheckPassword_API.Request) -> Observable<CheckPassword_API.Response> {
...
}
}
구현부 내에서 위의 프로토콜을 핸들링한다
선언부와 구현부를 나누어 작성한 이유는, 이후 테스트를 진행할 때 해당 프로토콜을 채택하여 사용하면 편리하기 때문이다 👍
반응형