Back to blog
Backend

Apa itu Dependency Injection (DI)? Konsep Inti NestJS dan Angular

Kata 'Dependency Injection' terdengar seperti teori roket yang membosankan. Padahal, ini adalah kunci rahasia membuat arsitektur aplikasi level Enterprise.

super admin·22 Juni 2026·2 min read
Apa itu Dependency Injection (DI)? Konsep Inti NestJS dan Angular
Article Content

Analogi Membuat Mobil (Beli Mesin vs Merakit Sendiri)

Saat kamu beranjak dari *framework* pemula (seperti Express.js) menuju *framework* tingkat Enterprise perusahaan (seperti NestJS di Node.js, Angular, atau Spring Boot di Java), kamu akan disambut oleh sistem sakti bernama Dependency Injection (DI).

Untuk memahaminya, bayangkan kamu memiliki Class Mobil. Tentu mobil butuh Class Mesin agar bisa jalan.

Cara Kuno (Tanpa DI - Hardcoded)

Di cara lama, Mobil merakit mesinnya sendiri dari dalam. Jika ada kerusakan mesin, kamu harus membongkar seluruh *Class* mobil tersebut.

class Mobil {
  constructor() {
    // Mobil MENCIPTAKAN mesinnya sendiri (Ketergantungan yang kaku!)
    this.mesin = new MesinV8();
  }
}

Masalah: Bagaimana jika besok bosmu menyuruh mobil itu diganti pakai Mesin Listrik? Kamu harus merusak (mengedit ulang) kode Class Mobil-mu!

Cara Modern (Dengan Dependency Injection)

Di metode DI, Mobil menolak membuat mesinnya sendiri. Mobil hanya menyediakan "lubang colokan" (Parameter Constructor). Pabrik-lah yang bertugas menyuntikkan (Inject) mesin siap pakai dari luar ke dalam Mobil.

class Mobil {
  // Mobil tidak peduli mesin apa yang masuk, yang penting mesin!
  constructor(mesin) {
    this.mesin = mesin; 
  }
}

// Proses Injeksi (Penyuntikan) dari Luar:
const mesinListrik = new MesinListrik();
const mobilBaru = new Mobil(mesinListrik); // Injeksi lewat paramater!

Kenapa Framework Menggunakan Ini?

  1. Testing Super Mudah (Mocking): Jika kamu ingin melakukan Unit Testing pada Class Mobil, kamu tidak perlu menghubungkannya ke Database (Mesin V8) beneran. Kamu cukup menyuntikkan (Inject) "Mesin Palsu" yang hanya pura-pura berputar. Ini menghemat biaya tes.
  2. Loose Coupling (Kode Tahan Banting): Komponen (Class) di dalam sistemmu tidak ada yang "dilem" satu sama lain. Kamu bisa mencabut komponen lama dan menggantinya dengan versi baru tanpa memicu rentetan *Error* berantai.

Di dalam framework besar seperti NestJS, sistem yang disebut IoC Container akan membaca semua file-mu, menyiapkan puluhan koneksi Database/API secara otomatis, lalu menyuntikkannya secara gaib ke setiap Controller yang membutuhkannya tanpa perlu kamu ketik manual (new Mesin())!

Mau langsung pakai template?

Jelajahi template gratis dan premium di TampilKit untuk mempercepat proses development project kamu.

Browse Templates