[swift] Swift Sourcery를 활용한 MVP 아키텍처 구현

MVP (Model-View-Presenter) 아키텍처는 iOS 애플리케이션 개발에서 많이 사용되는 패턴 중 하나입니다. 이 아키텍처를 사용하면 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다. 이번 글에서는 Swift Sourcery를 활용하여 MVP 아키텍처를 구현하는 방법에 대해 알아보겠습니다.

1. Swift Sourcery란?

Swift Sourcery는 Swift 코드 생성 도구로, 소스 코드를 분석하고 템플릿을 기반으로 코드를 생성해줍니다. 이를 활용하여 MVP 아키텍처를 구현할 때, 보일러플레이트 코드를 자동으로 생성하여 개발자의 생산성을 향상시킬 수 있습니다.

2. MVP 아키텍처 개요

MVP 아키텍처는 다음과 같이 세 가지 주요 구성 요소로 이루어져 있습니다.

MVP 아키텍처의 핵심 아이디어는 View와 비즈니스 로직 간의 분리입니다. 이를 통해 재사용 가능한 View와 비즈니스 로직을 개발할 수 있으며, 테스트하기도 쉽습니다.

3. Swift Sourcery를 사용한 코드 생성

Swift Sourcery를 사용하여 MVP 아키텍처를 구현하기 위해서는 먼저 필요한 Sourcery 템플릿을 작성해야 합니다.

아래는 View와 Presenter의 기본 구조를 생성하는 템플릿의 예시입니다.

ViewTemplate.stencil

// sourcery: AutoMockable
protocol ViewProtocol: AnyObject {
    // View 프로토콜에 필요한 메소드와 프로퍼티를 정의
    // ...
}

class View: UIViewController, ViewProtocol {
    // View의 구현
    // ...
}

PresenterTemplate.stencil

protocol PresenterProtocol {
    // Presenter 프로토콜에 필요한 메소드와 프로퍼티를 정의
    // ...
}

class Presenter: PresenterProtocol {
    var model: ModelProtocol
    weak var view: ViewProtocol?

    // Presenter의 구현
    // ...
}

이렇게 작성한 템플릿을 이용하여 실제 코드를 생성할 수 있습니다. 예를 들어, User라는 모델에 대한 MVP 구조를 생성하고 싶다면 아래와 같이 입력할 수 있습니다.

UserMVP.swift.sourcery.swift

// sourcery: AutoDependencyInjection
protocol UserModelProtocol {
    // User 모델에 필요한 메소드와 프로퍼티를 정의
    // ...
}

class UserModel: UserModelProtocol {
    // User 모델의 구현
    // ...
}

// sourcery: AutoDependencyInjection
protocol UserViewProtocol: ViewProtocol {
    // UserView 프로토콜에 필요한 메소드와 프로퍼티를 정의
    // ...
}

// sourcery: AutoDependencyInjection
protocol UserPresenterProtocol: PresenterProtocol {
    // UserPresenter 프로토콜에 필요한 메소드와 프로퍼티를 정의
    // ...
}

// sourcery: AutoDependencyInjection
class UserPresenter: Presenter, UserPresenterProtocol {
    var userModel: UserModelProtocol
    weak var userView: UserViewProtocol?

    // UserPresenter의 구현
    // ...
}

// 실제 User MVP 구조 생성
let userView = UserView()
let userModel = UserModel()
let userPresenter = UserPresenter(model: userModel, view: userView)

userView.presenter = userPresenter

위와 같이 생성된 코드를 애플리케이션에 적용하면, MVP 아키텍처를 쉽게 구현할 수 있습니다.

4. 마치며

Swift Sourcery를 활용하여 MVP 아키텍처를 구현하는 방법을 살펴보았습니다. 이를 통해 반복적이고 번거로운 코드 작업을 자동화하여 생산성을 향상시킬 수 있습니다. MVP 아키텍처를 사용하면 애플리케이션의 유지보수성과 확장성이 향상되므로, 이를 적용하여 개발하면 좋습니다.

참고 자료