[kotlin] 코틀린 패키지 구조 및 관리 방법

코틀린은 자바와 마찬가지로 소스 코드를 패키지에 구조화하여 관리합니다. 각각의 패키지는 소스 파일들을 논리적으로 그룹화하고, 코드의 재사용성과 유지보수성을 높여줍니다.

패키지 구조

코틀린의 패키지 구조는 디렉토리 구조와 일치합니다. 예를 들어, com.example.myapp 패키지의 경우 다음과 같은 디렉토리 구조를 갖습니다:

com/
  └─ example/
      └─ myapp/
          └─ Main.kt

위의 예제에서 Main.kt 파일은 com.example.myapp 패키지의 일부분입니다. 이렇게 소스 파일을 패키지 내의 디렉토리에 위치시킴으로써, 코드의 구조와 패키지 간의 관계를 명확히 할 수 있습니다.

패키지 선언

코틀린 소스 파일의 맨 위에는 package 선언이 위치합니다. 이 선언은 해당 소스 파일이 속한 패키지를 지정합니다. 예를 들어, Main.kt 파일이 com.example.myapp 패키지에 속한다면, 다음과 같이 선언합니다:

package com.example.myapp

fun main() {
    // ...
}

내부 패키지

패키지 내에 더 작은 단위의 패키지를 만들어 구조를 더욱 세분화시킬 수 있습니다. 내부 패키지는 하위 디렉토리를 생성하여 구성할 수 있습니다. 예를 들어, com.example.myapp.ui 패키지를 생성하려면 다음과 같이 작성합니다:

package com.example.myapp.ui

class MainActivity {
    // ...
}

위의 코드에서 MainActivity 클래스는 com.example.myapp.ui 패키지에 속하게 됩니다.

패키지 임포트

다른 패키지에 속한 클래스나 함수를 사용하기 위해서는 해당 패키지를 임포트 해야 합니다. 이를 통해 코드를 간결하고 가독성있게 유지할 수 있습니다.

package com.example.myapp

import com.example.myapp.ui.MainActivity

fun main() {
    val activity = MainActivity()
    // ...
}

위의 예제에서 MainActivity 클래스를 사용하기 위해 com.example.myapp.ui 패키지를 임포트하였습니다.

패키지 이름 충돌 해결

때로는 서로 다른 패키지에 같은 이름의 클래스가 존재할 수 있습니다. 이런 경우, 패키지의 전체 경로를 사용하여 이름 충돌을 피할 수 있습니다. 예를 들어, com.example.myapp.utils 패키지와 com.example.myapp.helpers 패키지에 Utils 클래스가 존재하는 경우 다음과 같이 구분하여 사용할 수 있습니다.

package com.example.myapp

import com.example.myapp.utils.Utils as AppUtils
import com.example.myapp.helpers.Utils as AppHelpers

fun main() {
    val utils1 = AppUtils()
    val utils2 = AppHelpers()
    // ...
}

위의 예제에서 AppUtilscom.example.myapp.utils.Utils, AppHelperscom.example.myapp.helpers.Utils 클래스를 가리킵니다.


참고 자료: Kotlin Documentation