SwiftUI 팀 프로젝트 혼자 리팩토링하기 #1 : 코드 삭제

·2024년 7월 3일
0

리팩토링 일지

목록 보기
2/13

진행한 것

1. 의존성 주입 & 서버 통신 관련 코드 삭제

@Observable
class AppLoginState {
    var serviceRoot: ServiceRoot
    var appData: AppData

    init() {
        appData = AppData()
        serviceRoot = ServiceRoot()
        checkTokenValidity()
        serviceRoot.auth.relogin = relogin
        serviceRoot.memberManager.fetchProfile()
    }

    private func relogin() {
        DispatchQueue.main.async {
            self.serviceRoot.auth.authState = .none
        }
    }

    private func checkTokenValidity() {
        if serviceRoot.apimanager.authenticator.accessToken != nil {
            serviceRoot.auth.authState = .loggedIn
        } else {
            serviceRoot.auth.authState = .none
        }
    }
}

class ServiceRoot {
    var auth = Authenticator()
    lazy var apimanager: NewApiManager = {
        let manager = NewApiManager(authenticator: auth)
        return manager
    }()
    var navigationManager = NavigationManager()
    lazy var memberManager = MemberManager(authenticator: auth)
}

우리 앱은 기존에 AppLoginState 라는 이름을 가진 DI Container을 통해 구성되어 있었다.

같이 설계를 하진 못했지만, 일단 처음 만들 때의 의미는 DI Container가 맞다고 생각한다!


View에서 AppLoginState 를 environmentObject로 가져오고, ViewModel에서는 다음과 같이 동작한다.

    init(loginState: AppLoginState) {
        self.loginState = loginState
    }

    func requestPosts(postType: PostService) {
        loginState.serviceRoot.apimanager
            .request(.postService(postType), decodingType: MyPostModel.self)
            ...
   	}

init 시에 의존성을 주입받고,
serviceRoot -> apiManager -> request -> service 순으로... 호출한다.

AppLoginState 자체가 잘못된 것은 아니지만 그 안에 API를 호출하는 APIManager가 존재했다.

우선 APIManager(API 관련 객체)는 AppLoginState이 아니라 다른 계층에 존재할 것이기 때문에, 쿨하게(?) 이 부분을 다 삭제해주기로 했다.
(APIManager를 추상화한 프로토콜이 구성되어 있지 않아서, 이를 유지한다고 해도 애초에 객체를 교체하는 것도 불가능했다.)

또한, ViewModel에서 위와 같이 접근하여 통신을 진행하는 코드도 모두 삭제하였다. 마찬가지로 인터페이스와 올바른 의존성 주입을 사용하지 않았기 때문에 모두 삭제가 불가피했다.

그러다 보니 ViewModel에서 관련 코드를 전부 삭제하고 빌드하고를 반복하는데, 아 이래서 POP를 하는구나... 싶었다


그냥 코드 삭제만 하는데도 3시간이 걸렸다.

그때는 그래도 엄청 신경써서 코드를 작성하고, 이해도 다 됐다고 생각했는데, 삭제하면서 전체 코드를 읽어보니 정말 복잡한 코드가 많았다.

아무리 시간이 지났어도, 내 모토가 모두가 이해할 수 있는 코드를 작성하자! 라서... 많이 아쉬웠다. 많이 노력해야겠다. 😥

0개의 댓글

관련 채용 정보