Skip to main content

Package & Import

Package digunakan untuk mengelompokkan class, function, variable, dan file Kotlin agar kode program menjadi lebih terorganisir.

Sedangkan Import digunakan untuk menggunakan class, function, atau object yang berada di package lain.

Dengan package dan import, project yang besar dapat dibagi menjadi beberapa bagian sehingga lebih mudah dikelola.

Package

Package adalah namespace yang digunakan untuk mengelompokkan kode.

Contoh:

package com.example

fun sayHello() {
println("Hello World")
}

Pada contoh tersebut:

package com.example

menunjukkan bahwa file Kotlin tersebut berada di package:

com.example

Membuat Package

Misalnya kita memiliki struktur project:

src
└── main
└── kotlin
└── com
└── example
├── Main.kt
└── Greeting.kt

File Greeting.kt dapat berisi:

package com.example

fun sayHello() {
println("Hello World")
}

Sedangkan Main.kt:

package com.example

fun main() {
sayHello()
}

Karena kedua file berada pada package yang sama:

com.example

function sayHello() dapat digunakan tanpa import.

Package yang Berbeda

Misalnya kita memiliki dua package:

com.example
com.example.util

File:

Greeting.kt

berada di:

com.example.util

Isinya:

package com.example.util

fun sayHello() {
println("Hello World")
}

Kemudian kita memiliki file:

Main.kt

yang berada di package:

com.example
package com.example

fun main() {
sayHello()
}

Kode tersebut tidak dapat langsung menggunakan sayHello() karena function tersebut berada di package berbeda.

Kita membutuhkan import.

Import

import digunakan untuk menggunakan kode yang berada di package lain.

Contoh:

package com.example

import com.example.util.sayHello

fun main() {
sayHello()
}

Bagian:

import com.example.util.sayHello

memberitahu Kotlin bahwa kita ingin menggunakan function sayHello() dari package:

com.example.util

Struktur Package dan Import

Secara sederhana:

com.example

└── Main.kt

│ import

com.example.util

└── Greeting.kt

└── sayHello()

Main.kt menggunakan sayHello() yang berada di package com.example.util.

Contoh Program Lengkap

File Greeting.kt:

package com.example.util

fun sayHello() {
println("Hello World")
}

File Main.kt:

package com.example

import com.example.util.sayHello

fun main() {
sayHello()
}

Output:

Hello World

Import Class

import tidak hanya digunakan untuk function.

Kita juga dapat meng-import class dari package lain.

Contoh:

package com.example.model

class User(
val name: String
)

Kemudian digunakan dari package lain:

package com.example

import com.example.model.User

fun main() {
val user = User("Ucup")

println(user.name)
}

Output:

Ucup

Import Beberapa Function

Kita dapat meng-import beberapa function dari package yang sama.

Misalnya:

package com.example.util

fun sayHello() {
println("Hello")
}

fun sayGoodbye() {
println("Goodbye")
}

Kemudian:

package com.example

import com.example.util.sayHello
import com.example.util.sayGoodbye

fun main() {
sayHello()
sayGoodbye()
}

Output:

Hello
Goodbye

Import Menggunakan Wildcard

Kita juga dapat meng-import seluruh deklarasi dari sebuah package menggunakan *.

Contoh:

import com.example.util.*

Dengan import tersebut, kita dapat menggunakan function yang berada di package com.example.util.

Contoh:

package com.example

import com.example.util.*

fun main() {
sayHello()
sayGoodbye()
}

Namun, penggunaan wildcard sebaiknya dilakukan dengan pertimbangan yang baik agar dependency yang digunakan tetap jelas.

Import dengan Alias

Kotlin juga memungkinkan kita memberikan alias pada import menggunakan keyword as.

Contoh:

import com.example.util.sayHello as hello

Sekarang function tersebut dapat dipanggil menggunakan nama:

hello()

Contoh:

package com.example

import com.example.util.sayHello as hello

fun main() {
hello()
}

Output:

Hello World

Mengapa Menggunakan Alias?

Alias berguna ketika terdapat dua deklarasi dengan nama yang sama.

Misalnya terdapat dua function:

com.example.util.sayHello
com.example.admin.sayHello

Kita dapat menggunakan alias:

