import java.util.List;

/**
 * Kontrak penyimpanan kontak — pola DAO (Data Access Object).
 * DaftarKontak hanya mengenal antarmuka ini, sehingga jenis penyimpanan
 * bisa ditukar (memori, berkas, database) tanpa menyentuh kode lain.
 */
public interface KontakDao {

    /** Memuat seluruh kontak yang tersimpan. */
    List<Kontak> muatSemua() throws PersistensiGagalException;

    /** Menyimpan kontak baru ke penyimpanan. */
    void tambah(Kontak kontak) throws PersistensiGagalException;

    /** Menimpa kontak lama berdasarkan id dengan data baru. */
    void perbarui(Kontak kontak) throws PersistensiGagalException;

    /** Menghapus kontak berdasarkan id dari penyimpanan. */
    void hapus(int id) throws PersistensiGagalException;
}
