Section 12/132 menit
12. Keunggulan & Kekurangan
12. Keunggulan & Kekurangan
Keunggulan
| Keunggulan | Detail |
|---|---|
| Fine-grained rendering | View hanya re-render ketika property yang benar-benar dibaca berubah — performa optimal |
| Zero boilerplate | Tidak ada @Published, tidak ada objectWillChange.send() manual |
| Nested tracking otomatis | Perubahan di nested @Observable langsung di-track tanpa subscription manual |
| Tidak butuh Combine | Zero dependency pada Combine — bisa digunakan di mana saja Swift berjalan |
| Type-safe environment | .environment(viewModel) + @Environment(ViewModel.self) — compile error jika lupa inject |
| Macro transparency | Bisa di-inspect via "Expand Macro" di Xcode — tidak ada magic tersembunyi |
| Lebih natural dengan Swift 6 | Bekerja seamless dengan @MainActor, Sendable, dan strict concurrency |
| Sederhana untuk testing | Tidak perlu setup Combine subscribers atau manage AnyCancellable |
Kekurangan
| Kekurangan | Detail |
|---|---|
| iOS 17+ only | Tidak bisa digunakan di project dengan minimum deployment target iOS 16 ke bawah |
| Hanya class | Struct tidak bisa @Observable — membatasi beberapa pola desain yang value-type oriented |
| Tidak ada built-in operator | Tidak ada debounce, throttle, merge seperti di Combine — harus implementasi manual atau kombinasi dengan AsyncSequence |
| withObservationTracking adalah fire-once | Harus daftar ulang setelah setiap onChange — pola rekursif bisa membingungkan jika tidak familiar |
| Tidak ada replay/backpressure | Tidak seperti Combine publisher yang bisa share(), multicast(), atau buffer — setiap observer mendapat state saat ini, bukan historical values |
| Debugging lebih sulit | Macro expansion membuat stack trace kurang jelas dibanding kode eksplisit |
| Tidak thread-safe otomatis | Harus kombinasikan dengan @MainActor atau actor secara eksplisit — berbeda dari anggapan awal banyak developer |