03. 은행 계좌 만들기 (3)

728x90

03. 은행 계좌 만들기 (3)

1 입금, 출금

2 접근제어자

3> 계좌이체

4 생성자

5 this

3. 계좌이체

 지금까지 만들어 온 은행 시뮬레이션 프로그램에 송금 기능을 담당하는 transfer 메소드를 써봅시다. 메소드 오버로딩의 개념을 이용해서 BankAccount 클래스에 두 개의 transfer 메소드를 쓰고, Person 클래스에도 두 개의 transfer 메소드를 쓰겠습니다.

 

송금 메소드 작성 (BankAccount.java)

 

 송금은 계좌 - 계좌 방식으로 이루어집니다. 하지만 사용자의 편리함을 위해서 아래의 두 메소드를 만들겠습니다.

public class BankAccount {
    // 저번 과제에서의 코드를 포함해주세요!

    // 첫 번째 파라미터: 받는 사람 (Person)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(Person to, int amount) {
        // insert code here
    }

    // 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(BankAccount to, int amount) {
        // insert code here
    }
}

 

(1) 송금 성공 시 true를 리턴, 실패시 false를 리턴합니다.

(2) 송금하고자 하는 금액(amount)이 음수일 때 송금 실패입니다.

(3) amount가 잔고(balance)보다 클 때 송금 실패입니다.

(4) 나의balanceamount 만큼 줄이고, 받는사람(to)의 balanceamount만큼 늘려줍니다.

(5) 송금 성공시 아래 문구를 출력합니다.

true - from: [송금자 이름], to: [수신자 이름], amount: [송금액], balance: [송금자 잔고]

 

(6) 송금 실패시 아래 문구를 출력합니다.

false - from: [송금자 이름], to: [수신자 이름], amount: [송금액], balance: [송금자 잔고]

 

송금 메소드 작성 (Person.java)

 

 위의 룰들을 지킨 송금 메소드를 Person 클래스 내에도 만듭니다.

public class Person {
    // 저번 과제에서의 코드를 포함해주세요!

    // 첫 번째 파라미터: 받는 사람 (Person)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(Person to, int amount) {
        // insert code here
    }

    // 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
    // 두 번째 파라미터: 이체할 금액 (정수)
    // 리턴 : 성공여부 (불린)
    public boolean transfer(BankAccount to, int amount) {
        // insert code here
    }
}

 

테스트


이 실행결과가 나와야 합니다.

true - from: 말랑이, to: 다람이, amount: 200000, balance: 300000
true - from: 다람이, to: 말랑이, amount: 150000, balance: 150000
true - from: 말랑이, to: 다람이, amount: 270000, balance: 180000
true - from: 다람이, to: 말랑이, amount: 130000, balance: 290000

 

 

 

A. 해설

BankAccount 클래스

public class BankAccount {
    private int balance;
    private Person owner;
    
    public void setBalance(int newBalance) { balance = newBalance; }
    
    public int getBalanve() { return balance; }
    
    public void setOwner(Person newOwner) { owner = newOwner; }
    
    public Person getOwner() { return owner; }

    // 파라미터 : 입금할 액수(정수)
    // 리턴 : 성공여부(불린)
    boolean deposit(int amount) {
    	// 입금할 액수가 0보다 작거나 현금보유량보다 클 경우 (실패)
        if (amount < 0 || amount > owner.getCashAmount()) {
            System.out.println("입금 실패입니다. 잔고: " + balance
            + "원, 현금: " + owner.getCashAmount() + "원");
            System.out.println("false");
            return false;
        // 그 밖의 경우 (성공)
        } else {
            balance = balance + amount;
            owner.setCashAmount(owner.getCashAmount() - amount);
            System.out.println(amount +"원 입금하였습니다. 잔고: " + balance
            + "원, 현금: " + owner.getCashAmount() + "원");
            System.out.println("true");

            return true;
        }
    }

