Java'da Immutability
Giriş
Immutability, bir nesnenin oluşturulduktan sonra durumunun değiştirilememesi durumudur. Immutable nesneler, yazılım geliştirmede birçok avantaja sahiptir. Örneğin, immutability aşağıdakileri sağlar:
- Veri tutarlılığı: Immutable nesneler, verilerin her zaman tutarlı olmasını sağlar. Bu, özellikle çoklu iş parçacığı kullanan uygulamalarda önemlidir.
- Kod okunabilirliği ve sürdürülebilirliği: Immutable nesneler, kodun daha okunabilir ve sürdürülebilir olmasını sağlar. Bu, çünkü immutable nesnelerin davranışları daha öngörülebilirdir.
- Performans: Immutable nesneler, performansı artırabilir. Bu, çünkü immutable nesneler, mutable nesnelere göre daha az bellek kullanır ve daha az güncelleme gerektirir.
Java'da Immutable Nesneler
Java'da immutability, aşağıdaki kurallara uyularak sağlanır:
- Sınıf final olmalıdır: Final sınıflar, yeni nesneler oluşturmak için kullanılamaz. Bu, immutable nesnelerin kalıtılmasını engeller.
- Alanlar final olmalıdır: Final alanlar, yalnızca sınıfın oluşturulma aşamasında ayarlanabilir. Bu, immutable nesnelerin durumunun daha sonra değiştirilmesini engeller.
- Alanlar private olmalıdır: Private alanlar, yalnızca sınıfın iç işleyişi tarafından erişilebilir. Bu, immutable nesnelerin durumunun yanlışlıkla değiştirilmesini engeller.
Java'da Immutable Nesne Örnekleri
Java'da, immutability sağlayan birçok yerleşik sınıf vardır. Örneğin, String sınıfı immutable'dır. String nesnesinin durumu, replace() gibi yöntemler kullanılarak değiştirilmeye çalışıldığında, yeni bir String nesnesi oluşturulur.
Java'da, immutability sağlayan kendi sınıflarımızı da oluşturabiliriz. Örneğin, aşağıdaki kodda, ImmutablePerson sınıfı immutable bir kişi nesnesi temsil eder:
public final class ImmutablePerson {
private final String name;
private final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
- Veri tutarlılığı: Immutable nesneler, verilerin her zaman tutarlı olmasını sağlar. Bu, özellikle çoklu iş parçacığı kullanan uygulamalarda önemlidir.
- Kod okunabilirliği ve sürdürülebilirliği: Immutable nesneler, kodun daha okunabilir ve sürdürülebilir olmasını sağlar. Bu, çünkü immutable nesnelerin davranışları daha öngörülebilirdir.
- Performans: Immutable nesneler, performansı artırabilir. Bu, çünkü immutable nesneler, mutable nesnelere göre daha az bellek kullanır ve daha az güncelleme gerektirir.
- Esneklik: Immutable nesneler, mutable nesnelere göre daha az esnektir. Bu, çünkü immutable nesnelerin durumu daha sonra değiştirilemez.
- Karmaşıklık: Immutable nesneler, mutable nesnelere göre daha karmaşık olabilir. Bu, çünkü immutable nesnelerin durumları, yeni nesneler oluşturarak değiştirilmelidir.
record Person(String name, int age) {
}
Bu recordta, name ve age alanları final'dır ve private'dır. Bu, bu alanların yalnızca recordun oluşturulma aşamasında ayarlanabileceği ve yalnızca recordun iç işleyişi tarafından erişilebileceği anlamına gelir. Recordlar, immutable listeler oluşturmak için de kullanılabilir. Örneğin, aşağıdaki kodda, ImmutablePersons listesi Immutable bir kişi listesi temsil eder:
record ImmutablePerson(String name, int age) {
}
List ImmutablePersons = List.of(
new ImmutablePerson("John Doe", 30),
new ImmutablePerson("Jane Doe", 25)
);
- Veri tutarlılığını artırabilir. Immutable nesneler, verilerin her zaman tutarlı olmasını sağlar. Bu, özellikle çoklu iş parçacığı kullanan uygulamalarda önemlidir.
- Kod okunabilirliğini ve sürdürülebilirliğini artırabilir. Immutable nesneler, kodun daha okunabilir ve sürdürülebilir olmasını sağlar. Bu, çünkü immutable nesnelerin davranışları daha öngörülebilirdir.
- Performansı artırabilir. Immutable nesneler, performansı artırabilir. Bu, çünkü immutable nesneler, mutable nesnelere göre daha az bellek kullanır ve daha az güncelleme gerektirir.