Mutable ve Immutable nedir ?

 

Immutable (değişmez), nesneler bir kez oluşturulduktan sonra içeriği değiştirilemeyen sınıflardır. Tam tersi olarak, değiştirilebilen sınıflar da Mutable (değişebilir) sınıflardır. Kısacası Immutable nesneler değişmeyen nesnelerdir. Onları oluşturursun, fakat onları değiştiremezsin. Bunun yerine, değişmez bir nesneyi değiştirmek isterseniz, onu klonlamanız ve oluştururken klonu değiştirmeniz gerekir.

Immutable nesneler, çok iş parçacıklı(multi-threaded) ortamlarda ve streamlerde kullanışlıdır. Değişmeyen nesnelere güvenmek harikadır. Başka bir thread’in nesnesini değiştiren bir iş parçacığının neden olduğu hatalar olabilir. Immutable nesneler, bu sorunların tümünü çözmüş olacaktır.

Brian Goetz ” Java Concurrency in Practice ” kitabında bunu daha ayrıntılı olarak açıklamıştır.

Java’da yaygın olanlarından örnek verecek olursak String ve tüm ilkel sarmalayıcılar (Integer, Long, Double, Byte….), BigDecimal, BigInteger immutable sınıflardır.  DateStringBuilder mutable sınıflardandır.

Aşağıdaki örnekle String’in değerinin değişmediğini göreceksiniz.

Date sınıfını hepimiz aktif olarak kullandık ve mutable olmasından dolayı sıkıntılar yaşamışızdır. Bu sebeple Java 8 ile beraber immutable olan LocalDate sınıfı gelmiştir. Aşağıdaki örneği inceleyiniz.

Java’da değişmez sınıf yapmak için aşağıdaki adımları uygulamanız gerekir.

  • Sınıfı, final anahtarı ile işaretlemek gerekir, böylece genişletilemez (extend edilemez).
  • Sınıfın tüm alanlarını private yapın, böylece doğrudan erişime izin verilmez.
  • Değişkenler için setter yöntemleri sağlamayın.
  • Tüm değiştirilebilen alanları final yapın, böylece yalnızca bir kez atanabilir.
  • Tüm alanların, contructor aracılığıyla ilk değerlerini atamasını sağla.
  • Değiştirebilir olan tüm alanların dışarıya nesnelerin klonlanarak dönmesini gerçekleştirin.

Effective Java’da, Joshua Bloch bu etkileyici tavsiyeyi yapar:

“Classes should be immutable unless there’s a very good reason to make them mutable….If a class cannot be made immutable, limit its mutability as much as possible.”

Beğenebileceğiniz Diğer Yazılar

4 Yorum

  1. merve dedi ki:

    tesekkürler cok faydalı bir yazı olmus ellerinize sağlıkkk 🙂

  2. Pelin dedi ki:

    Bir çok iş görüşmesinde karşımıza çıkan konulardan birisi, ve immutable-mutable nesneleri anlamak için faydalı bir yazı olmuş, elinize sağlık. 🙂

  1. 2 Ocak 2019

    […] sorunlarına yol açmaktadır. (Immutable ile  ilgili detaylı  bilgiyi buradan okuyabilirsiniz.) Java 8’deki Tarih ve Zaman API’leri immutable‘dir ve bu nedenle […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir