Berk Akademi
Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Java Arayüzler Nedir ve Ne Zaman Kullanılır?

java-arayuzler-ne-zaman-kullanilir
Bu yazıda neler var?
  1. Java arayüzler nedir ve hangi problemi çözer?
  2. interface, implements ve metot gövdesi nasıl çalışır?
  3. EmailNotification ve SmsNotification ile çalışan örnek
  4. Birden fazla arayüz ve basit polimorfizm ne sağlar?
  5. Arayüz mü soyut sınıf mı? Karar çerçevesi
  6. Sık Sorulan Sorular

Java arayüzler ne zaman kullanılır sorusunun kısa yanıtı şudur: Farklı sınıfların aynı davranış sözleşmesine uymasını, ancak bu davranışı kendi yöntemleriyle gerçekleştirmesini istediğinde arayüz kullanılır. Arayüz, sınıfların hangi davranışları sunacağını belirler; uygulama ayrıntılarını sınıflara bırakır ve değiştirilebilir uygulamalarla basit polimorfizm için esnek bir zemin oluşturur.

Arayüz, sınıfların nasıl çalışacağını değil, hangi davranışları sunacağını tanımlar.

Java arayüzler nedir ve hangi problemi çözer?

Java’da interface, bir sınıfın yerine getirmesi beklenen davranışları tanımlayan bir sözleşmedir. Bu sözleşme, bir nesnenin hangi işlemleri sunacağını belirtir; işlemin hangi algoritmayla, hangi veri yapısıyla veya hangi dış kaynakla gerçekleştirileceğini ise uygulayan sınıfa bırakır.

Arayüzün çözdüğü temel problem, çağıran kodun belirli bir sınıfın iç ayrıntılarına bağlanmadan ortak bir davranışla çalışabilmesidir. Örneğin e-posta ve SMS gönderen sınıflar farklı biçimde çalışabilir. Çağıran kod açısından önemli olan, bu sınıfların bir bildirim gönderme davranışı sunmasıdır. Bildirimin hangi kanaldan ve hangi adımlarla gönderildiği sınıfın içinde kalır.

Buradaki ortaklık, ortak kodu zorunlu olarak paylaşmak değil, ortak bir davranış beklentisini paylaşmaktır. Bu nedenle interface kavramı yalnızca kalıtımın başka adı değildir. Kalıtım, sınıflar arasında hiyerarşik bir ilişki ve uygun olduğunda devralınan yapı oluşturur. Arayüz ise temel olarak bir sınıfın hangi yeteneği sunduğunu ve hangi sözleşmeye uyduğunu ifade eder.

Aynı sözleşmeye uyan sınıflar birbirinden tamamen farklı biçimde çalışabilir. Bu ayrım, bir uygulamanın yerine başka bir uygulamayı koymayı kolaylaştırabilir ve basit polimorfizmin temelini oluşturur. Kod, belirli bir sınıfın ayrıntısı yerine arayüzün tanımladığı davranış üzerinden kurulabilir.

interface, implements ve metot gövdesi nasıl çalışır?

interface, implements ve metot gövdesi nasıl çalışır?

Bir interface içinde metot bildirimi, davranışın adını, parametrelerini ve dönüş tipini tanımlar. Aşağıdaki örnekte send metodunun bir metin alacağı, ancak bu metnin nasıl gönderileceğinin henüz belirtilmediği görülür:

interface Notification {
    void send(String message);
}

void send(String message); satırı bir metot bildirimidir. Bu temel örnekte noktalı virgül, metodun gövdesinin arayüzde verilmediğini gösterir. Davranışın nasıl gerçekleştirileceği, bu sözleşmeyi uygulayan sınıfa bırakılır.

class EmailNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("E-posta gönderildi: " + message);
    }
}

implements Notification, EmailNotification sınıfının Notification sözleşmesini uyguladığını belirtir. @Override ise yazılan metodun arayüzdeki bildirimi karşıladığını gösterir. Süslü parantezler arasındaki bölüm, metot gövdesidir ve gerçek işlem burada gerçekleşir.

new EmailNotification().send("Merhaba"); çağrısı yapıldığında beklenen çıktı E-posta gönderildi: Merhaba olur. Buradaki gövdesiz bildirim, bütün arayüz metotları için değişmez bir kural değildir; bazı arayüz metotları gövde içerebilir. Temel kullanımda ise arayüzü davranışı tanımlayan, uygulayan sınıfı da davranışı gerçekleştiren taraf olarak düşünmek yeterlidir.

