package CHAPTER05;

class BankAccount {
    private double balance; // 외부에서 직접 접근 불가

    // 생성자
    public BankAccount(double initialBalance) {
        if (initialBalance >= 0) {
            this.balance = initialBalance;
        } else {
            System.out.println("초기 잔액은 0 이상이어야 합니다.");
            this.balance = 0;
        }
    }

    // 잔액 조회 (getter)
    public double getBalance() {
        return balance;
    }

    // 입금 (setter 역할)
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
            System.out.println(amount + "원이 입금되었습니다. 현재 잔액: " + balance);
        } else {
            System.out.println("유효한 금액을 입금하세요.");
        }
    }

    // 출금 (유효성 검사 포함)
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
            System.out.println(amount + "원이 출금되었습니다. 현재 잔액: " + balance);
        } else {
            System.out.println("출금할 수 없는 금액입니다.");
        }
    }
}

public class EncapsulationAccess {
    public static void main(String[] args) {
        BankAccount account = new BankAccount(5000);
        account.deposit(2000);
        account.withdraw(3000);
        System.out.println("최종 잔액: " + account.getBalance());

        // account.balance = 10000; // 오류! private 필드 직접 접근 불가
    }
}
