Skip to content

코틀린 코드 스타일로 마이그레이션

코틀린 코딩 컨벤션과 IntelliJ IDEA 포매터

코틀린 코딩 컨벤션은 관용적인 코틀린 코드를 작성하는 여러 측면에 영향을 미치며, 코틀린 코드 가독성 향상을 목표로 하는 일련의 포맷팅 권장 사항도 그중 하나입니다.

안타깝게도, IntelliJ IDEA에 내장된 코드 포매터는 이 문서가 출시되기 오래 전부터 작동해왔으며, 현재는 권장되는 것과 다른 포맷팅을 생성하는 기본 설정을 가지고 있습니다.

IntelliJ IDEA의 기본값을 전환하여 이러한 불분명함을 제거하고, 코틀린 코딩 컨벤션과 포맷팅을 일관되게 만드는 것이 논리적인 다음 단계로 보일 수 있습니다. 하지만 이는 코틀린 플러그인이 설치되는 순간 모든 기존 코틀린 프로젝트에 새로운 코드 스타일이 활성화된다는 것을 의미합니다. 플러그인 업데이트에 대한 예상되는 결과는 아니죠?

그래서 우리는 대신 다음과 같은 마이그레이션 계획을 가지고 있습니다:

  • 코틀린 1.3부터는 기본적으로 공식 코드 스타일 포맷팅을 활성화하며, 이는 새로운 프로젝트에만 해당됩니다 (이전 포맷팅은 수동으로 활성화할 수 있습니다).
  • 기존 프로젝트의 개발자는 코틀린 코딩 컨벤션으로 마이그레이션하기로 선택할 수 있습니다.
  • 기존 프로젝트의 개발자는 프로젝트에서 이전 코드 스타일을 사용한다고 명시적으로 선언할 수 있습니다 (이 방법으로 프로젝트는 향후 기본값 전환에 영향을 받지 않을 것입니다).
  • 코틀린 1.4에서는 기본 포맷팅으로 전환하고 코틀린 코딩 컨벤션과 일관되게 만듭니다.

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

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

Code formatting

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

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

새로운 코드 스타일 채택은 이전 방식으로 포맷팅된 코드가 없는 새 프로젝트에서 시작된다면 매우 자연스러운 과정일 수 있습니다. 이것이 버전 1.3부터 코틀린 IntelliJ 플러그인이 코딩 컨벤션 문서의 포맷팅으로 새 프로젝트를 생성하며, 이는 기본적으로 활성화됩니다.

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

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

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

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

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

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

코틀린 코딩 컨벤션 코드 스타일로 전환하려면 설정/환경설정 | 편집기 | 코드 스타일 | 코틀린 대화 상자에서 할 수 있습니다. 스키마를 Project로 전환하고 Set from... | Kotlin style guide를 활성화하십시오.

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

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

Gradle에서

프로젝트 루트에 있는 gradle.properties 파일에 kotlin.code.style=official 속성을 추가하고 해당 파일을 VCS에 커밋하십시오.

Maven에서

루트 pom.xml 프로젝트 파일에 kotlin.code.style official 속성을 추가하십시오.

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

kotlin.code.style 옵션을 설정하면 프로젝트 임포트 중에 코드 스타일 스키마를 수정하고 코드 스타일 설정을 변경할 수 있습니다.

코드 스타일 설정을 업데이트한 후, 프로젝트 뷰에서 원하는 범위에 대해 **코드 재포맷(Reformat Code)**을 활성화하십시오.

Reformat code

점진적 마이그레이션을 위해 파일이 프로젝트 설정에 따라 포맷되지 않았습니다(File is not formatted according to project settings) 인스펙션을 활성화할 수 있습니다. 이는 재포맷되어야 할 부분을 강조 표시할 것입니다. 수정된 파일에만 적용(Apply only to modified files) 옵션을 활성화하면, 수정된 파일에서만 포맷팅 문제가 표시됩니다. 이러한 파일은 어차피 곧 커밋될 것입니다.

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

프로젝트의 올바른 코드 스타일로 IntelliJ IDEA 코드 스타일을 명시적으로 설정하는 것은 언제든지 가능합니다:

  1. 설정/환경설정 | 편집기 | 코드 스타일 | 코틀린에서 스키마를 Project로 전환하십시오.
  2. Load/Save 탭을 열고 Use defaults from에서 Kotlin obsolete IntelliJ IDEA codestyle을 선택하십시오.

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