EmailNotification ve SmsNotification ile çalışan örnek

EmailNotification ve SmsNotification ile çalışan örnek

Bir arayüzün gücünü görmek için aynı Notification sözleşmesini uygulayan iki farklı sınıf tanımlayabiliriz. Her sınıf, send metodunu kendi bildirim biçimine göre çalıştırır. Aşağıdaki örnek, yalnızca Main sınıfını public yaptığı için tek dosyada çalıştırılabilir.

interface Notification {
    void send(String message);
}

class EmailNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("E-posta gönderildi: " + message);
    }
}

class SmsNotification implements Notification {
    @Override
    public void send(String message) {
        System.out.println("SMS gönderildi: " + message);
    }
}

public class Main {
    public static void main(String[] args) {
        Notification email = new EmailNotification();
        Notification sms = new SmsNotification();

        email.send("Hoş geldin");
        sms.send("Doğrulama kodun hazır");
    }
}

Beklenen çıktı

E-posta gönderildi: Hoş geldin
SMS gönderildi: Doğrulama kodun hazır

Burada email ve sms değişkenlerinin türü Notification olsa da işaret ettikleri nesneler farklıdır. email.send() çağrısı EmailNotification sınıfındaki metot gövdesini, sms.send() çağrısı ise SmsNotification sınıfındaki metot gövdesini çalıştırır. Aynı arayüz türündeki referansın farklı sınıflara ait davranışları çağırabilmesi, basit bir polimorfizm örneğidir.

Bu yapı sayesinde kodun kullandığı bölüm, bildirimin e-posta mı yoksa SMS mi olduğunu ayrıntılı biçimde bilmek zorunda kalmaz. Yalnızca Notification sözleşmesindeki send davranışına güvenir. Java'da arayüz, implements ve polimorfizm konularını kişiye özel çalışmak istersen birebir Java özel ders programı hakkında bilgi edinebilirsin.

Birden fazla arayüz ve basit polimorfizm ne sağlar?

Bir sınıf, birden fazla arayüzü aynı anda uygulayabilir. Bunun anlamı, sınıfın tek bir üst sınıftan özellik almak zorunda olması değil, birbirinden bağımsız davranış sözleşmelerini yerine getirmesidir. Örneğin bir rapor hem yazdırılabilir hem de denetlenebilir olabilir.

interface Printable {
    void print();
}

interface Auditable {
    void audit();
}

class Report implements Printable, Auditable {
    @Override
    public void print() {
        System.out.println("Rapor yazdırıldı");
    }

    @Override
    public void audit() {
        System.out.println("Rapor denetlendi");
    }
}

public class ReportDemo {
    public static void main(String[] args) {
        Report report = new Report();

        Printable printable = report;
        Auditable auditable = report;

        printable.print();
        auditable.audit();
    }
}

Beklenen çıktı

Rapor yazdırıldı
Rapor denetlendi

Report nesnesi hem Printable hem de Auditable türündeki referanslarla kullanılabilir. İlk referans yazdırma sözleşmesini, ikinci referans denetleme sözleşmesini görünür kılar. Böylece bir metot yalnızca ihtiyaç duyduğu yeteneği belirtebilir; somut sınıf daha sonra değişse bile bu sözleşmeye uyan başka bir sınıf kullanılabilir.

Çoklu arayüz uygulamayı kalıtımla eş anlamlı düşünmemek gerekir. Buradaki temel fikir, bağımsız yetenekleri tek bir sınıfta birleştirmektir. Bir sınıfın aynı anda yazdırılabilir, denetlenebilir ya da başka bir davranış sözleşmesine uygun olması gerektiğinde bu yaklaşım kodun sorumluluklarını daha açık hâle getirebilir.

Arayüz mü soyut sınıf mı? Karar çerçevesi

Arayüz, sınıfların paylaşacağı davranışı bir sözleşme olarak tanımlar. Soyut sınıf ise ortak durum, nesne oluşturma akışı ve temel uygulama içeren bir üst yapı kurabilir. Seçim, hangisinin daha güçlü olduğuna göre değil, paylaşmak istediğin şeyin bağımsız bir yetenek mi yoksa ortak bir temel mi olduğuna göre yapılır.

