CS/Android

Ktlint vs Detekt vs Android Lint

졔졔311 2024. 12. 13. 17:21
728x90
반응형

ktlint, detekt, android lint 비교

특징 ktlint detekt android lint
목적 kotlin 코드 스타일 검사 및 포맷팅 kotlin 코드 정적 분석 및 품질 개선 android 프로젝트 전반 문제 탐지
포맷팅 지원 지원(자동 수정 가능) 지원x 지원x
정적 분석 지원x 코드 복잡성, 코드 smell 등 감지 android 관련 문제 탐지
결과 출력 text html, xml 등 출력 가능 android studio ui에서 확인 가능
설정 난이도 쉬움 어려움 기본 내장
예시 fun greet() :String {
   return "Hello, World!"
}
fun greet(): String {
    return "Hello, World!"
}

=> kotlin 코드 스타일 가이드에 맞게 수정
fun calculateSomething(input: Int): Int {
    var result = 0
    for (i in 1..100) {
        result += if (i % 2 == 0) {
            input * i
        } else {
            input + i
        }
    }
    return result
}
Function calculateSomething has a complexity of 11 (max allowed is 10).
Consider splitting the logic into smaller functions.
=> 복잡도가 너무 높다는 경고
val welcomeMessage = "Welcome to the app!"








fun unusedFunction() { /* ... */ }
Hardcoded string "Welcome to the app!", should use @string resource instead.
=> 문자열을 하드코딩 하는 것은 권장되지 않음.




The function is never used.

 

  • ktlint 사용 : 코드 스타일 포맷을 자동화, 팀 코드 일관성 유지
  • detekt 사용 : kotlin 코드 품질을 정적 분석해 유지보수성 개선
  • android lint : android 생태계와 관련된 사항 감지(성능, 접근성, deprecated API 사용 등)

=> kotlin 전용의 ktlint, detekt를 사용해 kotlin의 코드 스타일과 품질을 유지하고,
      android lint로 android 관련 문제를 탐지하며
     "상호 보완적"으로 사용할 수 있음

 


 

ktlint란?

  • Kotlin 코딩 규약과 Android의 Kotlin Style 가이드에 기반하여 코드 컨벤션을 지키도록 목표한 코드 스타일링 도구
  • Kotlin 공식 스타일 가이드를 따르며, 코드의 일관성을 유지하고 오류를 줄이는 데 도움을 줌
  • 특징
    • kotlin 공식 스타일 준수
    • 자동 포맷팅 : 코드 스타일 문제를 자동으로 수정
    • 빌드 도구와 통합 가능 : Gradle, Maven과 통합 가능
    • 간단한 CLI 지원 : 명령어로 빠르게 린트 검사 및 자동 수정 가능
  •  

ktlint 적용하기

  1. 플러그인 설정
    1. 방법 1)
      build.gradle.kts 파일에 다음과 같이 플러그인 추가하기
      1.  
      2. plugins {
            id("org.jlleitschuh.gradle.ktlint") version "<버전>"
        }
    2. 방법 2)
      안드로이드 스튜디오에서 플러그인 설치하기
      1. 파일 > 설정 > 플러그인 > ktlint 검색 후 설치 → IDE에서 사용 가능
    3. 방법 3)
      Git pre-commit hook에 추가하기
      1. commit 전에 스타일 검사를 자동으로 수행 가능
        1. ktlintCheck를 pre-commit hook으로 등록
          ./gradlew addKtlintCheckGitPreCommitHook
        2. ktlintFormat을 pre-commit hook으로 등록
          ./gradlew addKtlintFormatGitPreCommitHook
  2. ktlint 플러그인 설정
    1. build.gradle.kts 파일에 ktlint 원하는 설정을 추가
      1. ex)
        ktlint {
            android.set(true) // => Android 프로젝트에 최적화된 스타일 적용
            outputToConsole.set(true) // => 콘솔에 린트 결과 출력
            coloredOutput.set(true) // => 출력 메시지에 색상 적용
            ignoreFailures.set(false) // => 린트 오류 시 빌드 실패 설정
            reporters {
                reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN) // 기본 텍스트 리포트
                ...
            }
        }

ktlint 실행하기

  1. 코드 스타일 검사
    1. 프로젝트 전체에 대한 스타일 검사
      1. ./gradlew ktlintCheck
      2. "gradlew build" 실행 시 연결되는 전체 프로젝트 빌드 사이클에 포함되어, 코드 스타일을 지키지 않으면 실패
  2. 코드 자동 포맷팅
    1. 스타일 문제 자동 수정
      1. ./gradlew ktlintFormat
      2. 전체 프로젝트의 소스 코드 중 스타일에 맞지 않는 코드를 일괄적으로 바꿔줌
  •  

 

Detekt란?

  • ktlint가 코드 포맷팅에 초점을 뒀다면, detekt는 코드 복잡성이나 code smell 탐색과 같은 코드 분석에 초점을 둔 도구
  • ktlint는 공식 가이드에 기반한 간단한 검사에 중점
  • detekt는 더 많은 옵션을 이용해 구성 가능, code quality 자체를 높이는 가이드를 기본으로 가짐

 

Detekt 적용하기

  1. build.gradle.kts 파일에 플러그인 추가
    1. plugins {
          id("io.gitlab.arturbosch.detekt") version "1.23.1"
      }
  2. detekt 옵션 설정하기
    1. build.gradle.kts 파일에 detekt 옵션을 설정한다.
    2. detekt {
          config.setFrom("${projectDir}/detekt-config.yml")
          buildUponDefaultConfig = true
          debug = true
      }
  3. detekt 룰 설정하기
    1. {filename}.yml 파일을 작성해 여기에 룰을 설정한다.
    2. complexity:
          active: true                    => 코드 복잡도 분석 룰을 켤지를 결정
          TooManyFunctions:               => 함수 개수에 대한 코드 복잡도 분석 룰을 설정
              active: true                => 해당 룰을 사용할지 여부
              thresholdInClasses: 20      => 클래스에 몇 개까지의 함수를 허용할지 결정
    3. Detekt의 기본 룰 설정 대신 사용하도록 설정
      buildUponDefaultConfig = true => false로 변경
    4. ./gradlew detekt 실행

 


 

Android Lint란?

  • android 프로젝트에 특화된 Lint 도구
  • android 앱의 품질 문제를 감지
  • 메모리 누수, 성능 문제, 접근성, deprecated API 사용 등 감지

Android Lint 적용하기

  • android studio 기본 제공 기능
  • Analyze > Inspect Code로 접근하거나, 코드 변경 시 자동으로 실행됨
  • Gradle 명령으로 수행 가능
  • 결과는 html 파일 또는 IDE의 Problems 탭에서 확인 가능
728x90
반응형

'CS > Android' 카테고리의 다른 글

공통 객체 이용하기 - CompositionLocal  (0) 2024.12.17
Navigation  (0) 2024.12.16
Composable & Preview  (0) 2024.12.13
DATA BINDING  (0) 2024.12.13
MVC 패턴 vs MVP 패턴 vs MVVM 패턴  (0) 2024.12.13