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