Ölçüt Arayüz Soyut sınıf Seçim ipucu
Amaç Bir yeteneğin veya davranışın sözleşmesini tanımlar. Ortak bir temel sınıfın iskeletini ve paylaşılan davranışlarını sunar. Bağımsız yetenek için arayüz, güçlü ortak temel için soyut sınıf düşün.
Davranış sözleşmesi Metot imzalarını belirtir, uygulamayı sınıfa bırakabilir. Soyut metotlarla zorunlu, somut metotlarla hazır davranış tanımlayabilir. Yalnızca ne yapılacağı ortaksa arayüz, nasıl yapılacağı da paylaşılacaksa soyut sınıf.
Ortak durum ve kod paylaşımı Ortak alan, kurucu ve temel uygulama paylaşımında ana araç değildir. Alanlar, kurucu ve ortak metotlarla durum ve kod paylaşabilir. Paylaşılacak durum veya başlangıç akışı varsa soyut sınıf öne çıkar.
Kalıtım ilişkisi implements ile yetenek ilişkisi kurar. extends ile ortak üst sınıftan kalıtım kurar. Yetenek ilişkisi için arayüz, ortak temel ilişkisi için soyut sınıf seçilir.
Birden fazla interface uygulama Bir sınıf birden fazla bağımsız interface uygulayabilir. Bir sınıf doğrudan tek bir üst sınıftan kalıtım alabilir. Bağımsız yetenekler birleşecekse arayüzleri ayrı tut.
Kullanım sinyalleri Bildirim göndermek veya kaydedilebilir olmak gibi yetenekler. Ortak alan, nesne oluşturma akışı veya temel algoritma. Sinyal davranış ortaklığıysa arayüz, yapı ortaklığıysa soyut sınıf.

Ortak durum, nesne oluşturma akışı veya paylaşılacak temel uygulama ağır basıyorsa soyut sınıf koşullu bir seçenek olur. Bu tercih, ortak yapının gerçekten anlamlı olduğu durumlarda değerlidir. Interface her durumda üstün değildir ve yalnızca kalıtımın başka adı sayılmamalıdır.

Karar vermek için şu üç adımı kullanabilirsin:

  1. Davranış ortaklığı: Farklı sınıflar aynı yeteneği sunuyorsa bu yeteneği bir sözleşme olarak düşün.
  2. Değişebilirlik: Uygulamanın değişmesi bekleniyorsa çağıranı somut sınıftan ayır ve arayüz üzerinden çalıştır.
  3. Birden fazla bağımsız arayüz: Bir sınıfın farklı yetenekleri ayrı ayrı taşıması gerekiyorsa her yeteneği ayrı bir sözleşme olarak değerlendir.

Bu ayrımı pekiştirmek ve Java kavram bilgini ölçmek için Java bilgi testi çözebilirsin.

Sık Sorulan Sorular

Java interface ile soyut sınıf arasındaki temel fark nedir?

Interface, sınıfların sunacağı davranışı tanımlar. Soyut sınıf ise buna ek olarak ortak alan, kurucu ve tamamlanmış metotlar içeren bir temel yapı kurabilir. İlki yetenek sözleşmesine, ikincisi ortak temele odaklanır.

Bir Java sınıfı birden fazla interface'i nasıl uygular?

Interface adları sınıf bildiriminde virgülle ayrılarak implements sonrasında yazılır. Sınıf, her sözleşmenin gerekli metotlarını uygular ve farklı yetenekleri aynı nesnede birleştirebilir.

Interface içindeki bir metot bildirimi ile metot gövdesi arasındaki fark nedir?

Metot bildirimi ad, parametre ve dönüş türünü belirtir. Metot gövdesi ise işlemin çalıştırılabilir kodudur. Gövdesiz bildirimin davranışını, uygulayan sınıf kendi metot gövdesiyle tanımlar.

Her ortak davranış için interface kullanmak gerekir mi?

Hayır. Bağımsız ve değişebilir bir yetenek için interface yararlıdır. Ortak durum, oluşturma akışı veya temel uygulama paylaşımı baskınsa soyut sınıf, daha küçük ortaklıklarda ise daha basit bir tasarım uygun olabilir.

Doğru seçim, paylaşılacak şeyin bağımsız bir davranış mı yoksa ortak bir yapı mı olduğunu netleştirmekle başlar.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara