천재강쥐 2022. 6. 1. 13:46

라이브러리: 자바의 기본 내장 기능

(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();

 }

}