Java İmmutable ve Mutable Nedir? – Java Dersleri

0
879
Java İmmutable ve Mutable Nedir
Java İmmutable ve Mutable Nedir

Immutable (değişmez) sınıflar, nesneleri bir kez oluşturulduktan sonra nesne içeriği değiştirilemeyen sınıflardır. Aslında sabit sınıflar olarakta isimlendirebiliriz. Nesneyi oluştururken içerisinde bulunacak olan değerleri verirseniz ve sonrasında bu değerleri değiştiremezsiniz. Eğer bir immutable nesnenin state’ini değiştirmek isterseniz vermek istediğiniz state’i taşıyacak olan yeni bir nesne oluşturmak zorundasınız. Boolean, Short, Integer, Long, Float, Double, Char ve String gibi tüm kapsayıcı sınıflar (Wrapper Class) java’da immutable sınıflara örnek olarak gösterilebilir. Tam tersi olarak, değiştirilebilen sınıflar da Mutable (değişebilir) sınıflardır.

Peki neden immutable sınıflara ihtiyacımız var?

Sorumuzun cevabunı hemen verelim 🙂 Bir sınıfı thread-safe yapmak istiyorsanız immutable yapmanız gerekmektedir. Immutable nesnelerin değerleri değişmeyeceği için üzerinde ne kadar thread çalışırsa çalışsın hep aynı değerler üzerinden işlem yapılacaktır. Bu noktada ortaya çıkan bir dezavantajlık söz konusuda var tabii. Immutable nesnelerin dezavantajı ise, değerin değişmesini istiyorsak yeni bir nesne oluşturmamız gerekiyor. Bu da zaman, bellek ve garbage collector maliyetleri oluşturmaktadır.

Java’da immutable sınıf nasıl oluşturulur?

  • Sınıfı, final anahtarı ile işaretleyin, böylece extend (kalıtım) edemezsiniz.
  • Sınıfın tüm alanlarını private yapın, böylece doğrudan erişime izin vermezsiniz.
  • Değişkenler için setter metodu koymayın.
  • Tüm değiştirilebilen alanları final yapın, böylece yalnızca bir kez atanabilir.
  • Tüm alanlara, constructor aracılığıyla ilk değerlerini atayın.
  • Değiştirebilir olan tüm alanların dışarıya nesnelerin klonlanarak dönmesini gerçekleştirin.

Örnek bir Immutable Sınıf yapısı aşağıdaki gibidir:

public final class ImmutablePerson {

    private final String name;

    public ImmutablePerson(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

 

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz