라이브러리: 자바의 기본 내장 기능
(ex: system: 화면 출력, Date: 날짜, Math: 수학적 기능 등)
*computer - OS - Java - API - Java Program - UI or API
API(Application Programming Interface): 자바를 응용해서 프로그램밍적으로 실행되는 프로그램을 만들기 위해 사용되는 조작 방법
UI(User Interface): 사람이 프로그램을 조작하기 위한 조작 장치
*자바 문서 보는 법
검색어: API documentation java (버전)
⇒ https://docs.oracle.com/javase/8/docs/api/ 에 접속하여 원하는 기능 찾아서 참고
*13.3. 자바 문서 보는 법 - 클래스
클래스: 서로 연관된 변수와 메소드를 모아서 이름을 붙인 것
ClassApp.class(일회적인 작업)
public class ClassApp {
public static void main(String[] args) {
System.out.ptinln(Math.PI);
// Math: class, PI: 변수
System.out.ptinln(Math.floor(1.6)); // 1.0
System.out.ptinln(Math.ceil(1.6)); // 2.0
}
}
*13.4. 자바 문서 보는 법 - 인스턴스
인스턴스: 클래스 복제본(다른 이름으로 저장) 생성하기
InstanceApp.class(여러 파일 작업하거나 후속 작업 있는 경우)
import java.io.PrintWriter;
public class ClassApp {
public static void main(String[] args) {
PrintWriter p1 = new PrintWriter("result1.txt");
// p1: 변수의 이름, new: 복제본 생성, PrintWriter("저장하고 싶은 파일의 이름")
// new~부터의 빨간 밑줄을 없애기 위해서는 예외를 알아야 하는데 아직 예외를 배우지 않았으므로
Add throws deciaration 클릭 - iOExcaption - java.io 클릭
p1.write("Hello 1");
p1.close();
// 새로운 클래스를 만들어서 거기 문자를 출력했으니 마지막에는 해당 클래스를 닫아 줘야 함
PrintWriter p2 = new PrintWriter("result2.txt");
p2.write("Hello 2");
p2.close();
}
}
⇒ 실행하고 refresh 해 보면 result1.txt, result2.txt가 생김
⇒ https://docs.oracle.com/javase/8/docs/api/ 에 클래스를 검색했을 때 Constructor가 있다면 인스턴스를 사용할 수 있음
*13.5. 자바 문서 보는 법 - 상속
상속: 자식 클래스가 부모 클래스를 확장(extend)하여 부모 클래스 안의 변수, 메소드를 사용할 수 있게 함
java.lang.Object (할아버지)
java.io.Writer (부모)
java.io.PrintWriter (자식)
PrintWriter p1 = new PrintWriter("result1");
p1.toString()
// 메소드 .toString은 PrintWriter, Writer에는 없는 기능이지만 Object에는 있는 기능이므로
이를 상속받은 PrintWriter에서도 쓸 수 있음
p1.Write("Hello World")
// 메소드 Write는 PrintWriter, Writer에 모두 존재하는 기능임 이때는 PrintWriter 기준으로 사용됨(= override오버라이드)
어떤 상속 관계를 가지고 있는지 확인하는 법
= 알고 싶은 클래스 드래그 후 오른쪽 마우스 버튼 - Open Type Hierarchy
⇒ https://docs.oracle.com/javase/8/docs/api/ 의 tree를 보면 모든 클래스에 대한 상속 관계 확인 가능
*14.2. 나의 앱 만들기 - 기본 기능 구현
<상황>
나는 물건을 판다
판 물건의 10%는 부가가치세이다
물건을 팔기 위해 사용된 비용은 물건값의 30%이다
이익은 5:3:2로 배당한다
MyApp.project
AccountingApp.class
public class AccountingApp {
public static void main(String[] args) {
system.out.println("Value of supply : "+10000.0);
system.out.println("VAT : "+ (10000.0*0.1) );
system.out.println("Total : "+ (10000.0 + 10000.0*0.1) );
system.out.println("Expense : "+ (10000.0*0.3) );
system.out.println("Income : "+ (10000.0 - 10000.0*0.3) );
system.out.println("Dividend 1 : "+ (10000.0 - 10000.0*0.3) * 0.5 );
system.out.println("Dividend 2 : "+ (10000.0 - 10000.0*0.3) * 0.3 );
system.out.println("Dividend 3 : "+ (10000.0 - 10000.0*0.3) * 0.2 );
// ⇒ 10000.0을 선택한 뒤에 search or Edit - Fine/Replace...를 클릭하면 값을 바꿀 수 있음
}
}
*14.3. 나의 앱 만들기 - 변수 도입
한 번에 변수화 시키기: 변수화 시킬 부분을 드래그해서 Refactor - Extract Local Variable... - 변수 이름 지정 후 OK
(드래그는 1곳만 해도 됨)
MyApp.project
AccountingApp.class
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = 12345.0
// (2) 변수화 시켰을 때 자동 생성됨(현재 계산을 어렵게 하기 위해 10000.0 → 12345.0 수정해 놓은 상태였음)
double vatRate = 0.1;
double expenseRate = 0.3; // 얘를 바꿀 때는 Dividend 2의 0.3 배당률까지 바뀌지 않게 수동으로 바꿔 줌
system.out.println("value of supply : "+valueOfSupply);
system.out.println("VAT : "+ (valueOfSupply*vatRate) );
system.out.println("Total : "+ (valueOfSupply + valueOfSupply*vatRate) );
system.out.println("Expense : "+ (valueOfSupply*expenseRate) );
system.out.println("Income : "+ (valueOfSupply - valueOfSupply*expenseRate) );
system.out.println("Dividend 1 : "+ (valueOfSupply - valueOfSupply*expenseRate) * 0.5 );
system.out.println("Dividend 2 : "+ (valueOfSupply - valueOfSupply*expenseRate) * 0.3 );
system.out.println("Dividend 3 : "+ (valueOfSupply - valueOfSupply*expenseRate) * 0.2 );
// (1) 10000.0을 선택한 뒤에 search or Edit - Fine/Replace...를 클릭하면 값을 바꿀 수 있음
}
}
↓ 깔끔하게 한 번 더 수정해 볼까용
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = 12345.0
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend 1 = income * 0.5;
double dividend 2 = income * 0.3;
double dividend 3 = income * 0.2;
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
system.out.println("Dividend 1 : " + dividend 1);
system.out.println("Dividend 2 : " + dividend 2);
system.out.println("Dividend 3 : " + dividend 3);
}
}
*14.4. 나의 앱 만들기 - 입력값 도입
(1) 입력값 주기
⇒ 재생 버튼 옆 ▼ 클릭 - Run configurations - AccountingApp - Arguments - Program Arguments에 입력값 입력 후 Name 수정 해 주고 Apply - 코드 수정
⇒ 다른 값도 넣고 싶다면 AccountingApp - 입력값 파일 duplicate(복사) 한 후에 Arguments에 새로운 값 넣으면 됨
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = Double.parseDouble(args[0]); // 수정한 내용
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend 1 = income * 0.5;
double dividend 2 = income * 0.3;
double dividend 3 = income * 0.2;
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
system.out.println("Dividend 1 : " + dividend 1);
system.out.println("Dividend 2 : " + dividend 2);
system.out.println("Dividend 3 : " + dividend 3);
}
}
(2) 이클립스 안 켜도고 사용하고 싶다면
⇒ 현재 이클립스 프로젝트의 경로 따기(프로젝트 오른쪽 마우스 - Properties - Location 복사) - ctrl + R - cmd 접속
⇒ cd "경로 붙여 넣기"
⇒ dir 엔터(Accounting.class 컴파일하는 과정임!)
(이때 해당 .class가 안 뜬다면 javac AccountingApp.java 엔터 후 다시 시도)
⇒ java AccountingApp 입력값 엔터
AccountingApp.class 파일만 usb나 메일에 보내 놓고 실행하면 다른 컴퓨터에서도 사용 가능함!
(단, java가 깔려 있다는 전제하에)
(3) java가 없는 다른 컴퓨터에서도 사용하고 싶은데요
launch4j 설치 후 사용 가능함
*14.6. 나의 앱 만들기 - 조건문
<상황>
income이 10,000원보다 작을 때는 1이 이익을 다 가지고 가고
10,000원보다 크면 5:3:2로 나누고 싶다
AccountingIFApp.java, AccntingIFUnder10000App.java 2가지 파일을 생성함
AccountingIFApp.java
⇒ Run as에서 arguments(입력값)을 넣고 실행함 // 50000, 5000으로 실행해 볼 것
public class AccountingIFApp {
public static void main(String[] args) {
double valueOfSupply = Double.parseDouble(args[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend 1;
double dividend 2;
double dividend 3;
if(income > 10000.0) {
dividend 1 = income * 0.5;
dividend 2 = income * 0.3;
dividend 3 = income * 0.2;
} else {
dividend 1 = income *1.0;
dividend 2 = income * 0;
dividend 3 = income * 0;
}
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
system.out.println("Dividend 1 : " + dividend 1);
system.out.println("Dividend 2 : " + dividend 2);
system.out.println("Dividend 3 : " + dividend 3);
}
}
*14.7. 나의 앱 만들기 - 배열
AccountingApp.java 를 복사해서 AccountingArrayApp.java로 수정함!
(배열은 조건문 뒤에 배우는 과정이 아니고 다른 기능이기 때문입니당)
public class AccountingArrayApp {
public static void main(String[] args) {
double valueOfSupply =Double.parseDouble(args[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
// double rate1 = 0.5;
// double rate2 = 0.3;
// double rate3 = 0.2;
// double dividend 1 = income * rate1;
// double dividend 2 = income * rate2;
// double dividend 3 = income * rate3;
//... 변수가 많아질수록 더럽혀질 가능성이 커지고 rate의 성격이 같은지 분명하지 않다 이때 배열을 사용하는 것!
double[] dividenRates = new double[3]; // double형 데이터 3개로 이루어진 배열이다라는 듯
dividenRates[0] = 0.5;
dividenRates[1] = 0.3;
dividenRates[2] = 0.2;
double dividend 1 = income * dividenRates[0];
double dividend 2 = income * dividenRates[1];
double dividend 3 = income * dividenRates[2];
// 이렇게 한 뒤에 Run as에서 Arguments 넣고 어플라이, 실행하면 잘됨!
변수의 연관성을 견고히 하고 변수가 1개로 줄어들었기 때문에 더럽혀질 가능성이 현저히 줄었다!
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
system.out.println("Dividend 1 : " + dividend 1);
system.out.println("Dividend 2 : " + dividend 2);
system.out.println("Dividend 3 : " + dividend 3);
}
}
*14.8. 나의 앱 만들기 - 반복문
(배열과 반복문은 선행, 후행 관계는 아니지만 같이 쓸 때 시너지 효과 좋아서 배열 사용했던 파일로 같이 씀)
<상황>
지금은 배당인원이 3명이라 코드 3줄로 감당 가능하지만 배당 인원이 훨씬 더 많아진다면?
⇒ 반복문을 통해 하나의 코드로 만들자
AccountingArrayApp.java을 복사하여 AccountingArrayloopApp.java로 수정함
public class AccountingArrayApp {
public static void main(String[] args) {
double valueOfSupply =Double.parseDouble(args[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply*vatRate;
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
double[] dividenRates = new double[3];
dividenRates[0] = 0.5;
dividenRates[1] = 0.3;
dividenRates[2] = 0.2;
double dividend 1 = income * dividenRates[0];
double dividend 2 = income * dividenRates[1];
double dividend 3 = income * dividenRates[2];
int i = 0; // 몇 번 반복되게 할 것인가?
while(i < dividendRates.length) { // 3보다 i 값이 작은 동안에 이 반복문을 실행해라
system.out.println("Dividend : " + (income*dividendRates[i]) );
i = i + 1; // 반복할 때마다 i를 1씩 증가시켜라
}
}
⇒ arguments 설정 후 apply - run
*14.9. 나의 앱 만들기 - 메소드
메소드: 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈된 상자
<상황>
코드를 조금 더 깔끔하게 보이게 하고 싶네
double vat = valueOfSupply*vatRate; 의 값을 getVAT();로
double total = valueOfSupply + vat; 의 값을 getTotal; 처럼 바꿀 수 있다면 더 단순해질 텐데...
AccountingApp.java를 복사하여 AccountingMethodApp.java 로 수정
public class AccountingMethodApp {
public static void main(String[] args) {
double valueOfSupply = 10000.0;
double vatRate = 0.1;
double expenseRate = 0.3;
// double vat = valueOfSupply*vatRate;
// (1) 은 글씨만큼 드래그 후 마우스 우클릭 - Refactor - Extract Method... - Method name: getVAT 입력 후 확인
double vat = getVAT(valueOfSuuply, vatRate);
// (2-2) 만들어진 메소드를 호출하는(실행하는) 코드이며 괄호 안의 valueOfSuuply, vatRate는 입력값
douvle total = valueOfSupply + vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double dividend 1 = income * 0.5;
double dividend 2 = income * 0.3;
double dividend 3 = income * 0.2;
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + vat);
system.out.println("Total : " + total);
system.out.println("Expense : " + expense);
system.out.println("Income : " + income);
system.out.println("Dividend 1 : " + dividend 1);
system.out.println("Dividend 2 : " + dividend 2);
system.out.println("Dividend 3 : " + dividend 3);
}
public static double getVAT(double valueOfSupply, double vatRate) {
return valueOfSupply * vatRate;
// (2-1) 메소드를 만드는 코드가 생성됨
// 밑줄친 코드는 없어도 될 것 같지만 없으면 오류가 납니다 ㅠㅠ
왜? 현재 밑줄 코드는 위쪽의 main 메소드에만 사용되기 때문임
이걸 전체에 사용되도록 하고 싶다면 double valueOfSupply = 10000.0의 위치를 메인 바깥으로 빼 주면 됨
밑에처럼요!!!
}
}
↓ 상황들을 적용한 코드 정리
public class AccountingMethodApp {
public static double valueOfSupply; // 변수의 선언은 바깥쪽에서
public static double vatRate;
public static double expenseRate;
public static void main(String[] args) {
valueOfSupply = 10000.0; // 변수의 값은 안쪽에서
vatRate = 0.1;
// 전역변수로 바꾸는 법: 직접 코드를 쳐도 되고,
변수 드래그 후 마우스 우클릭 - Refactor - Convert Local Variable to Field... 클릭 후 public 선택 후 OK
expenseRate = 0.3;
print();
}
public static void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend1() {
return getIncome() * 0.5;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getIncome() {
return valueOfSupply - getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply * vatRate;
}
}
*14.10. 나의 앱 만들기 - 클래스
객체: (클래스와 비슷함) 서로 연관된 변수와 매소드를 그룹핑한 것이고 그것을 정리정돈 한 것이다
AccountingMethodApp.java를 복사하여 AccountingClassApp.java로 수정
class Accounting {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend1() {
return getIncome() * 0.5;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getIncome() {
return valueOfSupply - getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply * vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accountiong.valueOfSupply = 10000.0;
Accountiong.vatRate = 0.1;
Accountiong.expenseRate = 0.3;
Accountiong.print();
// 회계와 관련없는 anotherVariable = ...;
// 회계와 관련없는 anotherMethod = ...;
}
}
⇒ 메소드와 결과값은 완전히 같지만 회계 관련 메소드들을 한 곳에 모음으로써 훨씬 보기 편해짐!
*14.11. 나의 앱 만들기 - 인스턴스
인스턴스: 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것
AccountClassApp.java 수정하면서 진행
class Accounting {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend1() {
return getIncome() * 0.5;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getIncome() {
return valueOfSupply - getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply * vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accountiong.valueOfSupply = 10000.0;
Accountiong.vatRate = 0.1;
Accountiong.expenseRate = 0.3;
// ...
Accountiong.print();
// ...
Acccounting.valueOfSupply = 20000.0;
Accounting.vatRate = 0.05;
Accountiong.expenseRate = 0.2;
Accountiong.print();
// 딱 한 번 이렇게 바뀐 후에 다시 기존처럼 돌아갈 경우 버그를 유발할 가능성이 높음
Acccounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accountiong.expenseRate = 0.3;
Accountiong.print();
}
}
↓ 클래스 복제하여 서로 다른 값, 서로 같은 메소드를 가진 인스턴스를 만들면 버그 유발 확률 낮아짐
class Accounting1 {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend1() {
return getIncome() * 0.5;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getIncome() {
return valueOfSupply - getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply * vatRate;
}
}
class Accounting2 {
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
public static void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public static double getDividend1() {
return getIncome() * 0.5;
}
public static double getDividend2() {
return getIncome() * 0.3;
}
public static double getDividend3() {
return getIncome() * 0.2;
}
public static double getIncome() {
return valueOfSupply - getExpense();
}
public static double getExpense() {
return valueOfSupply*expenseRate;
}
public static double getTotal() {
return valueOfSupply + getVAT();
}
public static double getVAT() {
return valueOfSupply * vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
Accountiong1.valueOfSupply = 10000.0;
Accountiong1.vatRate = 0.1;
Accountiong1.expenseRate = 0.3;
Accountiong1.print();
Acccounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.05;
Accountiong2.expenseRate = 0.2;
Accountiong2.print();
Accountiong1.print();
}
}
↓ 클래스 복제 기능 활용법
class Accounting {
public double valueOfSupply; // new가 동작하기 위해서는 static을 사용하면 안 됨
public double vatRate;
public double expenseRate;
public void print(); {
system.out.println("value of supply : " +valueOfSupply);
system.out.println("VAT : " + getVat());
system.out.println("Total : " + getTotal());
system.out.println("Expense : " + getExpense());
system.out.println("Income : " + getIncome());
system.out.println("Dividend 1 : " + getDividend1());
system.out.println("Dividend 2 : " + getDividend2());
system.out.println("Dividend 3 : " + getDividend3());
}
public double getDividend1() {
return getIncome() * 0.5;
}
public double getDividend2() {
return getIncome() * 0.3;
}
public double getDividend3() {
return getIncome() * 0.2;
}
public double getIncome() {
return valueOfSupply - getExpense();
}
public double getExpense() {
return valueOfSupply*expenseRate;
}
public double getTotal() {
return valueOfSupply + getVAT();
}
public double getVAT() {
return valueOfSupply * vatRate;
}
}
public class AccountingClassApp {
public static void main(String[] args) {
// instance
Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.1;
a1.expenseRate = 0.3;
a1.print();
// new: counting 클래스를 복제하는 메소드
// a1: 복제된 클래스의 이름
// Accounting: a1이라는 변수의 값에는 반드시 Accounting의 복제본만 들어올 수 있다
Accounting a2 =new Accounting();
a2.valueOfSupply = 20000.0;
a2.vatRate = 0.05;
a2.expenseRate = 0.2;
a2.print();
a1.print();
}
}