계좌 이체
지금까지 만들어 온 은행 시뮬레이션 프로그램에 송금 기능을 담당하는 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) 나의balance를 amount 만큼 줄이고, 받는사람(to)의 balance를 amount만큼 늘려줍니다.
(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
public class BankAccount {
private int balance;
private Person owner;
public void setBalance(int newBalance) {
if (newBalance >= 0) {
balance = newBalance;
}
}
public int getBalance() {
return balance;
}
public void setOwner(Person newOwner) {
owner = newOwner;
}
public Person getOwner() {
return owner;
}
boolean deposit(int amount) {
if (amount < 0 || owner.getCashAmount() < amount) {
System.out.println("입금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
return false;
}
balance += amount;
owner.setCashAmount(owner.getCashAmount() - amount);
System.out.println(amount + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
return true;
}
// 파라미터 : 출금할 액수(정수)
// 리턴 : 성공여부(불린)
boolean withdraw(int amount) {
if (amount < 0 || balance < amount) {
System.out.println("출금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
return false;
}
balance -= amount;
owner.setCashAmount(owner.getCashAmount() + amount);
System.out.println(amount + "원 출금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
return true;
}
// 첫 번째 파라미터: 받는 사람 (Person)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
public boolean transfer(Person to, int amount) {
return transfer(to.getAccount(), amount);
}
// 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
public boolean transfer(BankAccount to, int amount) {
boolean success;
if (amount < 0 || balance < amount) {
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;
}
}
public class Person {
private String name;
private int age;
private int cashAmount;
private BankAccount 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(BankAccount newAccount) {
account = newAccount;
}
public BankAccount getAccount() {
return account;
}
// 첫 번째 파라미터: 받는 사람 (Person)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
public boolean transfer(Person to, int amount) {
return account.transfer(to.getAccount(), amount);
}
// 첫 번째 파라미터: 받는 사람의 계정 (BankAccount)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
public boolean transfer(BankAccount to, int amount) {
return account.transfer(to, amount);
}
}
public class Main {
public static void main(String[] args) {
// 사람 1
Person p1 = new Person();
p1.setName("김신의");
p1.setAge(28);
p1.setCashAmount(30000);
// 은행 계좌 1
BankAccount a1 = new BankAccount();
a1.setBalance(100000);
p1.setAccount(a1);
a1.setOwner(p1);
// 사람 2
Person p2 = new Person();
p2.setName("문종모");
p2.setAge(25);
p2.setCashAmount(100000);
// 은행 계좌 2
BankAccount a2 = new BankAccount();
a2.setBalance(500000);
p2.setAccount(a2);
a2.setOwner(p2);
// 계좌 이체 테스트
a2.transfer(a1, 200000);
a1.transfer(p2, 150000);
p2.transfer(a1, 270000);
p1.transfer(p2, 130000);
}
}
본 내용은 Codeit의 '자바 기초' 강의를
참고하여 작성한 내용입니다.
'Languages > Java' 카테고리의 다른 글
[자바 객체 지향 프로그래밍] 02. 객체 설계하기 (0) | 2021.01.28 |
---|---|
[자바 객체 지향 프로그래밍] 02. 객체 설계하기 (0) | 2021.01.28 |
[자바 객체 지향 프로그래밍] 02. 객체 설계하기 (0) | 2021.01.27 |
[자바 객체 지향 프로그래밍] 01. 객체 만들기 (0) | 2021.01.21 |
[자바 왕기초] 05. 배열 (0) | 2021.01.19 |