İlginizi Çekebilir
featured
  1. Ana Sayfa
  2. Java
  3. Java’da Enum Kavramı

Java’da Enum Kavramı

Bu konumuz içerisinde hakkında fazla yerli kaynak olmayan Java’da Enum Kavramı nedir, kullanımı gibi sorulara cevaplar arayacağız. Yerli kaynaklar üzerinde pek kendisine yer bulamamamı Java’da Enum kavramı kafa karıştırıcı bir yapı olarak gözükse bile kullanımı kolay bir kavramdır.

Java’da Enum Kavramı Nedir?

Enum kavramı, bir değişken üzerinden önceden tanımlanmış özel java sabitleridir. Java’nın sürekli gelişmesi ile birlikte, eski bir sürüm olan 5.0 sürümünde hayatımıza giriş sağlamıştır. Java’da enum kavramı oluşturmuş olduğum programın okunabilirlik düzeyini arttırır ve sağlamış olduğu tip güvenliği ile daha stabil bir altyapı oluşturmaya olanak sağlar. Genel kullanımını aklımızda daha iyi canlandırabilmek adına bir örnek vermek istiyorum.

Bir yazılım dilini öğrenmeye başladığımız zaman ilk başta herkes gibi “merhaba dünya” yazdırır ve sonra programlarımızda “1 seçilirse bu olayı yap, 2 seçilirse şu olayları yap” şeklinde komut satırları oluştururuz. Bu tür programlamalar sonucunda istenilen sonucu elde etmemiz mümkün fakat çok büyük çaplı bir projelerde sıkıntılar ile karşılaşabiliriz. Belirtilen 1 değerinin neyi, 2 değerinin neyi ifade ettiğini anlamlandırabilmek için Java’da enum kavramı kullanırız.

Kullanım yapıları sınıflara benzer, kendilerine ait yapıcı metotları mevcuttur. Yapıcı metotlar hakkında eksiklik hissediyorsanız Java Nesne ve Sınıf Kavramları içeriğime göz atabilirsiniz.

Java Enum Kullanımı

Programlarımızda enum tanımlaması yapmak için enum anahtar kelimesini kullanırız. Java enum kullanımı için yazmamız gereken kod parçası şu şekildedir;

enum staffMembers {ADMINISTRATION, SUPERMODERATOR, MODERATOR, MEMBER} // Enum elemanları arasında virgül konur.

Tanımlama işlemini kullandıktan sonra elemanlara, enum adı ile erişebiliyoruz. Java enum kullanımı için alternatif olarak elemanlara değer vererek de enum tanımlaması gerçekleştirebiliriz. Tam bu cümle sonuna her kaynak üzerinde geçen bir not paylaşmak istiyorum sizlerle.

Java Enum kullanımı hakkında gerekli açıklamalar ve tanımlamalar sonunda bir yetki kontrolü gerçekleştirecek bir örnek oluşturalım ve Java’da enum kavramı aklımızda daha kalıcı bir yer edinsin. Oluşturacağım bu örnek üzerinde gerçekleştirdiğim aşamalar;

#1 Örneğimiz üzerinde bir tanımlı bilgilerin yer alacağı userManager sınıfı tanımlaması gerçekleştirdim. Bu sınıf üzerinde kullanıcı yetkilerini kontrol etmem için ihtiyaç duyduğum eleman tanımlamalarını gerçekleştirdim.

public class userManager {
    // -> Yönetici Account Değişken Tanımlaması:
    String userName = "admin", userPass = "admin123";
    int authority = 1;
}

#2 Kullanıcı yetkileri hiyerarşik olarak sabit kalacağı için Main sınıfım üzerinde staffMembers isminde bir enum tanımlaması gerçekleştirdim.

enum staffMembers {
    ADMINISTRATION (1),
    SUPERMODERATOR (2),
    MODERATOR (3),
    MEMBER (4); // Enum elemanları arasında virgül konur.
    private int staffRank;
    staffMembers(int staffRank) {
        this.staffRank = staffRank;
    }
    public int getStaffRank(){
        return staffRank;
    }
}
// Main yukarısına yazacağımız Java Enum tanımlaması.

