1. DI를 위한 프로토콜 구성

/// typealias만 flow기준으로
/// protocol은 최대한잘게 추상메서드 기능기준으로

/// ex
protocol ReissueProtocol: AnyObject {
    func reissueToken(token: Token) async throws -> Token?
}

protocol LogoutProtocol: AnyObject {
    func logout(token: UserDefaultToken) async throws
}

protocol LoginProtocol: AnyObject {
    func login(type: LoginType) async throws
}

protocol SignUpProtocol: AnyObject {
    func signUp(type: LoginType, onboardingModel: UserOnboardingModel) async throws
}

typealias SplashServiceProtocol = ReissueProtocol & LogoutProtocol
typealias OnboardingServiceProtocol = SignUpProtocol
typealias LoginServiceProtocol = LoginProtocol

final class AuthService: Serviceable, SplashServiceProtocol, OnboardingServiceProtocol, LoginServiceProtocol {}

-----------------------------------------------------------

protocol AuthService {
	func logout() {}
}

protocol SettingService {
 
}

class SettingService {
	
	init(AuthService)
}

R <- setting
  <- auth

의존성을 가져간다.

----------

cell.imageView.kf.setImage()

kf객체에서 의존성을 가져감
(service느낌과 유사)

----------

Repository (무언가 Service를 감싼 Wrapper클래스) {
	authService
	settingService

	init() {}
	
	logout() { ... } // 기본 구현을 여기서 제공해줄 수 있다.
}

Repository -> MyPageVC
VC이 레포지토리를 바라봄.

Repository -> AuthViewController

ViewController -> UI 그리기
View Model (view를 위한 모델) -> View에 binding위한 model. "\\()님 어서어세요"
(core) useCase -> 비즈니스 로직들 (String) service부르는거밖에 안함ㅋㅋ
service -> 
repository -> 

추후 리팩토링 예정인 방법입니다.


지금 현재까지는 네트워크 연결을 담당하는 Service객체가 모두 싱글톤 객체로 되어있습니다. 저희 목표는 추후에 테스트 코드까지 가져가는 것인데 이런 테스트 코드를 위해서는 우선 의존성이 모두 분리가 된 환경에서 진행해야한다고 조언을 들었던 적이 있어서 그 때의 상황을 우선 가정하고 프로토콜 분리 방향을 위와 같이 정했습니다.

우선 프로토콜은 기능별로 최대한 잘게 나누어서 각 기능별로 묶을 생각이였습니다. 이렇게 하는 이유로 잘게 프로토콜을 나누게 되면 한 화면에서 필요한 Protocol을 하나씩 가져와서 조합하는 것만으로 해당 화면에 필요한 프로토콜들의 조합을 typealias로 만들 수 있습니다.

typealias SplashServiceProtocol = ReissueProtocol & LogoutProtocol

Service에 프로토콜의 묶음을 채택해 해당 Service가 쓰이는 화면을 채택한 프로토콜을 통해서 알 수 있습니다.

final class AuthService: Serviceable, SplashServiceProtocol, OnboardingServiceProtocol, LoginServiceProtocol {}

위와 같은 방법으로 Service객체를 싱글톤에서 의존성 주입으로 넣어줄 생각인데 이런 방법에 대해서 어떻게 생각하시는지 여쭤보고 싶고, 테스트 코드에 있어서 의존성 분리가 어디까지 진행되어야 하는지도 궁금합니다.

2. Onboarding 로직

온보딩플로우 로직

enum을 활용한 paging logic

  1. 임신주차정보를 유저에게 입력받는 페이지
  2. 태명을 유저에게 입력받는 페이지