소개
클린 아키텍처는 애플리케이션을 구성하는 레이어를 분리하여 유연하고 테스트 가능한 코드를 작성하는 아키텍처 패턴입니다. Swift에서 클린 아키텍처를 구현하기 위해 Sourcery라는 코드 생성 도구를 활용할 수 있습니다. Sourcery는 코드를 분석하여 자동으로 코드를 생성하는 기능을 제공하여 반복적이고 지루한 작업을 줄여줍니다.
이번 기사에서는 Swift Sourcery를 사용하여 클린 아키텍처를 구현하는 방법을 알아보겠습니다.
필요 도구
- Swift Package Manager(SPM) - Sourcery를 설치하고 프로젝트를 관리하기 위해 SPM을 사용합니다.
- Sourcery - 코드 생성 도구로 Swift 코드를 분석하여 자동으로 코드를 생성할 수 있습니다.
설치 및 설정
- 프로젝트에 SPM을 추가합니다.
Package.swift
파일을 열고dependencies
항목을 다음과 같이 수정합니다.
// Package.swift
let package = Package(
name: "MyProject",
dependencies: [
// ...
.package(url: "https://github.com/krzysztofzablocki/Sourcery.git", from: "1.0.0")
],
// ...
)
- 프로젝트 루트 디렉토리에
sourcery.yml
파일을 생성합니다. 이 파일은 Sourcery에서 사용할 설정을 정의합니다. 아래는 예시입니다.
// sourcery.yml
sources:
- MyProject
templates:
- MyProject/Templates
sourcery.yml
파일에는 프로젝트의 소스 코드 및 템플릿이 위치한 디렉토리를 설정할 수 있습니다. 위 예시에서는MyProject
디렉토리를 소스로 지정하고,MyProject/Templates
디렉토리에 있는 템플릿을 사용합니다.
모듈 분리
클린 아키텍처를 구현하기 위해 각 레이어를 별도의 모듈로 분리하는 것이 일반적입니다. 이를 위해 SPM을 사용하여 각 모듈을 만들 수 있습니다.
- 각 레이어를 나타내는 모듈을 생성합니다. 예를 들어,
Presentation
,Domain
,Data
라는 이름의 모듈을 생성할 수 있습니다.
$ swift package init --type executable
- 생성한 각 모듈에는 소스 코드가 존재해야 합니다. Sourcery는 이 소스 코드를 분석하여 자동으로 코드를 생성할 것입니다.
코드 생성
Sourcery를 실행하여 코드를 자동으로 생성할 수 있습니다.
$ swift run Sourcery
위 명령어를 실행하면 sourcery.yml
파일에서 지정한 소스 코드 디렉토리에서 코드 분석이 이루어지고, 템플릿을 통해 코드가 자동으로 생성됩니다.
예제
아래는 템플릿을 사용하여 자동으로 생성된 코드의 예입니다.
Presentation 모듈
public protocol ViewModel {
// ...
}
public protocol View {
// ...
}
public class Presenter {
private let view: View
private let viewModel: ViewModel
public init(view: View, viewModel: ViewModel) {
self.view = view
self.viewModel = viewModel
}
// ...
}
Domain 모듈
public protocol UseCase {
// ...
}
public class Interactor {
private let useCase: UseCase
public init(useCase: UseCase) {
self.useCase = useCase
}
// ...
}
public protocol Repository {
// ...
}
Data 모듈
public class RepositoryImpl: Repository {
// ...
}
public class UseCaseImpl: UseCase {
// ...
}
위 코드는 각 모듈의 레이어를 구현하는 코드 입니다. 이 코드는 처음에는 작성하지만, 소스 코드가 변경되면 서버를 수정할 필요 없이 Sourcery를 실행하여 변경 사항에 맞게 코드를 자동으로 갱신할 수 있습니다.
결론
Swift Sourcery를 활용하여 클린 아키텍처를 구현하는 방법을 알아보았습니다. Sourcery를 사용하면 코드의 생산성을 높일 수 있으며, 유지 보수성과 테스트 용이성을 개선할 수 있습니다. 클린 아키텍처는 대규모 프로젝트에 특히 유용하며, Sourcery를 사용하여 쉽고 빠르게 구현할 수 있습니다.