Static Class Nedir ?

Sosyal medyada paylaşın

static class, içindeki tüm üyelerin static olarak tanımlanmış olduğu bir sınıftır. Bir static class, nesnelerin oluşturulmasına izin vermez ve doğrudan sınıf adı kullanılarak kullanılabilir.

Bir sınıfın static olarak tanımlanması, o sınıfa ait nesnelerin oluşturulmasını engeller ve sınıfın statik bir şekilde bellekte tutulmasını sağlar. Bir static class da aynı şekilde statik bir şekilde bellekte tutulur ve nesne oluşturulmasına izin vermez.

static class genellikle yardımcı işlevler sağlamak için kullanılır. Oyunlarda genelde EconomyManager, LevelManager, EventManager gibi sürekli birden fazla yerden erişilecek olan yardımcı sınıflarda genelde static kullanılır. Örneğin, Math sınıfı C# dilinde static olarak tanımlanmıştır ve matematiksel işlemleri gerçekleştiren yardımcı yöntemler içerir. Kendi yazdığım yardımcı sınıflar(utility) içerisinde Mathf sınıfını static olarak yazdım ama BezierCurveGenerator’u static olmadan normal yazdım çünkü static olmasını gerektirecek bir şey yoktu. Tek yerden erişim oluyordu ve işim bitince nesne GC tarafından temizlenmesini istiyordum. İlgili kodu Unity-Library repo’mda bulabilirsiniz. Aklıma gelmişken bir konudan daha bahsedeyim, GC (Garbage Collector) static sınıfları, fonksiyonları, değişkenleri temizlemez !!!. Burası önemli bir nokta.

static class aynı zamanda, nesnelerin statik yöntemlerinin bir parçası olarak kullanılabilen bir grup yardımcı işlev içeren bir araç sınıfı olarak da kullanılabilir. Bu durumda, static sınıfın üyeleri, bir sınıf nesnesine değil, doğrudan sınıf adı kullanılarak çağrılır.

Özetle, static class bir sınıf türüdür ve içindeki tüm üyeler static olarak tanımlanır. Nesnelerin oluşturulmasına izin vermez ve doğrudan sınıf adı kullanılarak kullanılabilir. Yardımcı işlevler sağlamak için sıklıkla kullanılır.

Normal Class’tan nesne üretip erişmekten farkı ise bellekte sadece bir kopyasının bulunmasıdır. Örneğin her nesne bellekte ayrı bir alan kaplar fakat static sınıfların bellekte sadece bir kopyası olur. Bu yüzden nesne oluşturulmaya ihtiyaç duyulmadığı ve nesneye özgü özellikler olmadığı durumlarda static sınıf kullanmak bellek performansı açısından daha mantıklı bir seçim olacaktır.

public class MyClass {
   public static void myMethod1() {
      //...
   }
   
   public static void myMethod2() {
      //...
   }
}

Gerektiği yerden nesne oluşturmaya gerek kalmadan ve scripti sahnede herhangi bir objeye atmadan MyClass.myMethod1() diyerek ilgili class bölümüne erişim sağlayabiliriz.

Ek olarak static class programın çalışma süresi boyunca bellekte kalır. static anahtar kelimesi, bir değişkenin veya sınıfın programın başlangıcından itibaren bellekte kalacağını belirtir.

Bir static class, uygulama başlatıldığında belleğe yüklenir ve programın çalışma süresi boyunca bellekte kalır. Bu, static class‘a ait herhangi bir verinin program çalışırken her zaman kullanılabilir ve erişilebilir olacağı anlamına gelir. Ancak, static class‘ın nesneleri oluşturulamadığından, static class‘ın bellekte kullanacağı alan sabittir.

Bu nedenle, static class‘ın üyeleri sabit kalır ve bellekteki aynı alanda tutulur. Böylece, static class kullanımı programın performansını artırabilir, çünkü bir nesne oluşturulmadığından dolayı hep sabit alan kaplar, daha fazla bellek ihtiyacının olmayacağının garantisini verir. statik sınıfın yüklenmesi diğer normal sınıflardan farklı olarak yalnızca bir kez gerçekleşir ve bu nedenle uygulamanın genel performansını etkileyecek kadar büyük bir faktör değildir. Ancak, static olarak tanımlanan değişkenlerin ve sınıfların aşırı kullanımı, gereksiz bellek kullanımına neden olabilir ve uygulamanın performansını olumsuz etkileyebilir.