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)
build.gradle.kts 파일에 다음과 같이 플러그인 추가하기-
plugins {id("org.jlleitschuh.gradle.ktlint") version "<버전>"}
- 방법 2)
안드로이드 스튜디오에서 플러그인 설치하기- 파일 > 설정 > 플러그인 > ktlint 검색 후 설치 → IDE에서 사용 가능
- 방법 3)
Git pre-commit hook에 추가하기- commit 전에 스타일 검사를 자동으로 수행 가능
- ktlintCheck를 pre-commit hook으로 등록
./gradlew addKtlintCheckGitPreCommitHook - ktlintFormat을 pre-commit hook으로 등록
./gradlew addKtlintFormatGitPreCommitHook
- ktlintCheck를 pre-commit hook으로 등록
- commit 전에 스타일 검사를 자동으로 수행 가능
- 방법 1)
- ktlint 플러그인 설정
- build.gradle.kts 파일에 ktlint 원하는 설정을 추가
- ex)
ktlint {android.set(true) // => Android 프로젝트에 최적화된 스타일 적용outputToConsole.set(true) // => 콘솔에 린트 결과 출력coloredOutput.set(true) // => 출력 메시지에 색상 적용ignoreFailures.set(false) // => 린트 오류 시 빌드 실패 설정reporters {reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN) // 기본 텍스트 리포트
...}}
- ex)
- build.gradle.kts 파일에 ktlint 원하는 설정을 추가
ktlint 실행하기
- 코드 스타일 검사
- 프로젝트 전체에 대한 스타일 검사
-
./gradlew ktlintCheck
- "gradlew build" 실행 시 연결되는 전체 프로젝트 빌드 사이클에 포함되어, 코드 스타일을 지키지 않으면 실패
-
- 프로젝트 전체에 대한 스타일 검사
- 코드 자동 포맷팅
- 스타일 문제 자동 수정
-
./gradlew ktlintFormat
- 전체 프로젝트의 소스 코드 중 스타일에 맞지 않는 코드를 일괄적으로 바꿔줌
-
- 스타일 문제 자동 수정
Detekt란?
- ktlint가 코드 포맷팅에 초점을 뒀다면, detekt는 코드 복잡성이나 code smell 탐색과 같은 코드 분석에 초점을 둔 도구
- ktlint는 공식 가이드에 기반한 간단한 검사에 중점
- detekt는 더 많은 옵션을 이용해 구성 가능, code quality 자체를 높이는 가이드를 기본으로 가짐
Detekt 적용하기
- build.gradle.kts 파일에 플러그인 추가
-
plugins {id("io.gitlab.arturbosch.detekt") version "1.23.1"}
-
- detekt 옵션 설정하기
- build.gradle.kts 파일에 detekt 옵션을 설정한다.
-
detekt {config.setFrom("${projectDir}/detekt-config.yml")buildUponDefaultConfig = truedebug = true}
- detekt 룰 설정하기
- {filename}.yml 파일을 작성해 여기에 룰을 설정한다.
-
complexity:active: true => 코드 복잡도 분석 룰을 켤지를 결정TooManyFunctions: => 함수 개수에 대한 코드 복잡도 분석 룰을 설정active: true => 해당 룰을 사용할지 여부thresholdInClasses: 20 => 클래스에 몇 개까지의 함수를 허용할지 결정
- Detekt의 기본 룰 설정 대신 사용하도록 설정
buildUponDefaultConfig = true => false로 변경 - ./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 |