
Chapter 13. 나의 앱 만들기 : 오리엔테이션2
이 뒤의 강의들은 배우지 않은 것들에 대한 내용이고
관전하는 자세로 보고 넘어가길 바란다고 한다.
중요한 문제들을 살펴보고 어떤 불편함을 극복하기 위해 등장한 개념인지를 볼 예정이라고 함.
Chapter 13. 나의 앱 만들기 : 조건문
자바의 제어문은 2가지로 조건문과 반복문이 있다.
#AccountingIFApp.java
수익이 만원보다 작을 경우 dividend1,2,3의 분배를 다르게 하고 싶을 때
(프로그램을 2개를 만들어 각각 실행시킬 수도 있지만 조건문을 통해 간단하게 해결 가능)
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;
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("Dividend1: "+dividend1); // 5:3:2 배당
System.out.println("Dividend2: "+dividend2);
System.out.println("Dividend3: "+dividend3);
}
}
Arguments 값을 각각 5000.0과 50000.0으로 설정하여 실행 ▽
Chapter 13. 나의 앱 만들기 : 배열
#AccountingArrayApp.java
*Array(어레이) : 배열
변수가 많을수록 겹치는 변수의 이름이 겹쳐 오류가 날 수 있기 때문에 변수를 그룹핑해주는 것!
연관된 데이터를 정리 정돈하는 것이 배열이다.
+반복문과 결합하면 폭발적인 효과를 불러옴
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;
double total = valueOfSupply +vat;
double expense = valueOfSupply*expenseRate;
double income = valueOfSupply - expense;
double [] dividendrates = new double[3]; //dividendrates-그룹화된 변수의 이름
dividendrates[0] = 0.5;
dividendrates[1] = 0.3;
dividendrates[2] = 0.2;
double dividend1 = income * dividendrates[0];
double dividend2 = income * dividendrates[1];
double dividend3 = income * dividendrates[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("Dividend1: "+dividend1); // 5:3:2 배당
System.out.println("Dividend2: "+dividend2);
System.out.println("Dividend3: "+dividend3);
}
}
입력 값 10000.0 설정 후 실행 ▽
Chapter 13. 나의 앱 만들기 : 반복문
#AccountingArrayLoopApp.java
동업자(혹 투자자)가 만 명 정도 된다고 쳤을 때 한 줄 한 줄 쓰기가 힘들어짐
반복문을 통해 룰을 만들어서 간단하게 정리가 가능하다.
*while(와일) : …하는 동안[사이] (반복문에서 씀)
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-그룹화된 변수의 이름
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])); // 5:3:2 배당
i = i + 1; //반복될 때 마다 1씩 증가함
}
}
}
입력 값 10000.0 설정 후 실행 ▽
Chapter 13. 나의 앱 만들기 : 메소드
#AccountingMethodApp.java
메소드는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자다.
메소드할 구간을 드래그하여 오른쪽마우스-Refator-Ectract Method
단축키 : Alt + Shift + M
메소드 이름 설정 후 (getVAT) 세 번째 체크박스는 해제
자동으로 메소드가 생성됨.
public class AccountingMethodApp {
public static void main(String[] args) {
double valueOfSupply = 10000.0;
double vatRate = 0.1;
double expenseRate = 0.3 ;
double vat = getVAT(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("Dividend1: "+dividend1); // 5:3:2 배당
System.out.println("Dividend2: "+dividend2);
System.out.println("Dividend3: "+dividend3);
}
private static double getVAT(double valueOfSupply, double vatRate) {
return valueOfSupply*vatRate; //메소드가 만들어진 코드
}
}
여기서 좀 더 간단하게 getVAT값을 안 보이게 설정하고 싶어서
valueOfSupply, vatRat를 제거했을 때 메소드가 만들어진 코드는 메인 바깥에서 만들어진 거라
valueOfSupply를 메인 안에서도, 바깥에서도 작동이 되도록 바깥으로 빼준다. ▷ 전역변수
vatRate도 전역변수를 만들어주려고 할 때
드래그-오른쪽마우스-Refactor-Convert Local Variable to Field...
public 체크 후 enter치면 자동으로 위에서 지정했던 대로 만들어짐.
valueOfSupply 변수 선언을 바깥에서 하고 값은 메인 안에서 정하는 걸로 다시 수정
나머지 변수들도 메소드화 시키기!
이것도 괄호 안을 깔끔하게 없애주기 위해 아래 메소드도 값이 없애서 통일해주고
지역변수이지만 전역변수로 안 바꾸고 바로 getVAT를 불러오는 방법으로도 쓸 수 있음.
나머지도 메소드 / 전역변수를 하여 바꿔준다.
프린트 구간도 메소드 하여 바꿔준다.
메소드를 통해 사용하는 사람에게 더욱 편리한 코드로 정리되었음
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();
}
private 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("Dividend1: "+ getDividend1()); // 5:3:2 배당
System.out.println("Dividend2: "+ getDividend2());
System.out.println("Dividend3: "+ getDividend3());
}
private static double getDividend1() {
return getIncome() * 0.5;
}
private static double getDividend2() {
return getIncome() * 0.5;
}
private static double getDividend3() {
return getIncome() * 0.5;
}
private static double getIncome() {
return valueOfSupply - getExpense();
}
private static double getExpense() {
return valueOfSupply*expenseRate;
}
private static double getTotal() {
return valueOfSupply + getVAT();
}
private static double getVAT() {
return valueOfSupply*vatRate; //메소드가 만들어진 코드
}
}
Chapter 13. 나의 앱 만들기 : 클래스
#AccountingClassApp.java
object 객체지향
Calls(클래스=객체) : 클래스는 서로 연관된 변수와 메소드를 그룹핑한 것에 이름을 붙인 것이다.
객체 또한 정리정돈의 상자!
※ 여기서 잠깐, 아웃라인을 켜서 같이 볼 건데
아웃라인은 클래스 안에 소속되어있는 멤버(변수,메소드)들의 리스트를 보여줌.
class Accounting{
public static double valueOfSupply;
public static double vatRate;
public static double expenseRate;
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("Dividend1: "+ getDividend1()); // 5:3:2 배당
System.out.println("Dividend2: "+ getDividend2());
System.out.println("Dividend3: "+ getDividend3());
}
private static double getDividend1() {
return getIncome() * 0.5;
}
private static double getDividend2() {
return getIncome() * 0.5;
}
private static double getDividend3() {
return getIncome() * 0.5;
}
private static double getIncome() {
return valueOfSupply - getExpense();
}
private static double getExpense() {
return valueOfSupply*expenseRate;
}
private static double getTotal() {
return valueOfSupply + getVAT();
}
private 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 = ...;
}
}
메소드들 Acoouting으로 옮기는데 private를 제거해야 하단 print에서 오류가 안남
RUN ▽
Chapter 13. 나의 앱 만들기 : 인스턴스
#AccountingClassApp2.java
object 객체지향
Instanse(인스턴스) : 인스턴스는 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것이다.
Accounting의 내부적인 상태(변수의 값)가 수백, 수천 개의 메소드가 호출이 되다가
어쩌다 다른 제품이 들어왔을 때 이렇게 반복해서 코드 작성 시에 복잡해짐
※ 드래그 + 구간 주석 달기
단축키 : Cntl + Shift + C
new : 'Accounting' Class를 복제하는 명령
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("Dividend1: "+ getDividend1()); // 5:3:2 배당
System.out.println("Dividend2: "+ getDividend2());
System.out.println("Dividend3: "+ getDividend3());
}
private double getDividend1() {
return getIncome() * 0.5;
}
private double getDividend2() {
return getIncome() * 0.5;
}
private double getDividend3() {
return getIncome() * 0.5;
}
private double getIncome() {
return valueOfSupply - getExpense();
}
private double getExpense() {
return valueOfSupply*expenseRate;
}
private double getTotal() {
return valueOfSupply + getVAT();
}
private 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();
// //...
// Accounting.valueOfSupply = 20000.0;
// Accounting.vatRate = 0.05;
// Accounting.expenseRate = 0.2;
// Accounting.print();
// //...
// Accounting.valueOfSupply = 10000.0;
// Accounting.vatRate = 0.1;
// Accounting.expenseRate = 0.3;
// instance 인스턴스 - Accounting에서 static 들어가는거 모두 제거
Accounting a1 = new Accounting();
a1.valueOfSupply = 10000.0;
a1.vatRate = 0.01;
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();
}
}
RUN ▽
'Backend > JAVA' 카테고리의 다른 글
[JAVA] JAVA 프로그래밍 기초 교육 : 변수(Variable) (0) | 2022.05.19 |
---|---|
[JAVA] JAVA 프로그래밍 기초 : 프로그래밍 준비하기 (0) | 2022.05.19 |
[JAVA] 생활코딩 JAVA1 - Chapter 13. 나의 앱 만들기(1) (0) | 2022.05.08 |
[JAVA] 생활코딩 JAVA1 - Chapter 12. 자바 문서 보는법 (0) | 2022.04.27 |
[JAVA] 생활코딩 JAVA1 - Chapter 11. 내 힘으로 컴파일 (0) | 2022.04.27 |