• Cts. Şub 1st, 2025

Arif GÖKÇE

Senior Software Engineer

SingletonvsStatic

Singleton ve Static sınıflar, bir uygulamanın genel durumunu yönetmek için kullanılabilir ve yalnızca bir kez bellekte var olurlar. Ancak, bu iki yapı arasında önemli farklar bulunmaktadır. Bu yazıda, bu farkları ayrıntılı bir şekilde inceleyeceğiz.


Singleton Nedir?

Singleton, Gang of Four (GoF) tarafından tanımlanan bir oluşum deseni (creational pattern) türüdür. Temel amacı, bir sınıfın yalnızca bir örneğinin oluşturulmasını sağlamak ve bu örneğe global erişim sağlamaktır.

Singleton deseni, genellikle aşağıdaki bileşenlerden oluşur:

  • Özel bir constructor (kurucu metot) kullanır.
  • Statik bir readonly değişken içerir.
  • Bu değişken lazy loading yöntemiyle başlatılır. Yani, yalnızca ihtiyaç duyulduğunda oluşturulur.
  • Thread-safe olması genellikle derleyici tarafından garanti edilir.

Aşağıdaki örnek, .NET kullanılarak bir Singleton sınıfının nasıl çalıştığını göstermektedir:

public class Singleton
{
    private static readonly Singleton _instance = new Singleton();

    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            return _instance;
        }
    }
}
  • Instance adlı yöntem, sınıfın bir örneğinin oluşturulup oluşturulmadığını kontrol eder.
  • Eğer örnek oluşturulmuşsa, aynı örnek döndürülür. Aksi takdirde, yeni bir örnek oluşturulur.
  • Bu yapıyla, aynı sınıfın birden fazla nesnesi oluşturulamaz.

Microsoft Dependency Injection Container ile Singleton ömrü tanımlanabilir. Örneğin:

services.AddSingleton<IInterface, Implementation>();

Bu durumda, servis yalnızca uygulama ömrü boyunca bir kez oluşturulur.


Static Sınıf Nedir?

Static, bir sınıfın veya üyesinin belirli bir sınıfa ait olduğunu belirtmek için kullanılan bir anahtar kelimedir. Static sınıflar şunları içerir:

  • Örneklenemezler. new anahtar kelimesi kullanılarak bir nesne oluşturulamaz.
  • Türetilemezler. Static sınıflar sealed olduğu için miras alınamaz.
  • Static sınıflar ve üyeleri doğrudan çağrılabilir. Örneğin: Math.Round(1.2);

Aşağıdaki örnek, bir static sınıfın nasıl tanımlanıp kullanılacağını gösterir:

public static class TemperatureConverter
{
    public static double CelsiusToFahrenheit(double celsius)
    {
        return (celsius * 9 / 5) + 32;
    }
}
  • TemperatureConverter sınıfındaki tüm yöntemler ve özellikler static olarak tanımlanmıştır.
  • Static sınıf çağrılırken, bir örnek oluşturulmasına gerek yoktur. Yöntemler doğrudan erişilebilir.

Static sınıflar, helper, constant veya extension sınıfları gibi değişmeyecek yapılarda kullanılabilir.


Singleton ve Static Sınıflar Arasındaki Benzerlikler

  1. Her ikisi de bellekte yalnızca bir kez var olur.
  2. Uygulamanın genel durumunu tutmak için kullanılabilirler.

Singleton ve Static Sınıflar Arasındaki Farklar

ÖzellikSingletonStatic
Interface DesteğiEvetHayır
Miras AlmaEvetHayır
Nesne Oluşturmanew ile oluşturulabilirOluşturulamaz
Hafıza AlanıHeapHigh-Frequency Heap
Dispose DesteğiEvetHayır
ConstructorÖzel constructor metot olabilirSadece static, parametresiz constructor
PerformansDaha az performanslıDaha yüksek performanslı
Lazy LoadingEvetHayır

Hangi Durumda Hangisini Kullanmalısınız?

  • Static sınıflar, yardımcı metotlar, sabitler veya extension gibi değişmeyecek yapıların tanımlanmasında kullanılır.
  • Singleton sınıflar, bir uygulama boyunca yalnızca bir örneği bulunması gereken durumlarda tercih edilir. Örneğin:
    • Logger sınıfları
    • Veritabanı bağlantıları
    • Caching sistemleri

Hem Singleton hem de Static sınıflar, doğru yerlerde kullanıldığında oldukça güçlü araçlardır. İhtiyacınıza göre seçim yaparak, uygulamanızın performansını ve mimari yapısını optimize edebilirsiniz.

Arif GÖKÇE

Referans:

Static (C# Reference)

Singleton Design Pattern in C#

Singleton VS Static Class in C#

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir