Skip to content

Kotlin 코드 스타일로 마이그레이션

Kotlin 코딩 컨벤션 및 IntelliJ IDEA 포매터

Kotlin 코딩 컨벤션은 관용적인 Kotlin 코드를 작성하는 여러 측면에 영향을 미치며, Kotlin 코드 가독성 향상을 목표로 하는 서식 지정 권장 사항도 그중 하나입니다.

안타깝게도 IntelliJ IDEA에 내장된 코드 포매터는 이 문서가 나오기 훨씬 전부터 작동했어야 했고, 현재는 권장되는 서식과 다른 서식을 생성하는 기본 설정으로 되어 있습니다.

IntelliJ IDEA의 기본 설정을 전환하여 이 모호함을 없애고 서식을 Kotlin 코딩 컨벤션과 일치시키는 것이 논리적인 다음 단계로 보일 수 있습니다. 하지만 이는 Kotlin 플러그인이 설치되는 순간 모든 기존 Kotlin 프로젝트에 새 코드 스타일이 활성화된다는 것을 의미합니다. 플러그인 업데이트에 대한 예상된 결과는 아니죠?

그래서 다음과 같은 마이그레이션 계획을 대신 세웠습니다.

  • Kotlin 1.3부터 새 프로젝트에 대해서만 공식 코드 스타일 서식 지정을 기본적으로 활성화합니다 (이전 서식은 수동으로 활성화할 수 있습니다).
  • 기존 프로젝트 작성자는 Kotlin 코딩 컨벤션으로 마이그레이션할 수 있습니다.
  • 기존 프로젝트 작성자는 프로젝트에서 이전 코드 스타일을 사용한다고 명시적으로 선언할 수 있습니다 (이렇게 하면 프로젝트가 향후 기본 설정으로 전환되는 영향을 받지 않습니다).
  • Kotlin 1.4에서는 기본 서식으로 전환하고 Kotlin 코딩 컨벤션과 일치시킵니다.

"Kotlin 코딩 컨벤션"과 "IntelliJ IDEA 기본 코드 스타일"의 차이점

가장 눈에 띄는 변화는 연속 들여쓰기 정책입니다. 여러 줄로 된 표현식이 이전 줄에서 끝나지 않았음을 보여주기 위해 이중 들여쓰기를 사용하는 좋은 아이디어가 있습니다. 이는 매우 간단하고 일반적인 규칙이지만, 일부 Kotlin 구문은 이런 방식으로 서식을 지정하면 약간 어색하게 보입니다. Kotlin 코딩 컨벤션에서는 긴 연속 들여쓰기가 이전에 강제되었던 경우 단일 들여쓰기를 사용하는 것을 권장합니다.

코드 포매팅

실제로 상당수의 코드가 영향을 받으므로, 이는 주요 코드 스타일 업데이트로 간주될 수 있습니다.

새 코드 스타일로의 마이그레이션 논의

새 코드 스타일 채택은 이전 방식으로 서식이 지정된 코드가 없을 때 새 프로젝트로 시작한다면 매우 자연스러운 과정일 수 있습니다. 이것이 버전 1.3부터 Kotlin IntelliJ 플러그인이 코딩 컨벤션 문서의 서식을 기본으로 활성화하여 새 프로젝트를 생성하는 이유입니다.

기존 프로젝트의 서식을 변경하는 것은 훨씬 더 까다로운 작업이며, 팀과 모든 주의사항을 논의하는 것으로 시작해야 합니다.

기존 프로젝트에서 코드 스타일을 변경하는 주요 단점은 blame/annotate VCS 기능이 관련 없는 커밋을 더 자주 가리킬 수 있다는 점입니다. 각 VCS에는 이 문제를 처리하는 어떤 종류의 방법이 있지만 (IntelliJ IDEA에서는 "이전 리비전 주석 달기"를 사용할 수 있습니다), 새 스타일이 모든 노력을 기울일 가치가 있는지 결정하는 것이 중요합니다. 의미 있는 변경 사항과 서식 재지정 커밋을 분리하는 관행은 나중에 조사하는 데 많은 도움이 될 수 있습니다.

또한 여러 하위 시스템에서 많은 파일을 커밋하면 개인 브랜치에서 병합 충돌이 발생할 수 있으므로 대규모 팀에서는 마이그레이션이 더 어려울 수 있습니다. 그리고 각 충돌 해결이 보통 사소한 일이라 할지라도, 현재 작업 중인 대규모 기능 브랜치가 있는지 아는 것이 여전히 현명합니다.

일반적으로 소규모 프로젝트의 경우 모든 파일을 한 번에 변환하는 것을 권장합니다.

중대형 프로젝트의 경우 결정이 어려울 수 있습니다. 당장 많은 파일을 업데이트할 준비가 되어 있지 않다면 모듈별로 마이그레이션하거나, 수정된 파일에 대해서만 점진적인 마이그레이션을 계속 진행할 수 있습니다.

새 코드 스타일로 마이그레이션

Kotlin 코딩 컨벤션 코드 스타일로 전환하려면 Settings/Preferences | Editor | Code Style | Kotlin 대화 상자에서 스키마를 Project로 전환하고 Set from... | Kotlin style guide를 활성화하면 됩니다.

모든 프로젝트 개발자와 이러한 변경 사항을 공유하려면 .idea/codeStyle 폴더를 VCS에 커밋해야 합니다.

프로젝트 구성을 위해 외부 빌드 시스템을 사용하고 .idea/codeStyle 폴더를 공유하지 않기로 결정한 경우, 추가 속성을 사용하여 Kotlin 코딩 컨벤션을 강제할 수 있습니다.

Gradle에서

프로젝트 루트의 gradle.properties 파일에 kotlin.code.style=official 속성을 추가하고 해당 파일을 VCS에 커밋합니다.

Maven에서

루트 pom.xml 프로젝트 파일에 kotlin.code.style official 속성을 추가합니다.

<properties>
  <kotlin.code.style>official</kotlin.code.style>
</properties>

DANGER

kotlin.code.style 옵션을 설정하면 프로젝트 가져오기 중에 코드 스타일 스키마가 수정될 수 있으며, 코드 스타일 설정이 변경될 수 있습니다.

코드 스타일 설정을 업데이트한 후, 원하는 범위에서 프로젝트 뷰의 Reformat Code를 활성화합니다.

코드 서식 재지정

점진적인 마이그레이션을 위해 File is not formatted according to project settings 검사를 활성화할 수 있습니다. 이 검사는 서식을 재지정해야 할 부분을 강조 표시합니다. Apply only to modified files 옵션을 활성화하면, 수정된 파일에서만 서식 문제가 표시됩니다. 이러한 파일은 어쨌든 곧 커밋될 가능성이 높습니다.

프로젝트에 이전 코드 스타일 저장

IntelliJ IDEA 코드 스타일을 프로젝트의 올바른 코드 스타일로 명시적으로 설정하는 것은 항상 가능합니다.

  1. Settings/Preferences | Editor | Code Style | Kotlin에서 Project 스키마로 전환합니다.
  2. Load/Save 탭을 열고 Use defaults from에서 Kotlin obsolete IntelliJ IDEA codestyle을 선택합니다.

프로젝트 개발자들에게 변경 사항을 공유하려면 .idea/codeStyle 폴더를 VCS에 커밋해야 합니다. 또는 Gradle 또는 Maven으로 구성된 프로젝트의 경우 kotlin.code.style=obsolete를 사용할 수 있습니다.