import com.example.util.sayHello as userHello
import com.example.admin.sayHello as adminHello

Kemudian:

userHello()
adminHello()

Dengan cara tersebut, kita dapat membedakan dua function yang memiliki nama sama.

Package Naming Convention

Pada project Kotlin, package biasanya menggunakan nama yang terdiri dari beberapa bagian.

Contoh:

com.example
com.example.model
com.example.service
com.example.repository

Untuk project yang menggunakan domain tertentu, package dapat menggunakan nama domain organisasi.

Contoh:

com.timposulabs.app

Kemudian dapat dibagi menjadi:

com.timposulabs.app.model
com.timposulabs.app.service
com.timposulabs.app.repository

Struktur package membantu mengorganisasi kode berdasarkan tanggung jawabnya.

Package Tidak Harus Sama dengan Nama Folder

Secara konsep, package merupakan namespace Kotlin, sedangkan struktur folder adalah organisasi file pada project.

Dalam project Kotlin modern, biasanya package dan struktur folder dibuat selaras agar project lebih mudah dipahami.

Contoh:

src/main/kotlin/
└── com/
└── example/
└── service/
└── UserService.kt

Isi file:

package com.example.service

class UserService {
}

Struktur tersebut membuat hubungan antara package dan lokasi file menjadi jelas.

Package pada File Kotlin

Deklarasi package biasanya diletakkan di bagian paling atas file.

Contoh:

package com.example.service

class UserService {
}

Sedangkan import diletakkan setelah deklarasi package.

Contoh:

package com.example

import com.example.service.UserService

fun main() {
val service = UserService()
}

Urutan umumnya:

package

import

kode Kotlin

Contoh Struktur Project

Project sederhana dapat memiliki struktur:

src/main/kotlin/
└── com/example/
├── Main.kt
├── model/
│ └── User.kt
├── service/
│ └── UserService.kt
└── util/
└── Helper.kt

User.kt

package com.example.model

class User(
val name: String
)

UserService.kt

package com.example.service

import com.example.model.User

class UserService {

fun createUser(name: String): User {
return User(name)
}
}

Helper.kt

package com.example.util

fun printMessage(message: String) {
println(message)
}

Main.kt

package com.example

import com.example.service.UserService
import com.example.util.printMessage

fun main() {

val service = UserService()

val user = service.createUser("Ucup")

printMessage("Nama: ${user.name}")
}

Output:

Nama: Ucup

Pada contoh tersebut terdapat beberapa package:

com.example
com.example.model
com.example.service
com.example.util

Main.kt menggunakan class dan function dari package lain melalui import.

Package dan Import pada Standard Library

Kotlin juga memiliki banyak package yang dapat kita import.

Contoh:

import java.util.Locale

Kemudian:

val locale = Locale.getDefault()

println(locale)

Kotlin dan Java menyediakan banyak class dan function yang dapat digunakan melalui import.

Import Function

Kita dapat meng-import function secara langsung.

Contoh:

import kotlin.math.max

fun main() {
println(max(10, 20))
}

Output:

20

Pada contoh tersebut:

import kotlin.math.max

digunakan untuk meng-import function max().

Import Object atau Member

Kotlin juga memungkinkan import terhadap member tertentu.

Contoh:

import kotlin.math.PI

fun main() {
println(PI)
}

Kita dapat langsung menggunakan:

PI

tanpa harus menuliskan package lengkapnya.

Kesimpulan

Package digunakan untuk mengelompokkan kode berdasarkan namespace tertentu.

Contoh:

package com.example.service

Sedangkan import digunakan untuk menggunakan deklarasi yang berada pada package lain.

Contoh:

import com.example.service.UserService

Struktur sederhananya:

Package

Mengelompokkan kode

Import

Menggunakan kode dari package lain

Contoh lengkap:

package com.example

import com.example.util.sayHello

fun main() {
sayHello()
}

Kotlin juga mendukung import dengan alias:

import com.example.util.sayHello as hello

Kemudian:

hello()

Jadi, konsep utama yang perlu diingat:

tip

Package digunakan untuk mengorganisasi dan mengelompokkan kode, sedangkan import digunakan untuk menggunakan class, function, object, atau deklarasi lain yang berada di package berbeda.