Sobes.tech
Junior

Değiştirilemez nesneler (immutable) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Değiştirilemeyen nesneler, oluşturulduktan sonra durumu değiştirilemez. Değiştirme girişiminde her zaman yeni bir nesne oluşturulur.

Java'da değiştirilemez sınıflara örnekler:

  • String
  • İlkel sarmalayıcılar (Integer, Long, Boolean vb.)
  • Bazı koleksiyonlar (Collections.unmodifiableList(), Guava'dan ImmutableList)

Avantajlar:

  • İş parçacığı güvenliği (eşzamanlı erişimde senkronizasyon gerekmez).
  • Kullanım kolaylığı (nesnenin durumu kolayca anlaşılır).
  • HashMap anahtarı veya Set öğesi olarak kullanılabilirler (hashCode ve equals() değişmez).
  • Önbelleğe alma ve tekrar kullanım sayesinde performansı artırırlar.

Dezavantajlar:

  • Her değişiklikte yeni nesne oluşturmak, sık değişen durumlar için verimli olmayabilir.

Kendi oluşturma:

  • Sınıfı final olarak ilan edin.
  • Tüm alanları özel ve final yapın.
  • Setter metodları sağlamayın.
  • Değişken alanlar için getter'larda, orijinal nesnelere referans yerine kopyalarını döndürün.
public final class ImmutablePerson {
    private final String name;
    private final int age;
    private final List<String> hobbies;

    public ImmutablePerson(String name, int age, List<String> hobbies) {
        this.name = name;
        this.age = age;
        // Dışarıdan değişikliği önlemek için kopya oluştur
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Değiştirilemez liste döndür
        return Collections.unmodifiableList(hobbies);
    }
}