Kotlin 개발을 하다 보면 ktlint에서 와일드카드 import (예: import com.example.*
)를 사용하지 말라는 경고를 자주 접하게 된다. 이러한 제한이 왜 있는지, 그리고 IntelliJ IDEA에서 어떻게 설정하는지 살펴본다.
와일드카드 Import를 피해야 하는 이유
1. 코드 가독성 저하
- 와일드카드 import를 사용하면 코드에서 사용되는 클래스의 출처를 즉시 파악하기 어렵습니다.
- 다른 개발자가 코드를 읽을 때 각 클래스나 함수가 어느 패키지에서 왔는지 확인하기 위해 추가 시간이 필요합니다.
2. 이름 충돌 위험
// 이런 상황을 가정해보세요
import org.example.data.*
import org.example.model.*
// 두 패키지에 모두 User 클래스가 있다면?
val user = User() // 어느 패키지의 User를 의미하는걸까요?
3. 컴파일 시간 영향
- 와일드카드 import는 컴파일러가 더 많은 클래스를 로드하고 검사해야 함을 의미합니다.
- 프로젝트가 커질수록 이러한 영향은 더욱 커질 수 있습니다.
4. 의도하지 않은 동작
// 현재는 StringUtils만 사용하고 있지만
import org.apache.commons.lang3.*
class MyClass {
fun processText(text: String) {
StringUtils.capitalize(text)
}
}
// 나중에 다른 유틸리티 클래스가 패키지에 추가되면?
// 의도하지 않게 새로운 클래스들도 import될 수 있습니다
IntelliJ IDEA에서 와일드카드 Import 설정 변경하기
1. 기본 설정 변경
- Settings/Preferences (Windows/Mac: Ctrl+Alt+S / ⌘,) 열기
- Editor > Code Style > Kotlin 선택
- Imports 탭으로 이동
- "Use single name import" 섹션 설정:
Names count to use star import: 999 Names count to use static star import: 999
2. .editorconfig 설정
프로젝트 루트에 .editorconfig 파일을 생성하거나 수정:
[*.{kt,kts}]
ij_kotlin_name_count_to_use_star_import = 999
ij_kotlin_name_count_to_use_star_import_for_members = 999
3. ktlint 규칙 설정
build.gradle.kts에서 ktlint 설정:
ktlint {
disabledRules.set(setOf("no-wildcard-imports"))
}
명시적 Import 사용
좋은 예시
import com.example.model.User
import com.example.service.UserService
import com.example.utils.UserValidator
class UserController {
private val userService = UserService()
private val validator = UserValidator()
fun createUser(user: User) {
// 각 클래스의 출처가 명확합니다
}
}
나쁜 예시
import com.example.model.*
import com.example.service.*
import com.example.utils.*
class UserController {
private val userService = UserService()
private val validator = UserValidator()
fun createUser(user: User) {
// 각 클래스가 어디서 왔는지 불명확합니다
}
}
자동 Import 최적화하기
단축키 사용
- Windows/Linux: Ctrl + Alt + O
- Mac: ⌘ + ⌥ + O
저장 시 자동 최적화
- Settings > Tools > Actions on Save 열기
- "Optimize imports" 옵션 체크
프로젝트 전체에 적용하기
Git Hook 설정
// build.gradle.kts
ktlint {
installGitPreCommitHook.set(true)
}
CI/CD 파이프라인에 추가
# GitHub Actions example
name: Kotlin Linter
on: [push]
jobs:
ktlint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run ktlint
run: ./gradlew ktlintCheck
마치면서.
와일드카드 import를 피하는 것은 단순한 스타일 가이드가 아닌, 코드의 유지보수성과 안정성을 높이는 중요한 실천 방안이다.
IntelliJ IDEA의 적절한 설정과 함께 이러한 실천을 자동화하면, 더 나은 코드 품질을 쉽게 유지할 수 있다.
댓글