ktlint, detekt 으로 코드 퀄리티 향상시키기

kotlin code beautifier

Ji Sungbin
성빈랜드
4 min readMar 11, 2022

--

Photo by garrett parker on Unsplash

우리는 수많은 코드들을 작성합니다. 하지만 만약 작성한 코드들이 더러운 상태로 쌓이다 보면, 프로젝트 규모가 커지고 리펙토링이 필요해 졌을 때 더러운 코드들로 인해 리펙토링에 차질이 생길 것입니다. 이런 상황을 예방하기 위해 린트와 코드 정적 분석기가 존재합니다. 코틀린 프로젝트에서 가장 흔히 쓰이는 린트와 코드 정적 분석기인 ktlint 와 detekt 를 사용하는 방법에 대해 알아봅시다.

ktlint

An anti-bikeshedding Kotlin linter with built-in formatter

ktlint 를 통해 코틀린 코드 스타일 가이드에 맞게 코드를 예쁘게 다듬어 줄 수 있습니다. ktlint 에서 사용하는 스타일 가이드는 공식 홈페이지에서 확인할 수 있습니다. ktlint 를 프로젝트 전체에서 사용하기 위해 플러그인을 프로젝트 단위 그레이들에 추가해 줍니다.

다음으로 allprojects 에 플러그인을 적용해 줍니다.

이제 그레이들 동기화 후, 아래 커멘드를 통해 현재 코드가 스타일에 맞게 잘 작성돼 있는지 확인할 수 있습니다.

현재 임폴트 순서가 잘못됐다고 에러를 발생시켰습니다. 이렇게 스타일에 문제가 있는 경우, 아래 커멘드를 통해 자동으로 고칠 수 있는 부분들을 고쳐줄 수 있습니다.

위 커멘드를 실행시키고 다시 ktlintCheck 를 실행시키면 통과 되는것을 확인할 수 있습니다.

detekt

이제 detekt 를 적용해 보겠습니다. detekt 는 코드 포멧팅 보다는, 코드 복잡성, code smell 탐색과 같은 코드 분석에 초점을 둔 도구 입니다.

Static code analysis for Kotlin

ktlint 와 마찬가지로 프로젝트 전체에서 사용하기 위해 플러그인을 프로젝트 단위 그레이들에 추가해 줍니다.

다음으로 allprojects 에 플러그인을 적용해 줍니다.

이제 그레이들 동기화 후, 아래 커멘드를 통해 코드에 문제가 없는지 검사할 수 있습니다.

만약 detekt 를 사용하는 프로젝트가 안드로이드에서 Jetpack Compose 를 사용하고 있는 프로젝트 라면 네이밍 관련해서 문제들이 많이 발생할 것입니다. 하지만 이 네이밍들은 Jetpack Compose API 명세서에서 권장하고 있는 네이밍들 이기에 detekt 에 Jetpack Compose 맞춤 규칙을 추가해줘야 합니다.

detekt-config.yml 파일을 생성하고, 아래와 같이 작성해 줍니다.

이제 이를 detekt 에 적용해 줍니다.

이렇게 해서 detekt 설정도 끝났습니다. detekt 는 이 밖에도 다양한 옵션들을 지원합니다. 공식 사이트에서 더 자세히 알아 볼 수 있습니다.

끝!

ktlint 와 detekt 를 적용하는 방법에 대해 알아보았습니다. 이를 Github Actions CI 에 적용시켜 유용하게 사용할 수 있습니다.

이 아티클에서 사용된 프로젝트는 깃허브에서 확인하실 수 있습니다.

끝까지 읽어주셔서 감사합니다.

모바일(Android/iOS) 개발자 분들을 위한 카카오톡 오픈 채팅방을 운영하고 있습니다.

--

--

Ji Sungbin
성빈랜드

Experience Engineers for us. I love development that creates references.