[swift] Swift Sourcery와 리팩토링을 위한 코드 생성

리팩토링은 소프트웨어 개발 과정에서 중요한 부분이며, 코드의 가독성과 재사용성을 높이는데 큰 도움을 줍니다. 이를 위해 Swift Sourcery를 사용하여 코드 생성을 수행할 수 있습니다. Swift Sourcery는 Swift 코드를 분석하고 템플릿을 기반으로 커스텀 코드를 생성하는 도구입니다.

Sourcery란?

Sourcery는 Swift 개발자들 사이에서 인기 있는 코드 생성 도구입니다. 이 도구를 사용하면 반복적인 작업을 자동화하고, 단순한 반복 작업을 수행하는 코드를 생성할 수 있습니다. 자동 생성된 코드는 기존 코드와 동일한 성능을 제공하지만, 유지 및 관리가 훨씬 쉬워집니다.

코드 생성을 위한 설정

Sourcery를 사용하기 위해선 먼저 프로젝트에 아래와 같은 세팅을 해야합니다.

1. Sourcery 설치

brew install sourcery

2. Sourcery 설정 파일 생성

프로젝트 루트 디렉토리에 sourcery.yml 파일을 생성합니다. 이 설정 파일은 Sourcery에서 사용할 템플릿, 입력 및 출력 경로, 그리고 다른 옵션을 정의합니다.

# sourcery.yml

sources:
  - MyProject

templates:
  - Templates

output:
  Generated/Code

위의 예시에서 sources는 코드 분석을 위한 디렉토리를 설정하고, templates는 사용할 템플릿이 있는 디렉토리를 설정합니다. output은 생성된 코드를 저장할 디렉토리를 정의합니다.

3. 템플릿 작성

템플릿은 주어진 입력 코드에 따라 생성될 코드의 형태를 정의합니다. 템플릿은 *.stencil 확장자를 가지며, templates 디렉토리에 저장될 수 있습니다.

코드 생성 실행

Sourcery 설정을 완료한 후에는 코드 생성을 실행할 수 있습니다. 다음 명령어를 사용하여 Sourcery를 실행합니다.

sourcery

이 명령을 실행하면 Sourcery는 설정 파일에 정의된 디렉토리 내의 코드를 분석하고, 템플릿을 기반으로 코드를 생성합니다. 생성된 코드는 설정 파일에 지정된 출력 경로에 저장됩니다.

실제 사용 예시

예를 들어, Swift 프로젝트에서 MVVM 아키텍처를 사용한다고 가정해봅시다. Sourcery를 사용하여 View, ViewModel, Model에 대한 코드를 자동 생성할 수 있습니다.

  1. 먼저, ViewBuilder라는 타입을 정의합니다.
// ViewBuilder.swift

class ViewBuilder {
    static func buildView<T: ViewModel>(viewModel: T) -> UIViewController {
        // View 생성을 위한 코드
    }
}
  1. Sourcery 설정 파일을 작성합니다.
# sourcery.yml

sources:
  - MyProject

templates:
  - Templates

output:
  Generated/Code
  1. 템플릿 작성
// ViewModel.stencil

{% for class in classes %}
class {{class.name}}: NSObject {
    // ViewModel 코드 생성을 위한 템플릿
}

{% for function in class.methods %}
func {{function.name}}() {
    // 메소드 코드 생성을 위한 템플릿
}
{% endfor %}
{% endfor %}

  1. Sourcery 실행

터미널에서 아래 명령어를 실행하여 Sourcery를 실행합니다.

sourcery
  1. 코드 확인

Sourcery에 의해 생성된 코드는 설정 파일에 정의된 Generated/Code 디렉토리 내에 저장됩니다. 해당 디렉토리를 확인하여 자동 생성된 코드를 확인할 수 있습니다.

결론

Swift Sourcery를 사용하여 코드 생성을 수행하면 반복적인 작업을 자동화하고 코드의 가독성을 향상시킬 수 있습니다. Sourcery는 많은 개발자들에게 인기 있는 도구로, 템플릿 기반의 코드 생성을 위한 강력한 기능을 제공합니다. 리팩토링에 시간을 절약하고 코드의 일관성을 유지하고자 한다면, Sourcery를 고려해보는 것이 좋습니다.