Java’da Değişebilir ve Değişmez Nesneler
Java’da nesneleri, içeriklerini değiştirebilir veya değiştiremez olarak iki kategoriye ayırabiliriz. Bu iki kategori; değişebilir (mutable) ve değişmez (immutable) nesnelerdir. Değişebilir nesneler, oluşturulduktan sonra içerikleri değiştirilebilen nesnelerdir. Öte yandan, değişmez nesneler, oluşturulduktan sonra içerikleri değiştirilemeyen nesnelerdir. Bu makalede, değişebilir ve değişmez nesneler arasındaki farkları ele alacağız ve bu iki tür nesnenin avantajlarını ve dezavantajlarını inceleyeceğiz.
Değişebilir Nesneler
Değişebilir nesneler, oluşturulduktan sonra değerleri değiştirilebilen nesnelerdir. Java’da değişebilir nesneler, temel veri tipleri (örneğin, int, float, double, boolean) haricinde çoğu yerleşik nesne sınıfı tarafından temsil edilir. Bunlara örnek olarak StringBuilder, ArrayList, HashMap ve Date verilebilir.
Değişebilir nesneler, kullanıcının isteklerine göre verilerin değiştirilebildiği senaryolarda kullanışlıdır. Ancak, bu esnekliğin bir bedeli vardır. Değişebilir nesneler, aynı nesnenin birden fazla yerden referans edildiği durumlarda dikkat gerektirir. Çünkü bir referanstan yapılan değişiklikler diğer referanslar tarafından da görülebilir, bu da beklenmedik davranışlara yol açabilir.
Örneğin, StringBuilder sınıfı bir dizgi oluşturmak için kullanılabilir ve daha sonra bu dizgiye yeni karakterler eklenebilir veya mevcut karakterler değiştirilebilir.
“`java
StringBuilder sb = new StringBuilder(“Merhaba”);
sb.append(” Dünya!”); // sb’ye yeni karakterler ekleniyor
System.out.println(sb); // Çıktı: Merhaba Dünya!
“`
Yukarıdaki örnekte, sb değişkeni bir StringBuilder nesnesini referans eder. append() metodu çağrıldığında, sb değişkeni tarafından referans edilen nesnenin içeriği değiştirilir.
Değişmez Nesneler
Değişmez nesneler, oluşturulduktan sonra içerikleri değiştirilemeyen nesnelerdir. Değişmez nesnelerde, içerik değiştirilmesi gerektiğinde, yeni bir nesne oluşturulur ve orijinal nesne dokunulmaz. Java’da değişmez nesneler, String, Integer, Double ve Boolean gibi temel veri tipleri tarafından temsil edilir.
Değişmez nesneler, çoklu iş parçacıklı ortamlarda güvenli kullanılabilir. Çünkü aynı nesnenin birden fazla iş parçacığı tarafından referans edilmesi durumunda, herhangi bir iş parçacığı tarafından yapılan değişiklikler diğer iş parçacıklarını etkilemez. Değişmez nesneler ayrıca, aynı nesnenin birden fazla yerden referans edilmesi durumunda, bellekte daha az alan kullanırlar.
Örneğin, String sınıfı değişmezdir. String nesnesini değiştirmeye çalıştığınızda, aslında yeni bir String nesnesi oluşturursunuz. Orijinal String nesnesi değişmez kalır.
“`java
String s1 = “Merhaba”;
String s2 = s1.concat(” Dünya!”); // s2, yeni bir String nesnesine referans eder
System.out.println(s1); // Çıktı: Merhaba
System.out.println(s2); // Çıktı: Merhaba Dünya!
“`
Yukarıdaki örnekte, s1 değişkeni bir String nesnesini referans eder. concat() metodu çağrıldığında, yeni bir String nesnesi oluşturulur ve s2 değişkeni bu yeni nesneyi referans eder. s1 değişkeni tarafından referans edilen orijinal String nesnesi dokunulmaz.
Değişebilir ve Değişmez Nesnelerin Avantajları ve Dezavantajları
Değişebilir ve değişmez nesnelerin her ikisinin de kendine göre avantajları ve dezavantajları vardır. İşte bazı temel noktalar:
Değişebilir Nesnelerin Avantajları
* **Esneklik**: Değişebilir nesneler, verilerin gerektiğinde değiştirilebildiği senaryolarda esneklik sağlar.
* **Performans**: Değişebilir nesneler, genellikle değişmez nesnelere göre daha iyi performans gösterir, özellikle çok sayıda veri değiştirilmesi gerekiyorsa.
* **Bellek verimliliği**: Değişebilir nesneler, değişmez nesnelerden daha az bellek kullanabilir, çünkü içerikleri değiştirilmek yerine güncellenir.
Değişebilir Nesnelerin Dezavantajları
* **Güvenlik**: Değişebilir nesneler, çoklu iş parçacıklı ortamlarda güvenlik sorunlarına yol açabilir. Çünkü aynı nesnenin birden fazla iş parçacığı tarafından referans edilmesi durumunda, herhangi bir iş parçacığı tarafından yapılan değişiklikler diğer iş parçacıklarını etkileyebilir.
* **Karmaşıklık**: Değişebilir nesneler, değişmez nesnelere göre kullanımı daha karmaşıktır. Çünkü bir nesne birden fazla yerden referans edildiğinde, yapılan değişikliklerin diğer referanslar tarafından da görülebileceği göz önünde bulundurulmalıdır.
Değişmez Nesnelerin Avantajları
* **Güvenlik**: Değişmez nesneler, çoklu iş parçacıklı ortamlarda güvenlidir. Çünkü aynı nesnenin birden fazla iş parçacığı tarafından referans edilmesi durumunda, herhangi bir iş parçacığı tarafından yapılan değişiklikler diğer iş parçacıklarını etkilemez.
* **Önbelleğe alma**: Değişmez nesneler, önbelleğe alma mekanizmaları için daha uygundur. Çünkü içerikleri değiştirilmediği için, aynı nesne birden fazla kez kullanılabilir.
* **Basitlik**: Değişmez nesneler, değişebilir nesnelere göre kullanımı daha basittir. Çünkü bir nesne birden fazla yerden referans edildiğinde, yapılan değişikliklerin diğer referanslar tarafından da görülebileceği endişesi yoktur.
Değişmez Nesnelerin Dezavantajları
* **Performans**: Değişmez nesneler, çok sayıda veri değiştirilmesi gerekiyorsa, değişebilir nesnelere göre daha düşük performans gösterebilir.
* **Bellek kullanımı**: Değişmez nesneler, değişebilir nesnelerden daha fazla bellek kullanabilir, çünkü her değişiklik için yeni bir nesne oluşturulur.
Özet
Değişebilir ve değişmez nesneler, Java’da nesne oluşturmanın farklı yollarıdır. Her iki tür nesnenin de kendine göre avantajları ve dezavantajları vardır. Uygulamanız için en uygun nesne türünü seçerken, uygulamanızın gereksinimlerini ve performans beklentilerinizi göz önünde bulundurmanız önemlidir.
Değişebilir ve değişmez nesneler, Java’da programlama yaparken karşılaşacağınız temel kavramlardır. Bu makalede, bu kavramların ayrıntılı bir açıklamasını sunmaya çalıştım. Detaylı bilgi için Java dokümantasyonunu ve ilgili kaynakları inceleyebilirsiniz. Kişisel web sitemde de Java programlama diliyle ilgili daha fazla makale ve kaynak bulabilirsiniz.
#Etiketler
#Java #Nesne #Değişebilir #Değişmez #Mutable #Immutable #Programlama #OOP #ObjectOrientedProgramming #JavaProgramlama #FatihSoysal #WebSitesi #JavaDokümantasyonu