8 Mayıs 2023 Pazartesi

OOP | Nesne Kopyalama Davranışları (Shallow & Deep Copy)

 Nesne Kopyalama Davranışlarına Genel Bir Bakış

Öncelikle değer türlü değişkenlerle ilgili bir hatırlatma yapalım. Değer türlü değişkenler, belleğin Stack kısmında tanımlanan ve değerlerini orada tutan değişkenlerdir. integer 5 değeri verdiğimiz bir değişkeni inceleyelim:

    int a = 5;
    int b = a;

a'ya 5, b'ye a değeri verildi. b, a'nın tuttuğu 5 değerini aldı. Ram üzerinde 5 değeri çoğaltılmış oldu. Bu davranış, "değer türlü değişkenler" üzerinde yapıldığında çoğaltma sağlar, yani bir Deep Copy örneğidir.

🔹Nesne ve değer kopyalama iki davranış üzerinden olur:
  • Shallow Copy
  • Deep Copy

 Shallow Copy

🔸Var olan bir nesnenin/değerin referansının kopyalanmasıdır. Shallow Copy yapıldığında eldeki değer çoğaltılmaz, sadece birden fazla referansla işaretlenmiş olur.

    MyClass m1 new MyClass( );
    MyClass m2 m1;

Buna benzer bir örneği değer türlü değişken üzerinde göstermiştik. "Değer türlü değişkenler"de aynı değer birden fazla referansla işaretlendiğinde çoğaltılıp Deep Copy olurken aynı davranış "referans türlü değişkenler" üzerinde sergilendiğinde çoğaltılmaz ve Shallow Copy olur.



 Deep Copy

🔹Var olan bir nesne, Deep Copy ile kopyalanıyorsa eğer, ilgili nesne miktarı çoğalır. Aynı özelliklere ve değerlere sahip olan bellekte (ram) farklı bir nesne daha oluşur.


Referans türlü değişkenlerin default davranışı Shallow Copy'dir. Referans türlü bir değişkeni başka bir yere atadığımızda kopyalanmaz (türetilmez), Shallow Copy yapılır (yüzeysel olarak işaretlenir) ve çoğaltılmaz. 

Değer türlü değişkenlerde ve bunların değerinde default davranış Deep Copy'dir. Yani 5 değeri tutan herhangi bir değişkeni bir yere gönderdiğimizde default olarak ilgili değişken elindeki değişkeni göndermek yerine 5'in kopyasını alıp onu gönderir. Dolayısıyla birebir çoğaltma yapmış olur.

Deep Copy ile kopyalanan nesne, kopyalandığı nesne ile birebir aynı görünse de başlı başına bağımsız bir nesnedir. Asıl nesnenin ikizi gibi düşünebiliriz. Üzerinde farklı işlemler yapıldığında asıl nesneyi etkilemez.

0 yorum:

Yorum Gönder