#3 Oluşturmuş olduğum enum tanımlaması içerisinde 4 adet rütbe ismi ve bu elemanların değerlerinin tanımlamasını gerçekleştirdim.
#4 Sabit kalacak verilerimin tanımlamasını gerçekleştirdikten sonra Main sınıfım içerisinde oluşturduğum enum verilerine ve userManager sınıf verilerine ulaşmak için tanımlama işlemi gerçekleştirdim.
#5 Enum içerisinde tanımlamasını yaptığım yetkileri ekrana yazdırmak için foreach kullanarak ekrana yetkilerin numarasını ve isimlerini yazdıran bir foreach döngüsü oluşturdum. Kullanıcıdan kayıt olması için veriler talep ederek userManager sınıfı içerisinde bulunan veriler ile eşitliğini sorguladım. Eşitlik sağlanırsa kullanıcı “Administration” rütbesini alacak sağlamaz ise “Member” rütbesini alacak.
#6 Gerekli kontrol yapıları ve atama işlemleri gerçekleştirildikten sonra oluşturulan kullanıcıların kayıt bilgileri ekrana yazdırılarak program sona erecek.

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        // Scanner Sınıf Tanımlanması:
        Scanner scanner = new Scanner(System.in);
        // Değişken Tanımlaması:
        String userName, userPass, authorityName="Tanımsız";
        int authority;
        // userManager Tanımlaması:
        userManager userManager = new userManager();
        // Yetkileri Ekrana Yazdırma İşlemi:
        System.out.println("--------------------\n-> Yetkiler:");
        for(staffMembers s: staffMembers.values()){
            System.out.println("["+s.getStaffRank()+"] - "+s.name());
        }
        System.out.println("--------------------");
        System.out.print("-> Kullanıcı Adı:");
        userName = scanner.nextLine();
        System.out.print("-> Şifre:");
        userPass = scanner.nextLine();
        System.out.println("--------------------");
        // Kullanıcı Sisteme Tanımlı Admin'mi Kontrolünü Sağlıyoruz.
        if(userName.equals(userManager.userName) && userPass.equals(userManager.userPass)){
            authority = userManager.authority;
        }
        else {
           authority = 4;
        }
        // Verilen Yetki İsmine Erişmek İçin Kuracağımız For Döngüsü:
        for(staffMembers s: staffMembers.values()){
            if(s.getStaffRank()== authority){
                authorityName = s.name();
            }
        }
        System.out.println("-> Hesabınız Başarılı Bir Şekilde Oluşturuldu.");
        System.out.println("--------------------\n< Kullanıcı Bilgileri >\nKullanıcı Adı: "+userName);
        System.out.println("Şifreniz: "+userPass+"\nYetkiniz: "+authorityName+"\n--------------------");
    }
}

Kod Çıktısı:

Java'da Enum Kavramı Örnek Çalışması
Java’da Enum Kavramı hakkında örnek


İlk örnek için biraz detaylı ve anlaşılması zor bir örnek olabilir fakat daha önce paylaştığım Java konularını takip ediyorsanız anlaşılması oldukça kolay olacaktır sizler için.

Takip etmenize rağmen aklınız enum kavramında karıştıysa eğer bir örnek çalışması daha yaparak sadece Java enum kullanımı gerçekleştirerek ekrana yazdırma işlemini gerçekleştirelim. Bunun için hazırladığım örnek kod dizisinde uyguladığım aşamalar;

#1 Java enum kullanımı ve bu enum kavramları ekrana yazdırma işlemini gerçekleştirmek için carBrand isminde bir enum oluşturdum.
#2 Bu enum kavram içerisinde çeşitli araba markaları ve bu araba markalarının ait olduğu ülkelerin tanımlamasını gerçekleştirdim.

enum carBrand{
    AUDI("GERMANY"),
    DODGE ("ABD"),
    LAMBORGHINI ("ITALY"),
    BUGATTI ("FRANCE"),
    ROLLSROYCE ("ENGLAND");
    public String country;
    carBrand(String country){
        this.country = country;
    }
}
// Main sınıf yukarısına ekleyeceğiz.

#3 Enum kavramı içerisindeki verileri ekrana yazdırmak için Main sınıfı içerisinde foreach kullanarak enum verilerine erişim sağladım ve ekrana yazdırma işlemini gerçekleştirdim.

public class Main {
    public static void main(String[] args){
        System.out.println("--------------------\n< Java Enum Elemanlarını Ekrana Yazdırma >\n--------------------");
        for(carBrand c: carBrand.values()){
            System.out.println("-> Araba Markası: "+c.name()+"\t Ülke: ["+c.country+"]");
        }
        System.out.println("--------------------");
    }
}

Kod Çıktısı:

Java Enum Verilere Ulaşma
Java Enum Kullanımı

Java enum kullanımı, programlarımıza esneklik ve proje okunurluğunu arttırdığı için oldukça önemli bir yere sahiptir. Java’da enum kavramı kullanırken bulundukları indis numaralarına ulaşabilir ve daha fazla stabil bir durum oluşturabiliriz.

