Swift: Struct & Class

Mehdican Büyükplevne
4 min readMay 30, 2023

Swift programlama dilinde, “class” ve “struct” birbirinden farklı iki yapıdır ve her biri farklı amaçlara hizmet eder.

class ?

Swift programlama dilinde “class”, nesne tabanlı programlamanın (OOP) temel yapı taşlarından biridir. Bir “class” belirli bir veri modelini veya davranışını tanımlayan taslaktır. Sınıflar (class), özellikleri (properties) ve metodları içerir ve aynı zamanda başlatıcılar (initializers) ve özel davranışlar sağlar.

Class’lar kalıtım (inheritance) mekanizması sayesinde başka bir class’tan türetilerek (miras alınarak) genişletilebilir. Bu durum, bir sınıfın başka bir sınıftan özelliklerini ve davranışlarını devralmasını ve aynı zamanda yeni özellikler ve davranışlar ekleyebilmesini sağlar. Kalıtım, kodun yeniden kullanılabilirliğini arttırır ve kodun yapılsa olarak düzenlemesine olanak tanır.

struct ?

Swift programlama dilinde “struct”(structure), verileri gruplandırmak ve değer tabanlı veri yapısı oluşturmak için kullanılar bir yapıdır. Struct’lar, belirli bir veri modelini veya değeri temsil etmek için kullanılır.

Struct’lar özellikleri (properties) ve metodları içerebilir. Aynı zamanda başlatıcılar (initializers) ve özel davranışlar sağlayabilir. Ancak structlar, kalıtım (inheritance) mekanizmasını desteklemezler, yani başka struct’tan türetilemezler. Bunun yerine değer tipleri olarak kabul edilir ve kopyalama yoluyla işlenirler.

- Arasındaki Farklar -

  • Class’lar, kalıtım (inheritance) mekanizmasıyla birbirlerinden türetilebilirken, Struct’lar bu özelliği desteklemez. Bir sınıf, başka bir sınıftan miras alabilir ve bu şekilde var olan özellikleri ve davranışları kullanabilir, değiştirebilir veya yeni özellikler ekleyebilir. Yapılar ise genellikle daha basit veri yapılarını temsil etmek ve değerlerin kopyalanmasını sağlamak için kullanılır.
  • Swift’te, yapılar (struct) değer tipi olarak kabul edilirken, sınıflar (class) referans tipi olarak kabul edilir.

Değer tipleri, değerlerin kopyalandığı anlamına gelir, yani bir yapıyı bir değişkene atadığınızda veya bir fonksiyona geçirdiğinizde, orijinal yapının bağımsız bir kopyası oluşturulur.

Referans tipleri ise, bellekte bir yerde saklanır ve bir referans üzerinden erişilir. Bir sınıfı bir değişkene atadığınızda veya bir fonksiyona geçirdiğinizde, aslında aynı nesneye referans yapılır. Bu nedenle, bir referans tipini değiştirdiğinizde, aynı nesneyi paylaşan diğer referanslar da etkilenir.

  • Bir sınıfın örnekleri varsayılan olarak değiştirilebilirdir (mutable), yani içerikleri değiştirilebilir. Ancak, yapılar varsayılan olarak değiştirilemezdir (immutable). Yapılara bir “mutating” anahtar kelimesi ekleyerek, belirli bir yapı içinde değerleri değiştirmek için mutasyon metotları oluşturabilirsiniz.
  • Sınıflar, birden fazla başlatıcı (initializer) sağlayabilir ve kalıtım yoluyla üst sınıfın başlatıcılarını kullanabilir. Yapılar ise varsayılan olarak varsayılan başlatıcılara (default initializer) sahiptir ve özel başlatıcılar ekleyebilirsiniz. Başlatıcılar, bir nesneyi başlatmak için kullanılan metotlardır.

Peki, class mı kullanmak daha mantıklı, yoksa struct mı?

Aslında bu tamamen sizin projenizin ihtiyaçlarına göre değişir.

Class’lar genellikle daha karmaşık veri modellerini ve davranışlarını temsil etmek için kullanılır.

Struct’lar ise daha basit veri yapıları ve değerler için tercih edilir. Struct’lar, daha hafif ve daha performanslı olabilir. Değer tipleri olduğu için bellekte daha küçük bir alan kaplarlar ve kopyalama yoluyla işlendiği için referans tiplerine göre daha hızlı olabilirler. Özellikle küçük boyutlu veriler ve işlemler için struct’ları tercih etmek, performansı artırabilir.

Swift dökümantasyonu, basit veri modellerini temsil etmek için struct’ları kullanmayı önerir. Örneğin, bir nokta koordinatını temsil etmek, bir renk veya boyut bilgisini saklamak gibi durumlarda struct’lar daha uygun olabilir. Bu tür durumlarda, daha hafif ve basit bir yapıya ihtiyaç duyulduğunda struct’ları kullanmak daha mantıklı olabilir.

Ancak her durumda struct kullanmak zorunlu değildir. Projenizin gereksinimleri, veri yapısı ve ilişkileri gibi faktörleri değerlendirerek, class veya struct kullanımına kendiniz karar vermelisiniz. İhtiyaçlarınıza en uygun olan yapıyı seçmek önemlidir.

Son olarak bir örnekle bitirelim ;

Class Kullanımı,

Struct Kullanımı,

Yukarıdaki örnekte, öğrenci bilgilerini temsil etmek için hem class yapısında hem de struct yapısında kodlama yaptık.

Yukarıdaki senaryoda, her iki durumda da öğrenci bilgilerini doğru bir şekilde temsil etmek için kullanılabilir. Ama öğrenci bilgileri üzerinde değişiklik yapılması gerekiyorsa, mesela not güncellemesi gibi Class kullanımına daha uygun olabilir.

Ancak, sadece öğrenci bilgilerini saklamak ve okumak istiyorsak ve değişmez bir veri yapısını tercih edeceksek struct kullanımı daha uygun olabilir.

Yani bu durumda hangi yapının tercih edileceği proje gereksinimine ve kullanım senaryolarına bağlı olarak değişir.

Tekrar görüşmek üzere 👋🏼

Keyifli Kodlamalar.

--

--