14.2. 나의 앱 만들기 - 기본 기능 구현
14.3. 나의 앱 만들기 - 변수도입
자동 변수화 기능
- 변수로 변환 원하는 입력값 오른쪽 클릭
- Refactor
- Extract Local Variable
public class AccountingApp {
public static void main(String[] args) {
double valueOfSupply = 10000.0;
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;
double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = 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 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
}
}
- 완성된 코드의 모습
14.4. 나의 앱 만들기 - 입력값 도입
- properties - Location(경로) <--경로찾기
- cmd 실행
- cd 경로 입력
- dir (현재 위치 확인)
- rm AccountingApp.class <--클래스파일 지움(예제를 위해서)
- javac 파일.java (클래스파일 생성)
- java 파일명(클래스생략)
- 에러 발생 (6줄)
- java 파일명 입력값(33333.0)
- 실행
자바 조차도 설치 안되있을 시
- launch4j 로 실행 가능
14.6. 나의 앱 만들기 - 조건문
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;
double total = valueOfSupply + vat;
double expense = valueOfSupply * expenseRate;
double income = valueOfSupply - expense;
double dividend1;
double dividend2;
double dividend3;
if(income > 10000.0) {
dividend1 = income * 0.5;
dividend2 = income * 0.3;
dividend3 = income * 0.2;
} else {
dividend1 = income * 1.0;
dividend2 = income * 0;
dividend3 = 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 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
}
}
- 이대로 실행하면 입력값이 없어서 에러가 발생함.
- run configuration
- AccountingIFApp - Arguments - 입력값 입력(50000.0) - 이름도 동일하게 변경
- 복사하여 비교할 입력값 입력(5000.0)
- 실행
14.7. 나의 앱 만들기 - 배열
- new double[3] : 더블타입의 변수를 3개 입력할 수 있는 일종의 데이터 박스
- dividendRates[2] : 0부터 카운팅 하기 떄문에 0,1,2가 나온것
변수는 많을수록 데이터가 더러워질 확률이 높기 떄문에 배열(같은 성격을 띄는 변수들)을 넣어서 하나의 변수로 만들어 변수가 더러워질 확률을 낮출수 있다.
14.8. 나의 앱 만들기 - 반복문
public class AccountingArrayLoopApp {
public static void main(String[] args) {
double valueOfSupply = Double.parseDouble(args[0]);
double vatRate = 0.1;
double expenseRate = 0.3;
double vat = valueOfSupply * vatRate;
double 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[] dividendRates = new double[3];
dividendRates[0] = 0.5;
dividendRates[1] = 0.3;
dividendRates[2] = 0.2;
int i = 0;
while(i < dividendRates.length) {
System.out.println("Dividend : " + (income*dividendRates[i]) );
i = i + 1;
}
}
}
14.9. 나의 앱 만들기 - 메소드
메소드는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자다.
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;
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 : " + getDiviend1());
System.out.println("Dividend 2 : " + getDiviend2());
System.out.println("Dividend 3 : " + getDiviend3());
}
public static double getDiviend1() {
return getIncome() * 0.5;
}
public static double getDiviend2() {
return getIncome() * 0.3;
}
public static double getDiviend3() {
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. 나의 앱 만들기 - 클래스
클래스란 비슷한 종류의 멤버들(변수,메소드)을 묶어 놓아 이름붙여 정리해놓은 상자이다. 클래스를 사용하는 이유는 - 여러 다른 종류의 변수/메소드들이 혼재되어 있어도 '클래스 소속'을 밝혀주면 각 멤버들의 성격을 한눈에 파악할 수 있음 - 구현되어있는 변수,메소드들을 메인 스크립트에 다 적어줄 필요 없이, 클래스로 만들어 따로 빼놓고 필요한 부분에 클래스명.변수/메소드 식으로 바로 호출해 쓸 수 있어 편리함. - print처럼 흔한 이름의 메소드,변수가 여러 개 존재할 경우, 클래스 소속만 다르면 중복오류없이 한 스크립트내에 쓰일 수 있음.
- outline (클래스안에 소속되어 있는 멤버들의 리스트)
- 멤버 : 클래스 소속 변수와 메소드
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 : " + getDiviend1());
System.out.println("Dividend 2 : " + getDiviend2());
System.out.println("Dividend 3 : " + getDiviend3());
}
public static double getDiviend1() {
return getIncome() * 0.5;
}
public static double getDiviend2() {
return getIncome() * 0.3;
}
public static double getDiviend3() {
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) {
Accounting.valueOfSupply = 10000.0;
Accounting.vatRate = 0.1;
Accounting.expenseRate = 0.3;
Accounting.print();
// anotherVariable = ...;
// anotherMethod = ...;
}
}
- Accounting 클래스를 생성함으로써 accounting 관련 변수의 소속 관계를 명확하게 하였음.
- 클래스가 다르면 다른 취지의 메소드와 뒤섞여도 상관없어짐.
- 클래스가 다르면 흔한 이름의 메소드를 사용해도 같은 이름의 메소드가 공존할 수 있어짐.
14.11. 나의 앱 만들기 - 인스턴스
class Accounting{
public double valueOfSupply;
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 : " + getDiviend1());
System.out.println("Dividend 2 : " + getDiviend2());
System.out.println("Dividend 3 : " + getDiviend3());
}
public double getDiviend1() {
return getIncome() * 0.5;
}
public double getDiviend2() {
return getIncome() * 0.3;
}
public double getDiviend3() {
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();
Accounting a2 = new Accounting();
a2.valueOfSupply = 20000.0;
a2.vatRate = 0.05;
a2.expenseRate = 0.2;
a2.print();
a1.print();
}
}
public static void main(String[] args) {
Accounting1.valueOfSupply = 10000.0;
Accounting1.vatRate = 0.1;
Accounting1.expenseRate = 0.3;
Accounting1.print();
Accounting2.valueOfSupply = 20000.0;
Accounting2.vatRate = 0.11;
Accounting2.expenseRate = 0.32;
Accounting2.print();
Accounting3.valueOfSupply = 30000.0;
Accounting3.vatRate = 0.12;
Accounting3.expenseRate = 0.33;
Accounting3.print();
//인스턴스화 하기 전 코드의 모습
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();
Accounting a2 = new Accounting();
a2.valueOfSupply = 20000.0;
a2.vatRate = 0.05;
a2.expenseRate = 0.2;
a2.print();
a1.print();
//인스턴스화 하여 간략하게 변환한 모습
//위에 static이 오면 안됨.
Accounting a1 = new Accounting();
인스턴스의 의미
- Accounting (왼쪽) : 반드시 Accounting의 값만 올 수 있다는 뜻.
- a1 : 새롭게 생성한 변수의 이름
- new : Accounting 클래스를 복제하는 행위
- Accounting (오른쪽) : 복제하고 싶은 클래스의 이름
인스턴스 : 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것이다.
new Accounting
자바에서
- method로 기본기능들을 쌓고
- method와 변수를 그룹핑해서 class 로도 구조를 잡고
- class를 복제한 인스턴스를 통해서 또다른 구조를 만들며
- 코드의 성을 쌓아간다.
'Java > 생활코딩' 카테고리의 다른 글
생활코딩 자바 입문 리뉴얼 (0) | 2021.05.10 |
---|---|
생활코딩 - 자바입문 (시즌2) (0) | 2021.05.05 |
생활코딩 - 자바입문 (시즌1) (0) | 2021.05.02 |