Java İle Basit Bir İsim Rehberi Uygulaması Nasıl Yapılır?

Java İle Basit Bir İsim Rehberi Uygulaması Nasıl Yapılır?
Java İle Basit Bir İsim Rehberi Uygulaması Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Projeye başlamadan önce bilgisayarınızda bir Java Geliştirme Kiti (JDK) yüklü olmalıdır. 2026 yılı itibarıyla en güncel ve kararlı sürüm olan Java 21 veya üzerini tercih etmeniz önerilir. Kodlarınızı yazmak için IntelliJ IDEA, Eclipse veya VS Code gibi bir IDE (Tümleşik Geliştirme Ortamı) kullanabilirsiniz.

  • JDK 21+: Java çalışma ortamı.
  • IDE: Kod yazımı ve hata ayıklama için IntelliJ IDEA önerilir.
  • Temel Java Bilgisi: Değişkenler, döngüler ve sınıflar hakkında bilgi sahibi olmanız yeterlidir.

Adım 1: İsim Rehberi Veri Modelini Oluşturma

Rehberdeki her bir kişi bir nesne olarak temsil edilmelidir. Bunun için Kisi adında bir sınıf oluşturacağız. Bu sınıf, kişinin adını ve telefon numarasını tutacak özelliklere (field) sahip olacaktır.

public class Kisi {
    private String isim;
    private String telefon;

    public Kisi(String isim, String telefon) {
        this.isim = isim;
        this.telefon = telefon;
    }

    public String getIsim() { return isim; }
    public String getTelefon() { return telefon; }

    @Override
    public String toString() {
        return "İsim: " + isim + " | Telefon: " + telefon;
    }
}

Burada private erişim belirleyicisi kullanarak verilerin dışarıdan doğrudan değiştirilmesini engelliyoruz (kapsülleme). toString metodu ise nesneyi ekrana yazdırırken düzgün bir formatta görmemizi sağlar.

Adım 2: Rehber Yönetim Sınıfını Tasarlama

Rehberdeki kişileri saklamak için bir liste yapısına ihtiyacımız var. Java'daki ArrayList sınıfı, dinamik olarak büyüyebilen bir dizi yapısı sunduğu için bu iş için en uygun tercihtir.

import java.util.ArrayList;
import java.util.List;

public class Rehber {
    private List kisiler = new ArrayList();

    public void kisiEkle(Kisi kisi) {
        kisiler.add(kisi);
    }

    public void rehberiListele() {
        if (kisiler.isEmpty()) {
            System.out.println("Rehber boş.");
        } else {
            for (Kisi k : kisiler) {
                System.out.println(k);
            }
        }
    }
}

Bu sınıfta kisiler listesi oluşturduk. kisiEkle metodu ile listeye yeni eleman ekliyor, rehberiListele ile mevcut kayıtları ekrana yazdırıyoruz.

Adım 3: Kullanıcı Girişi ve Menü Yapısı

Kullanıcının uygulamayı yönetebilmesi için bir menüye ihtiyacı vardır. Scanner sınıfı, klavyeden veri okumak için kullanılır. while döngüsü ile kullanıcı "Çıkış" seçeneğini seçene kadar uygulamanın çalışmasını sağlıyoruz.

import java.util.Scanner;

public class Uygulama {
    public static void main(String[] args) {
        Rehber rehber = new Rehber();
        Scanner scanner = new Scanner(System.in);
        boolean devam = true;

        while (devam) {
            System.out.println("1-Ekle, 2-Listele, 3-Çıkış");
            int secim = scanner.nextInt();
            scanner.nextLine(); // Buffer temizleme

            if (secim == 1) {
                System.out.print("İsim girin: ");
                String isim = scanner.nextLine();
                System.out.print("Telefon girin: ");
                String tel = scanner.nextLine();
                rehber.kisiEkle(new Kisi(isim, tel));
            } else if (secim == 2) {
                rehber.rehberiListele();
            } else {
                devam = false;
            }
        }
    }
}

Burada en kritik nokta scanner.nextLine() kullanımıdır. nextInt() metodundan sonra kalan satır başı karakterini temizlemezseniz, bir sonraki isim girişi hatalı çalışacaktır.

Adım 4: Veri Silme ve Arama İşlevselliği

Rehberin kullanışlı olması için arama ve silme özelliği eklemeliyiz. Aşağıdaki kod bloğu, isim üzerinden silme işlemini nasıl yapacağımızı gösterir.

public void kisiSil(String isim) {
    kisiler.removeIf(k -> k.getIsim().equalsIgnoreCase(isim));
}

removeIf metodu, Java 8 ile gelen Lambda ifadelerini kullanır. Bu yöntem, verilen koşulu (isim eşleşmesi) sağlayan tüm nesneleri listeden güvenli bir şekilde siler.

Veri Depolama Yöntemleri Karşılaştırması

Yöntem Avantajı Dezavantajı
ArrayList (Bellek) Çok hızlı, kurulum gerektirmez. Program kapanınca veriler silinir.
Dosya (TXT/JSON) Veriler kalıcıdır. Dosya okuma/yazma hatası riski taşır.
Veritabanı (SQL) Profesyonel, ölçeklenebilir. Ek kütüphane ve kurulum gerektirir.

Güvenlik Uyarısı: Eğer bu uygulamayı bir veritabanına bağlarsanız, kullanıcı girişlerini asla doğrudan sorgu içine gömmeyin. SQL Injection saldırılarına karşı her zaman PreparedStatement kullanın.

Sıkça Sorulan Sorular

Java uygulamasında verileri nasıl kalıcı hale getirebilirim?

Verileri kalıcı hale getirmek için java.io veya java.nio paketlerini kullanarak verileri bir metin dosyasına (JSON veya CSV formatında) yazabilir veya SQLite gibi hafif bir veritabanı kullanabilirsiniz.

