Post

[Day 43] 일관된 코드 스타일의 시작

매번 손으로 코드 스타일을 맞추느라 지쳤나요? Xcode의 강력한 친구, SwiftFormat을 만나 일관된 코드 스타일을 자동으로 유지하는 신세계를 경험한 후기를 공유합니다.

[Day 43] 일관된 코드 스타일의 시작

😭 수동 포맷팅의 굴레, 이제 벗어날 시간!

여러분, 혹시 코드 스타일이나 코드 컨벤션 때문에 고민이 많으시지 않으신가요?

들여쓰기는 2칸이 맞는지, else} 옆에 붙여야 하는지, self는 언제 생략해야 하는지… 코드를 작성할 때마다, 혹은 코드 리뷰를 할 때마다 이런 사소하지만 중요한 규칙들 때문에 시간을 많이 쓰셨을 거예요. 팀원마다 스타일이 다르면 코드는 금세 복잡해지고, 코드 리뷰는 스타일 지적의 장이 되기 일쑤였죠.

이제 이런 비효율적인 과정에서 벗어나게 해 줄 Xcode의 강력한 친구, SwiftFormat을 만나볼 시간입니다!

✨ SwiftFormat: Xcode에 내장된 코드 스타일 슈퍼파워

SwiftFormat은 Swift 코드를 자동으로 포맷팅하여 일관된 스타일을 유지하도록 돕는 전문 도구입니다. 여러분이 미리 정의한 규칙에 따라 코드를 깔끔하게 정리해주므로, 더 이상 스타일 가이드라인을 외우거나 수동으로 수정할 필요가 없어요.

수동 포맷팅과 SwiftFormat의 가장 큰 차이점은 바로 ‘자동화된 일관성’입니다. 코드를 고치고, 다시 빌드하고, 스타일을 맞추는 과정 없이, SwiftFormat이 알아서 모든 것을 처리해준답니다.

🚀 오늘 정복할 SwiftFormat 핵심 적용 방법 TOP 3

SwiftFormat의 모든 규칙을 한 번에 다 알 필요는 없어요. 하지만 이 세 가지만 알아도 코드 스타일 관리가 훨씬 쉬워질 거예요.

1. SwiftFormat 설치 및 설정 파일 (.swiftformat)

가장 먼저 SwiftFormat을 설치하고, 프로젝트 루트에 .swiftformat 파일을 만들어 여러분이 원하는 스타일 규칙을 정의해야 합니다. 이 파일이 바로 SwiftFormat의 핵심 설정 역할을 해요.

설치 방법:

1
brew install swiftformat

.swiftformat 파일 구성:

SwiftFormat에는 정말 다양한 규칙과 옵션들이 있습니다. 자세한 내용은 공식 GitHub 저장소에서 확인해볼 수 있어요. 여러분의 프로젝트에 딱 맞는 규칙들을 골라서 .swiftformat 파일을 구성해보세요!

2. .swift-version 파일로 Swift 버전 명시 (선택 사항)

SwiftFormat이 여러분의 프로젝트 Swift 버전을 정확히 인식하도록 .swift-version 파일을 생성하는 것이 좋습니다. 이렇게 하면 특정 Swift 버전에서만 유효한 문법이나 포맷팅 규칙도 올바르게 적용할 수 있답니다.

프로젝트 루트 디렉토리에 .swift-version 파일을 만들고, 현재 사용 중인 Swift 버전을 한 줄로 작성해주세요.

1
5.8

3. Git Pre-commit Hook 설정 (선택 사항)

