Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi

0
Dependency Injection nedir?

Çözüldü 2 Cevaplar 23 Gösterim Genel Kavramlar
Dependency Injection (DI) sık sık nesne yönelimli programlama (OOP) mülakat sorularında karşıma çıkıyor. Bu kavram nedir açıklayabilir misiniz?
kapalı

2 Cevap

3
En İyi Cevap

Efe güzel bir cevap vermiş. Ben de biraz daha gerçek hayat örnekleriyle açıklayayım.

Kelime anlamlarına bakalım:

Dependency: Bağımlılık
Injection: Iğne, zerk etmek

Kısa tanım; ihtiyacın olan sınıf bağımlılıklarını görünmez el (uygulama çatısı, örneğin spring framework) tarafınan oluşturulup gerekli değişkenlere atanıp senin için hazır hale getirilmesi.

Biraz daha teknik örnekle ilerleyelim.
Spring/java üzerinden anlatayım.

Bir context/scope üzerinde birbirine bağlı sınıflarımız olduğunu düşünelim.
Mesela en basit örnek; rest servis ile bir bilgi alıp o bilgiyi veri tabanına aktaracaksın. Servisden bilgi almak için bir controller sınıfın, veri tabanına bilgiyi basmak için de bir repository sınıfın olduğunu düşünelim.

class XXController {
    @GetMapping("/data")
    public String getData(String data){
        ......
    }
}

Veri tabanına atacağın sınıfı nasıl oluşturursun?

İlk seçenek

class XXController {
    @GetMapping("/data")
    public String getData(String data){
        Repository rep = new Repository()
        rep.save(data)
    }
}

Burda bir repository oluşturdun ve bir metodunu çağırdın. Senin XXController sınıfın Repository sınıfına bağımlı olduğu için bu ikisini senin hafızada yaratman yerine işlemi Spring (ya da hangi çatıyı kullanıyorsan) çatısına bırakman daha kolay ve performanslı oluyor.

class XXController {
    private @Autowired Repository rep;
    @GetMapping("/data")
    public String getData(String data){
       rep.save(data)
    }
}

Burada gördüğün @Autowired diye belirlediğin alanı Spring senin için hazırlayıp bu değişkene atayıp senin kullanımına sunuyor.

Bu işem dependency injection olarak isimlendiriliyor.

Neden kullanırsın?

  1. Hafızanın daha etkin kullanımı için
  2. Zincirleme olarak birbirine bağlı çok fazla sınıf varsa bunları daha kolay yönetebilmen için
  3. Sürekli new çağırıp hafızanın yanında performansı da kötüleştirmemek için

 

(5.5k puan)
seçti
3
İsminden de anlaşılacağı gibi, kodun veya sınıfın bağımlı olduğu değerdir.

Örneğin; Y sınıfında, X sınıfına bağımlı olan bir kod bulunuyor (bir metot veya değişken olabilir). Bunu static veya çeşitli yöntemler ile çekmek yerine bağımlılığı metodu kullanırken belirtmeliyiz. Eğer sınıfın tamamı/çoğu bir şeye bağımlıysa, const veya setter ile belirtip onun üzerinden çalışabiliriz ya da tek bir metot bağımlıysa, o metodun parametrelerinde bağımlılığını belirtebiliriz.

Açıklama veya örnekleme çok net olmadıysa aşağıdaki linkten okursanız çok net bir şekilde anlayacağınızdan eminim.

https://en.wikipedia.org/wiki/Dependency_injection#Examples
(110 puan)