💠문제 풀이/Java 문제 풀이

05. 은행 계좌 만들기 (5)

2021. 10. 5. 18:36
728x90

05. 은행 계좌 만들기 (5)

1 입금, 출금

2 접근제어자

3 계좌이체

4 생성자

5> this

5. this

일반 메소드에서의 사용

 

 우리가 Person클래스에서 만든 setName메소드의 파라미터 이름(pName) name으로 바꾸고 이 클래스로 생성된 인스턴스 변수 namethis을 사용해서 바꾸어 변수 name과 파라미터 변수 name를 한눈에 구별할 수 있습니다.

 

 일반 메소드에서 모두 this를 사용하여 바꿔보세요.

 

생성자에서의 사용

 

 생성자에서도 동일하게 모두 this를 사용하여 적용 가능합니다. 바꿔보세요!


A. 최종 해설

BankAccount 클래스

public class BankAccount {
    private int balance;
    private Person owner;

    public void setBalence(int balence) {
        this.balance = balence;
    }

    public int getBalence() {
        return balance;
    }

    public void setOwner(Person owner) {
        this.owner = owner;
    }

    public Person getOwner() {
        return owner;
    }

    boolean deposit(int amount) {
        if (amount >= 0 && amount <= owner.getCashAmount()) {
            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;
        }
    }

    boolean withdraw(int amount) {
        if (amount >= 0 && 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 boolean transfer(BankAccount to, int amount) {
        boolean success;
        if (amount >= 0 && amount <= balance) {
            balance -= amount;
            to.balance += amount;
            success = true;
        } else {
            success = false;
        }
        System.out.println(success + " - from: " + owner.getName() + ", to: " + to.owner.getName()
                + ", amount: " + amount + ", balance: " + balance);
        return success;
    }

    public boolean transfer(Person to, int amount) {
        return transfer(to.getAccount(), amount);
    }

    public BankAccount(int balance) {
        this.balance = balance;
        if (balance < 0) {
            this.balance = 0;
        }
    }

    public BankAccount(Person owner) {
        this.owner = owner;
        balance = 0;
    }

    public BankAccount(int balance, Person owner) {
        this.balance = balance;
        if (balance < 0) {
            this.balance = 0;
        }
        this.owner = owner;
    }
}

 

Person 클래스

public class Person {
    private String name;
    private int age;
    private int cashAmount;
    private BankAccount account;

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

    public int getAge() {
        return age;
    }

    public void setName(String name) { this.name = name; }

    public String getName() {return name; }

    public void setCashAmount(int cashAmount) { this.cashAmount = cashAmount; }

    public int getCashAmount() { return cashAmount; }

    public void setAccount(BankAccount account) { this.account = account; }

    public BankAccount getAccount() {
        return account;
    }

    public boolean transfer(Person to, int amount) {
        return account.transfer(to, amount);
    }

    public boolean transfer(BankAccount to, int amount) {
        return account.transfer(to, amount);
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        if (age < 0) {
            this.age = 12;
        }
        cashAmount = 0;
    }
    
    public Person(String name, int age, int cashAmount) {
        this.name = name;
        this.age = age;
        if (age < 0) {
            this.age = 12;
        }
        this.cashAmount = cashAmount;
        if (cashAmount < 0) {
            this.cashAmount = 0;
        }
    }

}

 

Main 클래스

public class BankDrive {
    public static void main(String[] args) {

        Person p1 = new Person("다람이", 23);
        p1.setCashAmount(30000);

        Person p2 = new Person("말랑이", 21, 100000);

        BankAccount a1 = new BankAccount(p1);
        a1.setBalence(100000);

        BankAccount a2 = new BankAccount(500000, p2);

        System.out.println(a2.transfer(a1, 200000));
        System.out.println(a1.transfer(p2, 150000));
        System.out.println(p2.transfer(a1, 270000));
        System.out.println(p1.transfer(p2, 130000));;
    }
}

 

 

 

 

 

출처 | 코드잇 (자바 기초)

728x90