Neden ArrayList yerine dizi (array) kullanmıyoruz?

Dizilerin boyutu sabittir. Rehbere kaç kişi ekleneceğini önceden bilemeyeceğimiz için, dinamik olarak genişleyebilen ArrayList yapısını kullanmak çok daha verimlidir.

Program neden "InputMismatchException" hatası veriyor?

Bu hata genellikle nextInt() beklenen yere sayısal olmayan bir değer girildiğinde oluşur. Kullanıcı girişlerini try-catch blokları ile sarmalayarak bu hatayı yönetebilirsiniz.

Lambda ifadeleri neden önemli?

Lambda ifadeleri, Java'da fonksiyonel programlama yapmamızı sağlar. Kodun daha kısa, okunabilir ve yönetilebilir olmasını sağlar.

Bu uygulama profesyonel projelerde kullanılabilir mi?

Bu uygulama bir öğrenme aracıdır. Profesyonel projelerde "Clean Architecture" prensipleri, veritabanı katmanları ve hata yönetimi gibi çok daha karmaşık yapılar tercih edilir.

Uygulama İçin İleri Seviye Hata Ayıklama Stratejileri

Basit bir isim rehberi uygulamasında karşılaşılan en yaygın sorunlar genellikle mantıksal hatalar veya yanlış veri tipi girişleridir. Uygulamanızın çalışma zamanında (runtime) çökmesini engellemek için "defansif programlama" tekniklerini benimsemelisiniz. Özellikle Scanner sınıfı ile kullanıcıdan veri alırken, beklenmedik karakter girişlerini yönetmek uygulamanın kararlılığını artırır.

Aşağıdaki örnek, kullanıcıdan sayısal bir seçim alırken oluşabilecek hataları nasıl güvenli bir şekilde yakalayabileceğinizi göstermektedir:

public int guvenliMenuSecimi(Scanner scanner) {
    int secim = -1;
    boolean gecerli = false;
    while (!gecerli) {
        try {
            System.out.print("Lütfen bir seçim yapın: ");
            secim = Integer.parseInt(scanner.nextLine());
            gecerli = true;
        } catch (NumberFormatException e) {
            System.out.println("Hata: Lütfen sadece rakam giriniz.");
        }
    }
    return secim;
}

Uygulamanın Test Edilebilirliğini Artırma

Kodunuzu daha profesyonel hale getirmek için "Unit Test" (Birim Testi) kavramına giriş yapmalısınız. JUnit gibi kütüphaneler, yazdığınız her bir metodun (isim ekleme, silme, arama) beklenen sonucu verip vermediğini otomatik olarak kontrol etmenizi sağlar. Manuel testler yerine otomatik testler yazmak, kodunuzu güncellerken mevcut işlevlerin bozulmadığından emin olmanıza yardımcı olur.

Örneğin, rehberinize yeni bir isim ekleme fonksiyonunun doğruluğunu test etmek için basit bir mantık kurgulayabilirsiniz:

// Basit bir test senaryosu mantığı
public void testIsimEkleme() {
    RehberYonetimi rehber = new RehberYonetimi();
    rehber.isimEkle("Ahmet", "5550001122");
    
    if (rehber.getListeBoyutu() == 1) {
        System.out.println("Test Başarılı: İsim başarıyla eklendi.");
    } else {
        System.out.println("Test Başarısız: Liste boyutu beklenenden farklı.");
    }
}

Performans Optimizasyonu ve Veri Yapısı Seçimi

Uygulamanızdaki isim sayısı arttıkça, ArrayList üzerinde yapılan arama işlemleri yavaşlayabilir. ArrayList yapısında bir ismi aramak için listenin başından sonuna kadar tüm elemanları kontrol etmeniz gerekir (O(n) karmaşıklığı). Eğer rehberinizde binlerce isim olacaksa, HashMap gibi anahtar-değer (key-value) yapısına sahip veri türlerini kullanmak, arama performansını ciddi oranda artıracaktır.

Veri Yapısı Arama Performansı Kullanım Alanı
ArrayList O(n) - Yavaş Küçük ve sıralı listeler
HashMap O(1) - Çok Hızlı Büyük veri setleri ve hızlı erişim

İleri seviye projelerde, verilerin bellekte tutulması yerine SQLite veya H2 Database gibi hafif veritabanı motorlarına geçiş yaparak verilerin kalıcılığını ve sorgulama hızını optimize edebilirsiniz.

Sonuç

Java ile basit bir isim rehberi uygulaması yaparak, nesne yönelimli programlamanın temel taşlarını ve veri yönetimi mantığını pekiştirmiş oldunuz. Bu projeyi geliştirmek için bir sonraki adımda, verileri bir dosyaya kaydedip okuyan bir dosya yönetim sistemi eklemeyi deneyebilirsiniz. Yazılım dünyasında sürekli pratik yapmak, teorik bilgiyi kalıcı hale getirmenin tek yoludur.

Kod güvenliği sorumluluk reddi: Bu rehberdeki kod örnekleri eğitim amaçlıdır. Üretim ortamında (production) kullanılacak uygulamalarda kullanıcı girdilerinin doğrulanması (validation), hata yönetimi ve güvenlik açıklarına karşı koruma önlemlerinin (XSS, SQL Injection vb.) alınması geliştiricinin sorumluluğundadır.

Bu yazıya tepkinizi paylaşın:
Mert Çelik

Kendin yap (DIY) projeleri ve teknik tamirat rehberleri konusunda uzmanım. Denenmiş ve test edilmiş yöntemlerle okuyuculara güvenilir bilgiler sunuyorum.

Yorumlar (0)

Yorum Yaz