Java OOP | Encapsulation

Java OOP | Encapsulation

Encapsulation In Java

Encapsulation merupakan salah satu pilar penting didalam pemograman berorientasi object. Dengan encapsulation kita dapat menyembunyikan data sensitif sebuah object di java, supaya tidak bisa diakses secara langsung dari kelas luar. Tujuannya agar kita bisa menjaga data sebuah object tetap valid.

Untuk mencapai encapsulation di java kita bisa membuat sebuah data object menjadi private, untuk mengakses dan merubah data kita bisa menggunakan method getter setter.

  • mendeklarasikan field/attribute sebuah kelas dengan access modifier private
  • mengunakan method getter dan setter untuk mengakses dan merubah data

Getter Dan Setter

Getter adalah method yang dibuat untuk mengakses data object. Setter adalah method dibuat untuk merubah data object.

Untuk membuat getter setter tidak ada aturan baku, biasanya orang-orang mengikuti best practise:

Data Type Getter Method Setter Method
Primitive getXX() setXX()
Object getXX() setXX()
boolean isXX() setXX()

Example Encapsulation In Java

diagram class encapsulation

File: Employe.java

public class Employe { private String idCard; private boolean bonus; public String getIdCard() { /* method getter */ return idCard; } public void setIdcard(String id) { /* method setter */ if(id != null) idCard = id; } public boolean isBonus() { /* method getter */ return bonus; } public void setBonus(boolean bonus) { /* method setter */ this.bonus = bonus; } }

File: EmployeMainApp.java

public class EmployeMainApp { public static void main(String[] args) { Employe employe = new Employe(); /*membuat instance dari kelas encapsulation*/ employe.setIdcard("CS0125"); /*menetapkan sebuah data idcard*/ employe.setBonus(true); /*menetapkan sebuah data bonus*/ System.out.println("Employe ID CARD: "+employe.getIdCard()); /*mendapatkan data idcard*/ System.out.println("Employe Bonus Salary: "+employe.isBonus()); /*mendapatkan data bonus*/ /*OUTPUT: Employe ID CARD: CS0125 Employe Bonus Salary: true */ } }

Kita bisa membuat data attribute kelas hanya dapat Read-Only. Jika hanya ingin menggunakan get method.

public class University { /* data attribute private */ private String UNIVERSITY_NAME = "Indo Global Mandiri"; /* method getter untuk mendapatkan data UNIVERSITY_NAME */ public String getUniversityName() { return UNIVERSITY_NAME; } }

Kita tidak bisa menetapkan nilai baru pada data attribute UNIVERSITY_NAME, karena kelas University hanya memiliki method getter.

University university = new University(); //error waktu kompilasi, karena data object kelas university bersifat private university.UNIVERSITY_NAME = "New Data"; //error waktu kompilasi university.setUniversityName("New Data");

Kita juga bisa membuat data attribute kelas hanya dapat Write-Only. Jika hanya ingin menggunakan set method.

public class University { /* data attribute private */ private String UNIVERSITY_NAME; /* method setter untuk menetapkan data nama universitas */ public void setUniversityName(String name) { UNIVERSITY_NAME = name; } } //error waktu kompilasi, karena kelas university tidak memiliki get method System.out.println(university.getUniversityName()); //error waktu kompilasi, karena data UNIVERSITY_NAME bersifat private System.out.println(university.UNIVERSITY_NAME);

Keuntungan yang bisa kita dapatkan dengan encapsulation memudahkan programmer ketika akan merubah salah satu bagian dari kode tanpa mempengaruhi kode lainnya. Dengan begitu peningkatan keamanan data sebuah object tetap terjaga.