커밋하기 전에 자동으로 코드를 포맷하고 싶다면, Git의 pre-commit 훅을 활용할 수 있습니다. 이렇게 하면 포맷되지 않은 코드가 실수로 커밋되는 것을 방지할 수 있어요.

  1. 프로젝트 루트 디렉토리의 .git/hooks 폴더로 이동합니다.
  2. pre-commit이라는 이름의 파일을 생성하고, 실행 권한을 부여합니다.

    1
    2
    
    vi .git/hooks/pre-commit
    chmod +x .git/hooks/pre-commit
    
  3. pre-commit 파일에 다음 스크립트를 작성합니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    #!/bin/bash
    
    # SwiftFormat이 설치되어 있는지 확인
    if ! which swiftformat >/dev/null; then
      echo "SwiftFormat이 설치되어 있지 않습니다. Homebrew로 설치해주세요: brew install swiftformat"
      exit 1
    fi
    
    # 변경된 Swift 파일만 SwiftFormat으로 포맷
    # git diff --cached --name-only --diff-filter=ACM은 staged된 파일 중 추가/수정된 파일만 가져옵니다.
    git diff --cached --name-only --diff-filter=ACM | grep .swift$ | while read FILE; do
      swiftformat --config "${PROJECT_DIR}/.swiftformat" "$FILE"
      git add "$FILE" # 포맷된 파일을 다시 staged 상태로 만듭니다.
    done
    
    echo "SwiftFormat 포맷팅 완료!"
    

    이 스크립트는 커밋하기 전에 변경된 Swift 파일들을 SwiftFormat으로 포맷하고, 포맷된 내용을 다시 스테이징 영역에 추가해줍니다.

4. Xcode 빌드 단계에 통합: 빌드할 때마다 자동 포맷팅!

이것이 바로 오늘의 하이라이트! 단순히 필요할 때만 SwiftFormat을 실행하는 것을 넘어, Xcode에서 빌드할 때마다 코드를 자동으로 포맷하도록 설정할 수 있습니다. 한 번만 설정해두면, 그 다음부터는 신경 쓸 필요 없이 여러분의 코드가 항상 깔끔하게 유지될 거예요.

  1. Xcode 프로젝트를 열고, 해당 타겟(Target)을 선택해주세요.
  2. Build Phases 탭으로 이동합니다.
  3. + 버튼을 눌러 New Run Script Phase를 추가합니다.
  4. 새로 생긴 Run Script 칸에 아래 스크립트를 복사해서 붙여넣으세요.

    1
    2
    3
    4
    5
    
    if which swiftformat >/dev/null; then
      swiftformat --config "${PROJECT_DIR}/.swiftformat" .
    else
      echo "warning: SwiftFormat not installed, download from https://github.com/nicklockwood/SwiftFormat"
    fi
    

    이 스크립트는 swiftformat이 설치되어 있는지 확인하고, 설치되어 있다면 프로젝트 루트의 .swiftformat 파일을 참고하여 모든 Swift 파일을 포맷해 줄 것입니다.

  5. 만약 이대로 빌드를 했는데, error: Sandbox: bash(82460) deny(1) file-read-data가 발생했다면?
  • TARGETS -> Build Settings -> Build Options -> User Script Sandboxing을 NO로 설정해주면 문제를 해결할 수 있습니다.
  1. brew에서 swiftformat을 다운 받았는데 다운 받으라고 경고창이 뜬다면?
  • 터미널에서 which swiftformat를 입력하여 swiftformat이 제대로 다운로드 되어있느지 확인하고 다운로드 되어있다면 경로를 직접 지정해주어야 한다 ```bash export PATH=”/opt/homebrew/bin:$PATH”

if which swiftformat > /dev/null; then swiftformat –config “${PROJECT_DIR}/.swiftformat” . else echo “warning: SwiftFormat not installed, download from https://github.com/nicklockwood/SwiftFormat” fi ```

  • 이렇게 입력해보자! 그러면 해결 될거야!

맺으며: SwiftFormat과 함께하는 스마트한 개발

오늘은 SwiftFormat의 문을 살짝 열어본 것이지만, 왜 많은 개발자들이 코드 스타일 자동화를 강조하는지 이제 여러분도 느끼셨을 거예요. 아직은 설정 파일의 모든 규칙을 다 알지는 못하더라도, 의식적으로 SwiftFormat과 친해지려고 노력해보세요. 스마트하게 포맷팅하는 것이 스마트한 개발 문화를 만드는 첫걸음이 될 것입니다.

혹시 이 글을 보시는 분들 중 더 유용한 팁이 있다면 댓글로 많이 알려주세요!

This post is licensed under CC BY 4.0 by the author.