Nesne yönelimli Programlamanın temel konularından Kapsülleme(Encapsulation) yapısı…
Java'da Kapsülleme (Encapsulation) Nedir? | Getter Setter + 2025 Örnek Kodları
Kısaca: Kapsülleme, bir sınıfın değişkenlerini private yapıp dışarıya sadece public getter ve setter metodlarıyla erişim sağlamaktır. Böylece sınıfın iç yapısı korunur, dışarıdan istenmeyen müdahaleler engellenir.
Kapsülleme (Encapsulation) Nedir?
Nesne yönelimli programlamanın 4 temel prensibinden biridir (Encapsulation, Inheritance, Polymorphism, Abstraction).
Amaç: Sınıfın iç yapısını gizlemek ve sadece kontrollü erişime izin vermek.
Kötü Kullanım – Public Değişken (Sakın Yapmayın!)
public class Kitap {
public int sayfaSayisi; // Herkes erişebilir!
public String yazar;
}
public class Kutuphane {
public static void main(String[] args) {
Kitap b = new Kitap();
b.sayfaSayisi = -5; // Mantıksız ama derlenir ve çalışır!
System.out.println(b.sayfaSayisi); // -5
}
}
Bu kod yasal ama çok tehlikeli. Başka bir geliştirici istediği gibi değer atayabilir → sınıfın bütünlüğü bozulur.
Doğru Kullanım – Private + Getter/Setter
public class Kitap {
private int sayfaSayisi; // Dışarıdan erişilemez
private String yazar;
// Getter
public int getSayfaSayisi() {
return sayfaSayisi;
}
// Setter (burada doğrulama da ekleyebiliriz!)
public void setSayfaSayisi(int sayfaSayisi) {
if (sayfaSayisi < 0) {
throw new IllegalArgumentException("Sayfa sayısı negatif olamaz!");
}
this.sayfaSayisi = sayfaSayisi;
}
public String getYazar() {
return yazar;
}
public void setYazar(String yazar) {
this.yazar = yazar;
}
}
public class Kutuphane {
public static void main(String[] args) {
Kitap b = new Kitap();
b.setSayfaSayisi(150); // Kontrollü atama
// b.setSayfaSayisi(-5); // Exception fırlatır!
System.out.println(b.getSayfaSayisi()); // 150
}
}
Getter ve Setter Kullanmanın 5 Büyük Avantajı
- Doğrulama (Validation) – Negatif değer, boş string vs. engellenir
- İleride mantık ekleyebilme – Setter içinde log yazma, cache temizleme vs.
- Değişken adını değiştirmeden iç yapıyı refactor edebilme
- Read-only veya Write-only alanlar – Sadece getter ya da sadece setter tanımlayabilirsiniz
- Thread-safety – Gerekirse synchronized getter/setter yazabilirsiniz
Bonus: Lombok ile Daha Temiz Kod (2025’te Standart!)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Kitap {
private int sayfaSayisi;
private String yazar;
// Lombok otomatik olarak getter/setter üretir
// İstersen sadece @Getter koyarak read-only yapabilirsin
}
Lombok kullanmak encapsulation’ı bozmaz, tam tersine kod kalabalığını azaltır ve okunabilirliği artırır.
Sık Sorulan Sorular
Java’da kapsülleme (encapsulation) nedir?
Değişkenleri private yapıp, onlara sadece public getter ve setter metodları ile erişim sağlamaktır.
Neden doğrudan public değişken kullanmıyoruz?
Başka geliştiriciler mantıksız değer atayabilir, ileride kontrol ekleyemezsiniz ve sınıfın iç yapısı dışarıya açılmış olur.
Lombok @Getter @Setter kullanmak encapsulation bozar mı?
Hayır! Lombok sadece kod üretimini otomatikleştirir. Derleme zamanında aynı private alan + public metodlar oluşur.
Record’lar encapsulation sağlar mı?
Evet! Java 14+ record’lar otomatik immutable getter üretir ve setter yoktur → mükemmel encapsulation örneğidir.
Diğer Java OOP yazılarımız:
JVM, JDK, JRE Nedir? •
DTO Nedir? •
Kalıtım (Inheritance) Nedir? → Çok yakında!
Yayın tarihi: 9 Aralık 2025 • Son güncelleme: 9 Aralık 2025
Soruların varsa yorum kısmına yaz, hemen cevaplayalım!