반응형
프로토콜 지향 설계에서는 언제나 프로토콜로 시작한다
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> {
...
}
}
구현부 내에서 위의 프로토콜을 핸들링한다
선언부와 구현부를 나누어 작성한 이유는, 이후 테스트를 진행할 때 해당 프로토콜을 채택하여 사용하면 편리하기 때문이다 👍
반응형
'개발 > Swift' 카테고리의 다른 글
[Swift] UI - Dynamic TableView (0) | 2022.10.29 |
---|---|
[Swift] Set 연산 (0) | 2021.06.17 |
[Swift] TextField 앞 뒤 공백 없애기 (0) | 2021.04.22 |
[Swift] 테이블 뷰 -> 테이블 뷰 drag and drop (0) | 2021.04.20 |
[Swift] 문자열 다루기 (0) | 2021.03.31 |