    // 파라미터 : 출금할 액수(정수)
    // 리턴 : 성공여부(불린)
    boolean withdraw(int amount) {
    	// 출금할 액수가 0보다 작거나 잔고보다 클 경우 (실패)
        if (amount < 0 || amount > balance) {
            System.out.println("출금 실패입니다. 잔고: " + balance
            + "원, 현금: " + owner.getCashAmount() + "원");
            System.out.println("false");
            return false;
        // 그 밖의 경우 (성공)
        } else {
            balance -= amount;
            owner.setCashAmount(owner.getCashAmount() + amount);
            System.out.println(amount + "원 출금하였습니다. 잔고: " + balance
            + "원, 현금: " + owner.getCashAmount() + "원");
            System.out.println("true");
            
            return true;
        }
    }
    
    public boolean transfer(BankAccount to, int amount) {
        boolean success;

        if (amount < 0 || amount > balance) {
            success = false;
        } else {
            balance -= amount;
            to.balance += amount;
            success = true;
        }

        System.out.println(success + " - from: " + owner.getName()
                + ", to: " + to.owner.getName()
                + ", amount: " + amount
                + ", balance: " + balance);
        return success;
    }
	
    // account와 account 간의 거래이므로, Person to의 정보를 to의 account 정보로 바꾸어 호출.
    public boolean transfer(Person to, int amount) { return transfer(to.getAccount(), amount); }
}

 

Person 클래스

public class Person {
    private String name;
    private int age;
    private int cashAmount;
    private BankAccount account;
    
    public String getName() { return name; }
    
    public void setName(String newName) { name = newName; }

    public int getAge() { return age; }
    
    public void setAge(int newAge) { age = newAge; }
    
    public int getCashAmount() { return cashAmount; }
    
    public void setCashAmount(int newCashAmount) { cashAmount = newCashAmount; }

    public BankAccount getAccount() { return account; }
    
    public void setAccount(BankAccount newAccount) { account = newAccount; }
    
    // account와 account 간의 거래이므로, 첫째로 BankAccount 클래스의 transfer 메소드를 써야함.
    // 둘째로 Person to의 정보를 to의 account 정보로 바꾸어 호출.
    public boolean transfer(Person to, int amount) { return account.transfer(to.getAccount(), amount); }

    // account와 account 간의 거래이므로, BankAccount 클래스의 transfer 메소드를 써야함.
    public boolean transfer(BankAccount to, int amount) { return account.transfer(to, amount); }
}

 

Main 클래스

public class Main {
    public static void main(String[] args) {
        // p1 사람 선언
        Person p1 = new Person();
        p1.setName("다람이");
        p1.setAge(23);
        p1.setCashAmount(30000);


        // a1 은행 계좌 생성
        BankAccount a1 = new BankAccount();
        a1.setBalance(100000);
	// p1의 계좌 a1, a1의 사용자 p1 연결
        p1.setAccount(a1);
        a1.setOwner(p1);
        
        // p2 사람 선언
        Person p2 = new Person();
        p2.setName("말랑이");
        p2.setAge(21);
        p2.setCashAmount(100000);
        
        // a2 은행 계좌 생성
        BankAccount a2 = new BankAccount();
        a2.setBalance(500000);
        // p2의 계좌 a2, a2의 사용자 p2 연결
        p2.setAccount(a2);
        a2.setOwner(p2);
        
        a2.deposit(30000);
        a2.withdraw(170000);
        a2.deposit(620000);
        a2.withdraw(890000);
    }
}

 

 

 

 

 

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

728x90

'💠문제 풀이 > Java 문제 풀이' 카테고리의 다른 글

06. 특가 할인 매장  (0) 2021.10.05
05. 은행 계좌 만들기 (5)  (0) 2021.10.05
04. 은행 계좌 만들기 (4)  (0) 2021.10.05
02. 은행 계좌 만들기 (2)  (0) 2021.10.05
01. 은행 계좌 만들기 (1)  (0) 2021.09.28