Enum Ordinal Metodu

Java’da Enum kavramı yapı olarak hem dizilere hem de sınıflara benzerlik gösterir. Dizi benzerliğini ele alırsak, enum içerisinde bulunan elemanların bir indis numarasının bulunduğunu söyleyebilirim. Java’da Diziler konusunda kendinizi eksik hissediyorsanız ilgili içeriğime göz atabilirsiniz.

Ordinal metodu kullanarak enum içerisinde bulunan elemanların indis numaralarına erişerek bir örnek oluşturalım. Bu oluşturacağım örnek içerisinde tanımlayacağım ay verilerini ulaşarak hangi mevsime ait olduğunu ve kaçıncı indis numarasında olduğunun çıktısını verdirtelim. Bu kod için uygulayacağım aşamalar şu şekildedir;

#1 Oluşturduğum moths isminde enum sınıfı içerisinde ay isimlerinin tanımlamasını gerçekleştirdim.

enum months{OCAK,ŞUBAT,MART,NİSAN,MAYIS,HAZİRAN,TEMMUZ,AĞUSTOS,EYLÜL,EKİM,KASIM,ARALIK;}

#2 Ay verilerine foreach yardımı ile ulaşarak ekrana yazdırma işlemini gerçekleştirdim ve kullanıcıdan hangi ay hakkında bilgi almak istediğini öğrenmek için scanner sınıfını kullandım.
#3 Öğrendiğim veriyi işlemesi için switch-case yapısını kullandım ve enum indis numarasını, hangi mevsime ait olduğunu gösteren ekran çıktısını oluşturdum.

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        //Scanner Tanımlaması:
        Scanner scanner = new Scanner(System.in);
        // Değişken Tanımlaması:
        int count = 1,sorgulanacakAy;
        System.out.println("--------------------\n-> İndis Numaralarını Kullanarak Ay Sorgulama.\n--------------------");
        for(months m:months.values()){
            System.out.println("[ "+count+" ] - "+m.name());
            count++;
        }
        System.out.print("--------------------\n-> Sorgulayacağınız Ay: ");
        sorgulanacakAy = scanner.nextInt();
        System.out.println("--------------------\n< Ay Verileri >");
        switch (sorgulanacakAy){
            case 1:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.OCAK.ordinal());
                System.out.println("Mevsimim: Kış");
                break;
            case 2:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.ŞUBAT.ordinal());
                System.out.println("Mevsimim: Kış");
                break;
            case 3:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.MART.ordinal());
                System.out.println("Mevsimim: İlkbahar");
                break;
            case 4:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.NİSAN.ordinal());
                System.out.println("Mevsimim: İlkbahar");
                break;
            case 5:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.MAYIS.ordinal());
                System.out.println("Mevsimim: İlkbahar");
                break;
            case 6:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.HAZİRAN.ordinal());
                System.out.println("Mevsimim: Yaz");
                break;
            case 7:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.TEMMUZ.ordinal());
                System.out.println("Mevsimim: Yaz");
                break;
            case 8:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.AĞUSTOS.ordinal());
                System.out.println("Mevsimim: Yaz");
                break;
            case 9:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.EYLÜL.ordinal());
                System.out.println("Mevsimim: Sonbahar");
                break;
            case 10:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.EKİM.ordinal());
                System.out.println("Mevsimim: Sonbahar");
                break;
            case 11:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.KASIM.ordinal());
                System.out.println("Mevsimim: Sonbahar");
                break;
            case 12:
                System.out.println("[months] Enum Sınıfı İçerisinde İndis Numaram: "+months.ARALIK.ordinal());
                System.out.println("Mevsimim: Kış");
                break;
            default:
                System.out.println("Tanımsız Bir Değer Girdiniz.");
                break;
        }
        System.out.println("--------------------");
    }
}

Kod Çıktısı:

Java'da Enum Ordinal Kullanımı
Java Enum Ordinal Kullanımı

Java’da enum kavramı hakkında daha detaylı bilgi almak isterseniz Oracle tarafından hazırlanmış resmi dokümantasyon kaynağına göz atabilirsiniz.
Java’da Enum Kavramı hakkında örnekler bu şekilde arttırılabilir. Java enum kullanımı hakkında aklınızda takılan soruları veya konu işleyişi hakkında bulunacağınız öneriler için aşağıda bulunan “yorum yap” kısmından benimle iletişime geçebilirsiniz.

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap