Setelah membangun sistem perpustakaan, kita beralih ke aplikasi yang relevan untuk pengguna pribadi: Aplikasi Keuangan Pribadi. Proyek ini mencatat pemasukan dan pengeluaran, mengelola anggaran bulanan per kategori, dan menghasilkan laporan ringkasan serta analisis persentase. Keterampilan yang dilatih meliputi pengelompokan data, agregasi, dan validasi input numerik dan tanggal. Aplikasi ini mengasah kemampuan mengelola data yang saling berhubungan: transaksi terkait kategori dan bulan, anggaran membandingkan target dengan realisasi. Setiap Bagian menghasilkan program yang dapat dijalankan dan diuji, sehingga kita dapat memverifikasi setiap kemampuan baru sebelum menambah fitur berikutnya.
Tujuan Proyek #
Aplikasi keuangan pribadi yang akan kita bangun mendukung operasi berikut:
- Mencatat transaksi pemasukan dan pengeluaran beserta tanggal, jumlah, dan kategori.
- Menetapkan anggaran bulanan per kategori dan membandingkannya dengan realisasi.
- Menghasilkan laporan ringkasan bulanan: total pemasukan, pengeluaran, dan saldo.
- Menganalisis pengeluaran per kategori beserta persentasenya.
- Menyimpan dan memuat data ke file JSON dengan validasi input.
Setiap operasi memvalidasi format dan batas nilai: tanggal harus ISO, jumlah harus positif dan di bawah batas wajar, kategori hanya huruf kecil. Pesan galat yang spesifik membantu pengguna memperbaiki input tanpa menebak penyebabnya.
Perilaku yang Diharapkan #
Contoh sesi pemakaian menampilkan laporan bulanan setelah beberapa transaksi dimasukkan:
java -jar keuangan.jar tambah --pemasukan 5000000 2026-01-05 gaji
java -jar keuangan.jar tambah --pengeluaran 750000 2026-01-08 makan
java -jar keuangan.jar laporan --bulan 2026-01Output yang Dihasilkan:
Pemasukan : Rp5.000.000
Pengeluaran: Rp750.000
Saldo : Rp4.250.000Aplikasi memformat angka Rupiah dengan pemisah ribuan berupa titik, sehingga mudah dibaca manusia. Format ini menjadi kontrak antara aplikasi dan pengguna di seluruh laporan.
Teknologi dan Stack #
Proyek ini menggunakan peranti berikut:
| Komponen | Versi | Tujuan |
|---|---|---|
| Bahasa | Kotlin 2.0.21 | enum, data class, koleksi dengan groupBy |
| Pengelolaan waktu | java.time.LocalDate | Validasi format ISO dan perhitungan periode bulan |
| Build tool | Gradle 8.x dengan Kotlin DSL | Struktur modular, test runner |
| Pengujian | kotlin.test | Standar resmi, ringkas |
| Penyimpanan | File JSON lokal | Sederhana, dapat diperiksa manual |
| Tipe nominal | Long | Presisi penuh untuk nilai uang, tanpa pembulatan Double |
Proyek ini tidak membutuhkan database eksternal; penyimpanan JSON cukup untuk skala pengguna pribadi. Untuk skala multi-pengguna, database SQLite atau PostgreSQL akan diperkenalkan di proyek REST API Manajemen Tugas.
Prasyarat #
Pembaca diharapkan telah menyelesaikan chapter berikut:
- Section Object-Oriented Programming:
enum classdandata class, - Section Error Handling:
Result<T>danrequire(), - Section Collections:
filter,map,groupBy, dansumOf, - Section Strings: format string dan
String.format()untuk pemisah ribuan, - Proyek Sistem Manajemen Perpustakaan: pemodelan domain multi-entitas dan persistensi JSON.
Tanpa prasyarat tersebut, sebaiknya pelajari dahulu section atau proyek terkait sebelum melanjutkan.
Arsitektur #
Inti proyek ini adalah dua entitas berhubungan yang diatur oleh satu layanan agregat. Transaksi menyimpan referensi ke kategori sebagai string, bukan objek. Anggaran adalah pasangan (bulan, kategori) dengan batas. Relasi kedua entitas ini dikelola oleh class BukuKeuangan yang menjadi facade untuk semua operasi pencatatan, anggaran, dan laporan.
Layanan BukuKeuangan menjaga invariant: nominal selalu positif Long, kategori selalu huruf kecil, dan tanggal memakai format ISO yyyy-MM-dd. Lapisan agregasi memakai operator koleksi groupBy dan sumOf untuk menghasilkan laporan tanpa menambah state baru, sehingga pemrosesan tetap fungsional dan mudah diuji.
Struktur Bagian #
Proyek ini dikerjakan dalam empat bagian berurutan:
| Bagian | Yang Dikerjakan | Hasil yang Diharapkan |
|---|---|---|
| 1. Pencatatan Transaksi | Model Transaksi, validasi nominal, perintah tambah | Transaksi tersimpan di memori dan dapat ditampilkan |
| 2. Kategori dan Anggaran | Enum JenisTransaksi, model Anggaran, perbandingan realisasi | Anggaran membandingkan target dengan realisasi per kategori |
| 3. Laporan dan Analisis | groupBy bulan, sumOf, persentase per kategori | Laporan bulanan menampilkan saldo, total, dan persentase |
| 4. Penyimpanan dan Validasi | Serialisasi JSON, validasi input lengkap | Data tersimpan antar sesi; semua input divalidasi sebelum disimpan |
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap Bagian dibangun di atas Bagian sebelumnya. Setelah Bagian 4 selesai, kita siap melangkah ke proyek REST API Manajemen Tugas yang membawa kita ke arsitektur client-server dengan Ktor. Disiplin menjaga tipe nominal sebagai Long dan validasi tanggal sejak awal akan terbawa sebagai kebiasaan baik ke proyek berikutnya yang berinteraksi dengan database dan layanan eksternal.
Referensi Lanjutan #
- Kotlin documentation home — halaman utama dokumentasi Kotlin sebagai rujukan fitur yang dipakai di proyek keuangan pribadi
- Get started with Kotlin — panduan memulai proyek Kotlin untuk menerapkan fondasi yang dipakai di seluruh bagian proyek
Bangun pencatatan transaksi pemasukan/pengeluaran dengan saldo akumulatif dan format Rupiah.
Buka → # Bagian 2: Kategori dan AnggaranTambahkan kategori transaksi dan anggaran bulanan per kategori untuk melacak realisasi pengeluaran.
Buka → # Bagian 3: Laporan dan AnalisisBangun laporan ringkasan bulanan dan analisis persentase pengeluaran per kategori.
Buka → # Bagian 4: Penyimpanan dan ValidasiTambahkan penyimpanan ke file JSON dan validasi input tanggal ISO, jumlah, dan kategori.
Buka →