[swift] Swift Sourcery와 자동화된 코드 생성

개요

Swift Sourcery는 Swift 코드를 분석하고, 주석과 템플릿을 활용하여 자동화된 코드를 생성하는 도구입니다. 이를 통해 반복적이고 지루한 작업을 줄여 개발자가 더욱 효율적으로 코드를 작성할 수 있습니다.

Sourcery는 소스 코드에서 주석으로 표시된 특별한 메타데이터를 사용하여 코드를 검색하고, 주로 특정한 패턴으로 작성된 코드를 생성합니다. 예를 들어, 주석으로 특정 클래스를 식별하고, 해당 클래스의 프로퍼티와 메서드를 분석하고, 이를 기반으로 보일러플레이트 코드를 자동으로 생성할 수 있습니다.

이런 방식으로 Sourcery는 컴파일 시간에 코드를 생성하며, 이렇게 생성된 코드는 원래 소스 코드에 직접 반영되어 실행 가능한 코드로 만들어집니다.

시작하기

Sourcery를 사용하기 위해서는 먼저 프로젝트에 Sourcery를 설치해야 합니다. Swift Package Manager(SPM)을 사용하는 경우 Package.swift 파일에 Sourcery를 종속성으로 추가하고, Xcode를 사용하는 경우 Sourcery를 프로젝트에 추가해야 합니다.

Spm으로 설치하는 경우 다음과 같이 Package.swift 파일을 수정합니다.

// Package.swift

// ...
dependencies: [
    .package(url: "https://github.com/krzysztofzablocki/Sourcery.git", .upToNextMajor(from: "2.0.0"))
],
targets: [
    .target(name: "YourTarget", dependencies: [
        "Sourcery"
    ]),
    // ...
]

Xcode에서 설치하는 경우에는 다음과 같은 단계를 따릅니다.

  1. Sourcery의 저장소에서 소스 코드를 다운로드합니다.
  2. 다운로드한 소스 코드를 원하는 프로젝트의 폴더에 복사합니다.
  3. Xcode에서 프로젝트를 열고, 프로젝트 탐색기에서 복사한 파일을 프로젝트에 추가합니다.
  4. 프로젝트 설정에서 “Build Phases”로 이동하여 “New Run Script Phase”를 추가합니다.
  5. 추가한 스크립트에 다음과 같이 코드를 입력합니다:
$PODS_ROOT/Sourcery/bin/sourcery --config $PODS_ROOT/Sourcery/sourcery.yml

이제 Sourcery가 설치되었으므로 코드를 생성할 준비가 되었습니다.

코드 생성

Sourcery는 템플릿을 사용하여 코드를 생성합니다. 템플릿은 생성하려는 코드의 형식과 구조를 정의하는데 사용됩니다. 여러분은 미리 작성된 템플릿을 사용하거나 자체 템플릿을 작성할 수 있습니다.

Sourcery 템플릿은 다양한 기능을 지원합니다. 예를 들어, 소스 코드를 분석하여 클래스와 프로퍼티를 찾고, 이를 기반으로 새로운 클래스나 프로퍼티를 생성할 수 있습니다. 또한, 특정한 조건에 따라 코드를 자동으로 수정하거나 주석을 추가할 수도 있습니다.

예를 들어, 다음은 간단한 템플릿의 예입니다:

// MyTemplate.stencil

{% for class in types.classes %}
class {{ class.name }} {
    {% for property in class.storedProperties %}
    var {{ property.name }}: {{ property.type }} = {{ property.defaultValue }}
    {% endfor %}
}
{% endfor %}

이 템플릿은 소스 코드에서 클래스를 찾아 클래스 이름과 해당 클래스의 프로퍼티를 분석하여, 새로운 클래스를 생성합니다.

Sourcery를 실행하여 코드를 생성하려면, 다음과 같은 명령어를 사용합니다:

sourcery --sources <소스코드 폴더 경로> --templates <템플릿 폴더 경로> --output <출력 폴더 경로>

위 명령어에서 <소스코드 폴더 경로>는 Sourcery가 코드를 분석할 폴더를 의미하며, <템플릿 폴더 경로>는 사용할 템플릿이 있는 폴더를 의미합니다. 마지막으로, <출력 폴더 경로>는 생성된 코드가 저장될 폴더를 의미합니다.

결론

Sourcery를 사용하면 Swift 코드를 분석하고 자동화된 코드를 생성할 수 있습니다. 이를 통해 개발자는 더욱 효율적으로 코드를 작성할 수 있으며, 반복적인 작업을 줄일 수 있습니다. Sourcery를 익히고 템플릿을 만들어 보면서, 더욱 간결하고 유지보수가 용이한 코드를 작성해보세요.

참고 자료