Languages/Java

[자바 객체 지향 프로그래밍] 02. 객체 설계하기

Dev다D 2021. 1. 27. 19:37
반응형

03. 접근 제어자 연습

 

'접근 제어자' 강의에서 한 것처럼 Person 클래스와 BankAccount 클래스의 모든 인스턴스 변수들을 private으로 설정해주세요. 각 변수에 해당하는 'setter'(예: setName)과 'getter'(예: getName) 메소드를 써주고, BankDriver에서 오류가 나지 않도록 적절히 적용해주세요!

프로그램을 수정하여 오류가 나오지 않도록 하고, 테스트 케이스는 유지하여 이전 문제와 같이 아래의 출력값이 나오도록 해야 합니다.

 

> 30000원 입금하였습니다. 잔고: 530000원, 현금: 70000원

> true

> 170000원 출금하였습니다. 잔고: 360000원, 현금: 240000원

> true

> 입금 실패입니다. 잔고: 360000원, 현금: 240000원

> false

> 출금 실패입니다. 잔고: 360000원, 현금: 240000원

> false

 


 과제를 하면서 getter와 setter의 개념을 알 수 있었고 응용해서 코딩할 수 있게되었다.

public class Person01 {

    private String name;
    private int age;
    private int cashAmount;
    private BankAccount01 account;

    public void setName(String newName) {
        name = newName;
    }

    public String getName() {
        return name;
    }

    public void setAge(int newAge) {
        if (newAge >= 0) {
            age = newAge;
        }
    }

    public int getAge() {
        return age;
    }

    public void setCashAmount(int newCashAmount) {
        if (newCashAmount >= 0) {
            cashAmount = newCashAmount;
        }
    }

    public int getCashAmount() {
        return cashAmount;
    }

    public void setAccount(BankAccount01 newAccount) {
            account = newAccount;
    }

    public BankAccount01 getAccount() {
        return account;
    }
}

public class BankAccount01 {
    private int balance;
    private Person01 owner;


    public void setBalance(int newBalance) {
        if (newBalance >= 0) {
            balance = newBalance;
        }
    }

    public int getBalance() {
        return balance;
    }

    public void setOwner(Person01 newOwner) {
        owner = newOwner;
    }

    public Person01 getOwner() {
        return owner;
    }

    boolean deposit (int amount) {
        if((amount >= 0) && (owner.getCashAmount() > amount)) {
            owner.setCashAmount(owner.getCashAmount() - amount);
            balance = balance + amount;
            System.out.println(amount + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
            return true;
        } else {
            System.out.println("입금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
            return false;
        }
    }

    boolean withdraw (int amount) {
        if((amount >= 0 && balance > amount)) {
            balance = balance - amount;
            owner.setCashAmount(owner.getCashAmount() + amount);
            System.out.println(amount + "원 출금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
            return true;
        } else {
            System.out.println("출금실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
            return false;
        }
    }
}
public class BankDriver01 {
    public static void main(String[] args) {
        // 사람 선언
        Person01 p1 = new Person01();
        p1.setName("김신의");
        p1.setAge(28);
        p1.setCashAmount(30000);

        // 은행 계좌 생성
        BankAccount01 a1 = new BankAccount01();
        a1.setBalance(10000);

        p1.setAccount(a1);
        a1.setOwner(p1);

        Person01 p2 = new Person01();
        p2.setName("김성실");
        p2.setAge(29);
        p2.setCashAmount(100000);

        BankAccount01 a2 = new BankAccount01();
        a2.setBalance(500000);

        p2.setAccount(a2);
        a2.setOwner(p2);

        System.out.println(a2.deposit(30000));
        System.out.println(a2.withdraw(170000));
        System.out.println(a2.deposit(300000));
        System.out.println(a2.withdraw(450000));
    }
}

 

 


본 내용은 Codeit의  '자바 기초' 강의를
참고하여 작성한 내용입니다.

 

반응형