Masukkan Password
62 6.11 What is Static Keyword in OOP | Static Keyword in Dart Programming | Learn OOP | Dart Course
Kali ini kita masuk ke static keyword dalam Dart. Konsep ini cukup berbeda dari inheritance, super, dan polymorphism yang baru saja kita pelajari.
Kalau dibuat sangat sederhana:
staticmembuat property atau method menjadi milikclass, bukan milik masing-masing object.
Jadi kita bisa mengaksesnya langsung menggunakan nama class, tanpa membuat object terlebih dahulu.
1. Apa Itu static?
Misalnya kita punya class:
class Person {
String name = "Budi";
}
Kalau ingin mengakses name, kita harus membuat object:
void main() {
Person person = Person();
print(person.name);
}
Kenapa?
Karena name adalah instance variable.
Artinya, name dimiliki oleh setiap object Person.
Person class
β
βββ Object 1 β name
βββ Object 2 β name
βββ Object 3 β name
2. Bagaimana Kalau Menggunakan static?
Sekarang kita ubah:
class Person {
static String name = "Budi";
}
Sekarang name menjadi static variable.
Kita tidak perlu membuat object.
Langsung:
void main() {
print(Person.name);
}
Output:
Budi
Perhatikan perbedaannya:
Tanpa static
Person person = Person();
print(person.name);
Dengan static
print(Person.name);
Jadi:
Instance member
β
object.property
Static member
β
Class.property
3. Analogi Sederhana
Bayangkan sebuah sekolah.
Ada banyak siswa:
Sekolah
β
βββ Budi
βββ Andi
βββ Citra
βββ Dika
Setiap siswa punya:
- nama
- umur
- nomor siswa
Ini adalah data per object.
Tetapi sekolah mungkin punya:
- nama sekolah
- alamat sekolah
- jumlah siswa
Data tersebut bisa dianggap sebagai informasi milik sekolah, bukan milik masing-masing siswa.
Dalam pemrograman:
Object-specific data
β instance variable
Data yang dimiliki bersama oleh class
β static variable
4. Instance Variable vs Static Variable
Ini perbedaan yang sangat penting.
Instance variable
class Person {
String name = "Budi";
}
Setiap object mempunyai name masing-masing.
Person person1 = Person();
Person person2 = Person();
Secara konsep:
person1
βββ name
person2
βββ name
Static variable
class Person {
static String name = "Budi";
}
Tidak ada name terpisah untuk setiap object.
Secara konsep:
Person
β
name
β
"Budi"
Property tersebut berada pada level class.
5. Cara Mengakses Static Variable
Misalnya:
class Person {
static String name = "Budi";
}
Kita akses:
void main() {
print(Person.name);
}
Perhatikan:
Person.name
Formatnya:
NamaClass.namaStaticMember
Contoh lain:
class Config {
static String appName = "My App";
}
Akses:
print(Config.appName);
6. Tidak Perlu Membuat Object
Inilah salah satu keuntungan utama static.
Tanpa static:
class Person {
String name = "Budi";
}
void main() {
Person person = Person();
print(person.name);
}
Kita perlu:
Person person = Person();
Dengan static:
class Person {
static String name = "Budi";
}
void main() {
print(Person.name);
}
Tidak perlu:
Person person = Person();
Karena property tersebut sudah tersedia pada level class.
7. Static Method
Tidak hanya variable yang bisa dibuat static.
Method juga bisa:
class Person {
static void display() {
print("Hello Person");
}
}
Kemudian:
void main() {
Person.display();
}
Output:
Hello Person
Tidak perlu:
Person person = Person();
8. Instance Method vs Static Method
Instance method
class Person {
void display() {
print("Hello");
}
}
Harus menggunakan object:
Person person = Person();
person.display();
Static method
class Person {
static void display() {
print("Hello");
}
}
Langsung menggunakan class:
Person.display();
Perbandingannya:
| Jenis | Cara akses |
|---|---|
| Instance variable | object.name |
| Instance method | object.display() |
| Static variable | Class.name |
| Static method | Class.display() |
9. Kenapa Static Tidak Bisa Dipanggil Lewat Object?
Misalnya:
class Person {
static String name = "Budi";
static void display() {
print(name);
}
}
Yang benar:
Person.name;
Person.display();
Bukan:
Person person = Person();
person.name; // β
person.display(); // β
Kenapa?
Karena name dan display() adalah static.
Mereka berada di level class:
Person
βββ static name
βββ static display()
Bukan di masing-masing object:
Person object
βββ name β
βββ display() β
10. Kenapa Dart Melarang Itu?
Karena static member memang dirancang untuk diakses sebagai milik class.
Misalnya:
class MathUtil {
static int add(int a, int b) {
return a + b;
}
}
Kita tidak membutuhkan object MathUtil untuk melakukan penjumlahan.
Tidak masuk akal kalau harus:
MathUtil math = MathUtil();
math.add(10, 20);
Lebih masuk akal:
MathUtil.add(10, 20);
Karena add() tidak membutuhkan state dari object tertentu.
11. Static Variable Dibagi Bersama?
Nah, ini bagian yang cukup penting.
Misalnya:
class Counter {
static int count = 0;
}
Kita bisa mengubah:
Counter.count = 10;
Kemudian object apa pun tidak memiliki count masing-masing karena count adalah milik class.
Secara konsep:
Counter
β
count
β
10
Bukan:
Counter object 1 β count
Counter object 2 β count
Counter object 3 β count
12. Contoh Counter
Contoh yang sangat bagus untuk memahami static:
class Counter {
static int count = 0;
static void increment() {
count++;
}
}
Kemudian:
void main() {
Counter.increment();
Counter.increment();
Counter.increment();
print(Counter.count);
}
Output:
3
Tidak ada object yang dibuat.
Karena:
count
dan:
increment()
keduanya static.
13. Contoh yang Lebih Realistis
Misalnya kita punya class Bank.
class Bank {
static String bankName = "Bank Indonesia";
}
Kemudian:
void main() {
print(Bank.bankName);
}
Tidak perlu membuat:
Bank bank = Bank();
Karena nama bank merupakan informasi yang kita perlakukan sebagai milik class.
14. Static Cocok untuk Utility
Salah satu penggunaan umum static adalah membuat utility methods.
Misalnya:
class Calculator {
static int add(int a, int b) {
return a + b;
}
static int multiply(int a, int b) {
return a * b;
}
}
Kemudian:
void main() {
print(Calculator.add(10, 20));
print(Calculator.multiply(5, 4));
}
Output:
30
20
Kita tidak perlu:
Calculator calculator = Calculator();
Karena calculator tersebut tidak membutuhkan data khusus dari object.
15. Static Method dan Instance Variable
Ada aturan penting.
Misalnya:
class Person {
String name = "Budi";
static void display() {
print(name);
}
}
Ini bermasalah.
Kenapa?
Karena:
name
adalah instance variable.
Sedangkan:
display()
adalah static method.
Static method tidak memiliki object tertentu sebagai this.
Jadi Dart tidak tahu:
“Saya harus mengambil
namemilik object Person yang mana?”
Misalnya ada:
person1 β name = Budi
person2 β name = Andi
person3 β name = Citra
Kalau kita memanggil:
Person.display();
display() harus mengambil name yang mana?
Tidak jelas.
16. Static Method Bisa Mengakses Static Variable
Ini boleh:
class Person {
static String name = "Budi";
static void display() {
print(name);
}
}
Kemudian:
Person.display();
Output:
Budi
Karena keduanya sama-sama berada pada level class:
Person
βββ static name
βββ static display()
Jadi display() tahu harus mengambil Person.name.
17. Analogi Sederhana
Bayangkan:
Rumah
Setiap orang di rumah punya:
nama
umur
Itu data individual.
Tetapi rumah punya:
alamat
Alamat tersebut adalah informasi tentang rumah secara keseluruhan.
Dalam analogi:
Person
βββ name β instance
βββ age β instance
School
βββ schoolName β static
βββ address β static
Jadi static cocok untuk sesuatu yang memang secara konsep tidak berbeda untuk setiap object.
18. Contoh Instance vs Static
Mari kita buat contoh lengkap:
class Student {
String name;
static String school = "SMA Negeri 1";
Student(this.name);
}
Kemudian:
void main() {
Student student1 = Student("Budi");
Student student2 = Student("Andi");
print(student1.name);
print(student2.name);
print(Student.school);
}
Output:
Budi
Andi
SMA Negeri 1
Perhatikan:
student1.name β Budi
student2.name β Andi
Berbeda.
Sedangkan:
Student.school β SMA Negeri 1
bersama pada level class.
19. Kalau Static Diubah?
Misalnya:
class Student {
String name;
static String school = "SMA 1";
Student(this.name);
}
Kemudian:
void main() {
Student student1 = Student("Budi");
Student student2 = Student("Andi");
Student.school = "SMA 2";
print(Student.school);
}
Hasil:
SMA 2
Karena school adalah static.
Secara konsep:
Student
β
school
β
"SMA 2"
/ \
student1 student2
Mereka mengacu pada class-level state yang sama.
20. Jangan Salah Mengartikan “Static”
Ada satu hal penting.
static bukan berarti nilainya otomatis tidak bisa berubah.
Contoh:
class Counter {
static int count = 0;
}
Kita masih bisa:
Counter.count = 100;
Jadi:
static β constant
Kalau ingin nilai konstan, ada konsep:
static const
Misalnya:
class AppConfig {
static const String appName = "My App";
}
Kemudian:
print(AppConfig.appName);
21. static vs final vs const
Ini sering membingungkan.
static
Menentukan kepemilikan member:
Member ini milik class.
static String name = "Budi";
final
Menentukan bahwa variable/property hanya boleh di-assign sekali.
final String name = "Budi";
const
Menentukan nilai konstan yang diketahui pada compile time.
const String name = "Budi";
Mereka memiliki tujuan berbeda.
Bahkan bisa digabung:
static const String appName = "My App";
Artinya:
static β milik class
const β nilainya konstan
22. static Tidak Harus Berarti “Global”
Ini juga penting.
Misalnya:
class Calculator {
static int add(int a, int b) {
return a + b;
}
}
add() bukan global function.
Dia tetap berada di dalam:
Calculator
Hanya saja member tersebut milik class dan diakses melalui:
Calculator.add(...)
23. Kapan Sebaiknya Menggunakan static?
Gunakan static ketika data atau fungsi memang tidak bergantung pada object tertentu.
Contohnya:
Utility
class MathUtils {
static int square(int x) {
return x * x;
}
}
Konfigurasi
class AppConfig {
static const String appName = "My App";
}
Counter bersama
class User {
static int totalUsers = 0;
}
Konstanta class
class Colors {
static const String primary = "blue";
}
24. Kapan Jangan Menggunakan static?
Kalau datanya berbeda untuk setiap object, jangan gunakan static.
Misalnya:
class Person {
String name;
int age;
Person(this.name, this.age);
}
Karena:
Budi β umur 20
Andi β umur 25
Citra β umur 30
Data mereka berbeda.
Maka name dan age harus menjadi instance fields.
Bukan:
static String name;
static int age;
Kalau dibuat static, semua object akan berbagi data yang sama.
25. Hubungan dengan Materi Sebelumnya
Kamu sekarang sudah belajar banyak konsep OOP.
Kita bisa membandingkannya:
CLASS
β
βββ instance member
β β
β milik object
β
βββ static member
β
milik class
Jadi:
Instance
Person person = Person();
person.name;
person.display();
Static
Person.name;
Person.display();
26. this vs static
Ada hubungan menarik dengan this.
Instance method memiliki object saat ini:
class Person {
String name = "Budi";
void display() {
print(this.name);
}
}
this mengacu pada object yang sedang digunakan.
Tetapi static method tidak terkait dengan object tertentu:
class Person {
static String name = "Budi";
static void display() {
print(name);
}
}
Karena tidak ada object tertentu, jangan mengandalkan this di static context.
Secara sederhana:
Instance
β
ada object
β
bisa menggunakan this
Static
β
milik class
β
tidak bergantung pada object
27. Contoh Gabungan
class Student {
String name;
int age;
static String school = "SMA Negeri 1";
static int totalStudents = 0;
Student(this.name, this.age) {
totalStudents++;
}
void display() {
print("Name: $name");
print("Age: $age");
print("School: $school");
}
}
Kemudian:
void main() {
Student student1 = Student("Budi", 20);
Student student2 = Student("Andi", 21);
student1.display();
student2.display();
print("Total students: ${Student.totalStudents}");
}
Output:
Name: Budi
Age: 20
School: SMA Negeri 1
Name: Andi
Age: 21
School: SMA Negeri 1
Total students: 2
Perhatikan pembagian tanggung jawab:
Student
β
βββ name β instance
βββ age β instance
β
βββ school β static
βββ totalStudents β static
name dan age berbeda untuk setiap student.
Sedangkan school dan totalStudents merupakan data yang kita perlakukan sebagai milik bersama class.
28. Satu Hal yang Perlu Dikoreksi dari Caption
Caption mengatakan bahwa static variable:
“shared among all instances”
Ini benar sebagai gambaran sederhana, tetapi cara berpikir yang lebih tepat adalah:
Static member berada pada level class, bukan pada masing-masing instance.
Jadi jangan membayangkan setiap object mempunyai salinan static variable.
Lebih baik bayangkan:
CLASS
β
βββββββββ΄βββββββββ
β β
static data static method
β
βββββββββββββββββ
β
digunakan oleh
β
berbagai object
Object bisa menggunakan data tersebut melalui class, tetapi data static itu sendiri bukan field terpisah milik setiap object.
29. Perbedaan Paling Penting
| Instance | Static | |
|---|---|---|
| Milik | Object | Class |
| Perlu object? | Ya | Tidak |
| Akses | object.name | Class.name |
| Bisa berbeda tiap object? | Ya | Tidak sebagai state terpisah |
| Method | object.method() | Class.method() |
| Bergantung pada object? | Bisa | Tidak |
π§ Cara Mengingat static
Gunakan kalimat ini:
Instance = milik masing-masing object. Static = milik class.
Contoh:
Person
β
βββ name
β β
β setiap object punya sendiri
β
βββ static species
β
milik class
Kode:
class Person {
String name = "Budi";
static String species = "Human";
}
Akses:
Person person = Person();
print(person.name); // instance
print(Person.species); // static
β Kesimpulan
static digunakan ketika kita ingin membuat property atau method pada level class, bukan level object.
Static variable:
class Person {
static String name = "Budi";
}
Akses:
Person.name;
Static method:
class Person {
static void display() {
print("Hello");
}
}
Akses:
Person.display();
Tidak perlu:
Person person = Person();
Dan jangan lupa perbedaan utamanya:
CLASS
β
βββββββββ΄βββββββββ
β β
STATIC INSTANCE
β β
β β
Person.name person.name
Person.display() person.display()
Static β akses melalui class. Instance β akses melalui object.
Dan ini juga menjelaskan kenapa kode seperti:
Person person = Person();
person.display();
tidak boleh dilakukan jika display() adalah static. Dart akan meminta kamu menggunakan:
Person.display();
karena display() memang milik Person sebagai class, bukan milik object person.
buatkan script konten youtube durasi 5 menit dengan tema diatas, gunakan gaya penyampaian yang naratif, detail, dan mudah dipahami oleh pemula, gaya video explainer seperti chanel coding2go