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:
Package digunakan untuk mengorganisasi dan mengelompokkan kode, sedangkan import digunakan untuk menggunakan class, function, object, atau deklarasi lain yang berada di package berbeda.