Java

생활코딩 JAVA 입문편 - 나의 앱 만들기2

소댓 2023. 1. 3. 23:02

14.6 나의 앱 만들기 - 조건문

- 제어문을 통해 프로젝트를 개선해보기!

> 자바의 제어문은 조건문/반복문으로 크게 두 가지

- 조건문은 어떤 기준에 따라 변수가 달라지고 그에 따라 결과가 달라지는 경우에 사용함

 

- income이 만 원보다 작을 때는 dividend1이 돈을 다 가져가고, 만 원 보다 클 경우에는 5:3:2로 나눠야 하면?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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 );
        
    }
 
}
cs

- 입력값 5000.0일 때 결과

Value of supply : 5000.0
VAT : 500.0
Total : 5500.0
Expense : 1500.0
Income : 3500.0
Dividend 1 : 3500.0
Dividend 2 : 0.0
Dividend 3 : 0.0

 

- 입력값 50000.0일 때 결과

Value of supply : 50000.0
VAT : 5000.0
Total : 55000.0
Expense : 15000.0
Income : 35000.0
Dividend 1 : 17500.0
Dividend 2 : 10500.0
Dividend 3 : 7000.0

 

14.7 나의 앱 만들기 - 배열

- dividendRates라는 배열 생성 

> double dividendRates : 더블형 데이터로 이루어져 있는 배열

- 배열을 도입함으로써 dividendRates인 각각의 값들이 연관된 값이라는 것을 분명히 할 수 있게 됨

> 또한 3개였던 변수를 1개로 정리함으로써 변수가 오염될 가능성을 줄여줌

>> 즉, 서로 연관된 데이터를 정리정돈하는 수단이 '배열'임

     서로 연관된 데이터를 함께 정리 정돈하고 서로 연관된 값을 그룹핑하여 변수를 간소화 함

 

- double [] : double형 데이터로 이루어진 배열을 의미

- double[] 변수이름 = new double[변수갯수]

> double [] dividendRates = new double[3]; : double형 데이터 3개를 담을 수 있는 수납 상자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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[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("Dividend 1 : "+ dividend1 );
        System.out.println("Dividend 2 : "+ dividend2 );
        System.out.println("Dividend 3 : "+ dividend3 );
        
    }
 
}
 
cs

- Run Configurations로 입력값 10000.0 입력했을 때 결과

Value of supply : 10000.0
VAT : 1000.0
Total : 11000.0
Expense : 3000.0
Income : 7000.0
Dividend 1 : 3500.0
Dividend 2 : 2100.0
Dividend 3 : 1400.0

 

 

14.8 나의 앱 만들기 - 반복문

- 반복문을 통해 println을 한 줄에 정리할 수 있게 됨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 1 : "+ (income*dividendRates[i]) );
            i = i+1;
        }
    }
 
}
cs

- Run Configurations로 입력값 10000.0 입력했을 때 결과

Value of supply : 10000.0
VAT : 1000.0
Total : 11000.0
Expense : 3000.0
Income : 7000.0
Dividend 1 : 3500.0
Dividend 1 : 2100.0
Dividend 1 : 1400.0

 

14.9 나의 앱 만들기 - 메소드

- 메소드는 서로 연관된 코드를 그룹핑해서 이름을 붙힌 정리정돈의 상자이다.

- 메소드를 만들기 위해서 해당 코드에서 오른쪽 클릭 - Refactor - Extract Method 선택해서 이름 지정(+replace 체크 해제)

 

public static double getVAT(double valueOfsupply, double vatRate) {
return valueOfsupply*vatRate;

> 메소드를 만드는 코드

double vat = getVAT(valueOfsupply, vatRate);

> 만들어진 메소드를 호출 / 실행하는 코드

 

public static double valueOfsupply = 10000.0;

> 해당 코드를 main의  밖으로 빼면서, main 안과 getVAT() 안에서 모두 사용 가능(전역변수로 바꿈)

vatRate = 0.1

> 해당 코드도 Refactor - Convert Local Variable to Field를 통해 전역변수로 바꿈

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
public class AccountingMethodApp {
    public static double valueOfsupply;
    public static double vatRate;
    private 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 : "+ 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;
    }
 
}
 
cs

- Run Configurations로 입력값 10000.0 입력했을 때 결과

Value of supply : 10000.0
VAT : 1000.0
Total : 11000.0
Expense : 3000.0
Income : 7000.0
Dividend 1 : 3500.0
Dividend 2 : 2100.0
Dividend 3 : 1400.0

 

 

14.10 나의 앱 만들기 - 클래스

- 클래스는 서로 연관된 변수와 메소드를 그룹핑하고 이름을 붙힌 정리정리의 상자이다.

> 소프트웨어를 만들어 가는 데에 있어서 구조를 결정하기 때문에 중요함

> 클래스를 통해 코드의 구조를 더 튼튼하고 사용하기 쉽게 만들 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Accounting{
    public static double valueOfsupply;
    public static double vatRate;
    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) {
        Accounting.valueOfsupply = 10000.0;
        Accounting.vatRate = 0.1;
        Accounting.expenseRate = 0.3;
        Accounting.print();
        //anotherVariable = ...;
        //anotherMethod = ...;
    }
}
cs

- Run Configurations로 입력값 10000.0 입력했을 때 결과

Value of supply : 10000.0
VAT : 1000.0
Total : 11000.0
Expense : 3000.0
Income : 7000.0
Dividend 1 : 3500.0
Dividend 2 : 2100.0
Dividend 3 : 1400.0

 

 

14.11 나의 앱 만들기 - 인스턴스

- 인스턴스는 하나의 클래스를 복제해서 서로 다른 데이터의 값과 서로 같은 메소드를 가진 복제본을 만드는 것

 

- new Accounting(); : Accounting 클래스를 복제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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();
    }
}
cs

 

 

* 어떤 컴퓨터 언어든 본질은 같다!

*  나의 프로젝트를 만들어 보는 것이 중요!