본문 바로가기
카테고리 없음

[IntelliJ] Kotlin 와일드카드('*') import 사용하지 않게 설정하기(feat. ktlint)

by 재아군 2024. 12. 13.

 

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. 기본 설정 변경

  1. Settings/Preferences (Windows/Mac: Ctrl+Alt+S / ⌘,) 열기
  2. Editor > Code Style > Kotlin 선택
  3. Imports 탭으로 이동
  4. "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

 

저장 시 자동 최적화

  1. Settings > Tools > Actions on Save 열기
  2. "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의 적절한 설정과 함께 이러한 실천을 자동화하면, 더 나은 코드 품질을 쉽게 유지할 수 있다.

 

 

댓글