Java, IntelliJ/JAVA
JAVA Class 클래스 정리
반응형
클래스(Class)
- 형식
public class Person {
String name;
int age;
int cashAmount;
BankAccount account;
}
은행 입출금 코드 연습
더보기
은행 입출금 코드 연습
public class BankDriver {
public static void main(String[] args) {
//사람 선언
// Person01_before_생성자 p1 = new Person01_before_생성자();
// p1.setName("고라니");
// p1.setAge(28);
// p1.setCashAmount(300000);
Person p1 = new Person("김신의", 28);
p1.setCashAmount(30000);
// 은행 계좌 계설
BankAccount a1 = new BankAccount(p1);
a1.setBalance(100000);
// 두 객체의 관계 설정
p1.setAccount(a1);
// a1.setOwner(p1);
// 3. p2,a2
// Person01_before_생성자 p2 = new Person01_before_생성자();
Person p2 = new Person("문종모", 28, 100000);
// p2.setName("park");
// p2.setCashAmount(100000);
BankAccount a2 = new BankAccount(500000, p2);
// a2.setBalance(500000);
p2.setAccount(a2);
// a2.setOwner(p2);
// 4.
/* a2.deposit(30000);
a2.withdraw(170000);
a2.deposit(620000);
a2.withdraw(890000);
System.out.println(p1.getAccount().getBalance());
System.out.println(a1.getOwner().getName());
// 테스트
System.out.println(p1.getName() + "의 계좌 잔액: " + p1.getAccount().getBalance());*/
// 계좌 이체 테스트
a2.transfer(a1, 200000);
a1.transfer(p2, 150000);
p2.transfer(a1, 270000);
p1.transfer(p2, 130000);
}
}
public class Person {
private String name;
private int age;
private int cashAmount;
private BankAccount account;
public Person(String pName, int pAge) {
// 코드를 입력하세요
name = pName;
age = pAge;
cashAmount = 0;
if (pAge < 0){
age = 12;
}
}
public Person(String pName, int pAge, int pCashAmount) {
// 코드를 입력하세요
name = pName;
age = pAge;
cashAmount = pCashAmount;
if (pAge < 0){
age = 12;
}
if (pCashAmount < 0){
cashAmount = 0;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int nage) {
if (age >= 0){
nage = age;
}
}
public int getCashAmount() {
return cashAmount;
}
public void setCashAmount(int cashAmount) {
this.cashAmount = cashAmount;
}
public BankAccount getAccount() {
return account;
}
public void setAccount(BankAccount account) {
this.account = account;
}
// 첫 번째 파라미터: 받는 사람 (Person)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
// 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);
}
}
public class BankAccount {
private int balance;
private Person owner;
public BankAccount(int pBalance) {
// 코드를 입력하세요
balance = pBalance;
if (balance < 0){
balance = 0;
}
}
public BankAccount(Person pOwner) {
// 코드를 입력하세요
balance = 0;
owner = pOwner;
}
public BankAccount(int pBalance, Person pOwner) {
// 코드를 입력하세요
balance = pBalance;
owner = pOwner;
if (pBalance<0){
balance =0;
}
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public Person getOwner() {
return owner;
}
public void setOwner(Person owner) {
this.owner = owner;
}
// 파라미터 : 입금할 액수(정수)
// 리턴 : 성공여부(불린)
boolean deposit(int amount) {
// 1. write code here
if (owner.getCashAmount() < amount || amount < 0) {
System.out.println("입금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
System.out.println("false");
return false;
}
balance += amount;
owner.setCashAmount(owner.getCashAmount() - amount);
System.out.println(amount + "원 입금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
System.out.println("true");
return true;
}
public boolean deposit(double amount, double exchangeRate) {
return deposit((int) (amount * exchangeRate));
}
// 파라미터 : 출금할 액수(정수)
// 리턴 : 성공여부(불린)
boolean withdraw(int amount) {
// 2. write code here
if (amount < 0 || balance < amount) {
System.out.println("출금 실패입니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
System.out.println("false");
return false;
}
balance -= amount;
owner.setCashAmount(owner.getCashAmount() + amount);
System.out.println(amount + "원 출금하였습니다. 잔고: " + balance + "원, 현금: " + owner.getCashAmount() + "원");
System.out.println("true");
return true;
}
// 첫 번째 파라미터: 받는 사람 (Person)
// 두 번째 파라미터: 이체할 금액 (정수)
// 리턴 : 성공여부 (불린)
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);
}
}
- 메소드 오버로딩 정리
Method Overloading 은 클래스 내에 같은 이름의 메소드를 2개 이상 정의 할 수 있게 해주는 기능이다.
같은 이름이라도 파라미터 구성이 다르면 JAVA는 알아서 구분을 할 수 있다.
public class Calculator {
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
Calculator c = new Calculator();
System.out.println(c.add(2, 4)); // test 1
System.out.println(c.add(2, 4, 8)); // test 2
System.out.println(c.add(3.14, 2.54)); // test 3
}
}
- 선언 위치에 따른 변수의 종류
변수의 종류 | 선언 위치 | 언제 생성 됨? |
인스턴스 변수(iv, instance variable) | 클래스영역 | 클래스가 메모리에 올라갈 때 |
클래스 변수(cv, class variable) | 인스턴스가 생성되었을 때 | |
로컬 변수(lv, local variable) | 클래스 영역 이외의 영역 (매서드 생성자, 초기화 블럭 내부) |
변수 선언문이 수행됐을 때 |
- 생성자 정의
생성자 : 인스턴스를 만들고 인스턴스의 변수(속성)들을 초기화해준다.
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
public static void main(String[] args) {
Person p1 = new Person("김신의", 27);
}
- 오버로딩 가능하다.
public Person(String pName, int pAge) {
name = pName;
age = pAge;
}
public Person(String pName) {
name = pName;
age = 12; // 12살을 기본 나이로 설정
}
public static void main(String[] args) {
Person p1 = new Person("김신의", 27); // 첫 번째 생성자
Person p2 = new Person("박윤석"); // 두 번째 생성자
}
- this. / this() 정리
- this. : 인스턴스 자신을 가르키는 참조 변수이다. (static 매서드에서는 this 를 사용하지 못한다.)
- this() : 같은 클래스의 다른 생성자를 호출할 때 사용한다.
예시)
public class Person {
private String name;
private String email;
private String phoneNumber;
public Person(String name) {
this(name, null);
}
public Person(String name, String email) {
this(name, email, null);
}
public Person(String name, String email, String phoneNumber) {
this.name = name;
this.email = email;
this.phoneNumber = phoneNumber;
}
}
반응형
'Java, IntelliJ > JAVA' 카테고리의 다른 글
Java split, substring 문자열 자르기 (0) | 2021.06.24 |
---|---|
JAVA 별찍기 문제 (0) | 2021.06.24 |
Java 내용 총 정리 (0) | 2021.06.23 |
Java, intelliJ 문법 정리 (0) | 2021.06.05 |
[Java] IntelliJ IDEA 자주 쓰는 단축키 모음, 단축구문 모음 (0) | 2021.06.03 |
댓글