본문 바로가기
Language/JAVA

[JAVA] 14~15 나의 앱 만들기 (조건문 배열 반복문 메소드 클래스 인스턴스)

by 아이엠제니 2022. 1. 31.

생활코딩 [자바 입문 수업] 공부 기록

[쉽게 배우는 자바 1]

2022. 1. 27. ~ 1. 31.


 

 

14. 나만의 앱 만들기

 

14.1 오리엔테이션

지식의 실제 모습을 파악할 수 있다면 공부를 하는 전략도 마음도 완전히 달라질 수 있다

 

애플리케이션을 만들자~!!!

 

 

 

14.2 기본 기능 구현

package java14;

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); //배당1
        System.out.println("Dividend 2 : " + (10000.0 - 10000.0 * 0.3) * 0.3); //배당2
        System.out.println("Dividend 3 : " + (10000.0 - 10000.0 * 0.3) * 0.2); //배당3
        
    }
}

 

 

 

14.3 변수도입

package java14;

public class AccountingApp {
    public static void main(String[] args) {

        double valueOfSupply = 10000.0;
        double vatRate = 0.1;
        double vat = valueOfSupply * vatRate;
        double total = valueOfSupply + vat;
        double expenseRate = 0.3;
        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); //배당1
        System.out.println("Dividend 2 : " + dividend2); //배당2
        System.out.println("Dividend 3 : " + dividend3); //배당3

    }
}

이전 코드보다 가독성이 좋아졌다.

 

 

 

14.4 입력값 도입

package java14;

import java.util.Scanner;

public class AccountingApp {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        double valueOfSupply = sc.nextDouble();
        
        double vatRate = 0.1;
        double vat = valueOfSupply * vatRate;
        double total = valueOfSupply + vat;
        double expenseRate = 0.3;
        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); //배당1
        System.out.println("Dividend 2 : " + dividend2); //배당2
        System.out.println("Dividend 3 : " + dividend3); //배당3

    }
}

강의에서는 configuration 들어가서 argument 주는 형태로 사용했으나,,,

나는 그게 더 복잡하게 느껴지는 것 같아서 Scanner 함수 사용했다.

콘솔창에서 공급가를 입력했을 때, 그 공급가에 맞게 나머지가 계산되어 출력된다.

각각 10,000원을 입력했을 때랑 20,000원을 입력했을 때가 다르게 계산되는 것을 확인할 수 있다.

 

 

 

14.5 오리엔테이션2

14.6 조건문

제어문은 조건에 따라 실행 과정 바꾸는 것

 

IF

package java14;

import java.util.Scanner;

public class AccountingIFApp {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        double valueOfSupply = sc.nextDouble();

        double vatRate = 0.1;
        double vat = valueOfSupply * vatRate;
        double total = valueOfSupply + vat;
        double expenseRate = 0.3;
        double expense = valueOfSupply * expenseRate;
        double income = valueOfSupply - expense;

        double dividend1;
        double dividend2;
        double dividend3;

        if (income > 10000.0) {
            dividend3 = income * 0.2;
            dividend1 = income * 0.5;
            dividend2 = income * 0.3;
        } 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); //배당1
        System.out.println("Dividend 2 : " + dividend2); //배당2
        System.out.println("Dividend 3 : " + dividend3); //배당3

    }
}

5,000원일 때는 10,000원 미만이기 때문에 첫 번째 사람에게만 배당됨.

50,000일 때는 10,000원 초과이기 때문에 세 명에게 모두 배당됨.

 

 

 

14.7 배열

Array: 같은 자료형을 여러 개 담을 수 있는 문자열 배열

package java14;

import java.util.Scanner;

public class AccountingArrayApp {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        double valueOfSupply = sc.nextDouble();

        double vatRate = 0.1;
        double vat = valueOfSupply * vatRate;
        double total = valueOfSupply + vat;
        double expenseRate = 0.3;
        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); //배당1
        System.out.println("Dividend 2 : " + dividend2); //배당2
        System.out.println("Dividend 3 : " + dividend3); //배당3

    }
}

 

 

 

14.8 반복문

While

package java14;

import java.util.Scanner;

public class AccountingArrayLoopApp {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        double valueOfSupply = sc.nextDouble();

        double vatRate = 0.1;
        double vat = valueOfSupply * vatRate;
        double total = valueOfSupply + vat;
        double expenseRate = 0.3;
        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])); //배당1
            i = i+1;
        }
        
    }
}

1명이든 1억명이든 반복문 한 줄로 끄-읏.

 

 

 

14.9 메소드

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

package java14;

import java.util.Scanner;

public class AccountingMethodApp {

    public static double valueOfSupply;
    public static double vatRate;
    public static double expenseRate;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        valueOfSupply = sc.nextDouble();
        vatRate = 0.1;

        double vat = getVAT();
        double total = getTotal();
        expenseRate = 0.3;
        double expense = getExpense();
        double income = getIncome();
        double dividend1 = getDividend1();
        double dividend2 = getDividend2();
        double dividend3 = getDividend3();

        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()); //배당1
        System.out.println("Dividend 2 : " + getDividend2()); //배당2
        System.out.println("Dividend 3 : " + getDividend3()); //배당3
    }

    public static double getDividend3() {
        return getIncome() * 0.2;
    }

    public static double getDividend2() {
        return getIncome() * 0.3;
    }

    public static double getDividend1() {
        return getIncome() * 0.5;
    }

    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 클래스

객체는 클래스라는 표현을 쓰기도 한다.

클래스는 서로 연관된 변수와 메소드를 그룹핑한 것이다.

그리고 거기에 이름을 붙인 것이다.

역시나 정리정돈의 상자이다!

메소드나 클래스가 중요한 이유는 소프트웨어를 만드는 데에 있어서 구조를 결정하기 때문!

package java14;

import java.util.Scanner;

class Accounting {
    public static double valueOfSupply;
    public static double vatRate;
    public static double expenseRate;

    double vat = getVAT();
    double total = getTotal();
    double expense = getExpense();
    double income = getIncome();
    double dividend1 = getDividend1();
    double dividend2 = getDividend2();
    double dividend3 = getDividend3();

    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()); //배당1
        System.out.println("Dividend 2 : " + getDividend2()); //배당2
        System.out.println("Dividend 3 : " + getDividend3()); //배당3
    }

    public static double getDividend3() {
        return getIncome() * 0.2;
    }

    public static double getDividend2() {
        return getIncome() * 0.3;
    }

    public static double getDividend1() {
        return getIncome() * 0.5;
    }

    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) {

        Scanner sc = new Scanner(System.in);
        System.out.print("How much? : ");
        Accounting.valueOfSupply = sc.nextDouble();
        Accounting.vatRate = 0.1;
        Accounting.expenseRate = 0.3;
        Accounting.print();

    }
}

 

 

 

14.11 인스턴스

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

package java14;

import java.util.Scanner;

class Accounting {
    public  double valueOfSupply;
    public  double vatRate;
    public  double expenseRate;

    double vat = getVAT();
    double total = getTotal();
    double expense = getExpense();
    double income = getIncome();
    double dividend1 = getDividend1();
    double dividend2 = getDividend2();
    double dividend3 = getDividend3();

    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()); //배당1
        System.out.println("Dividend 2 : " + getDividend2()); //배당2
        System.out.println("Dividend 3 : " + getDividend3()); //배당3
    }

    public double getDividend3() {
        return getIncome() * 0.2;
    }

    public double getDividend2() {
        return getIncome() * 0.3;
    }

    public double getDividend1() {
        return getIncome() * 0.5;
    }

    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) {

        Scanner sc = new Scanner(System.in);

//        Accounting.valueOfSupply = sc.nextDouble();
//        Accounting.vatRate = 0.1;
//        Accounting.expenseRate = 0.3;
//        Accounting.print();

        // instance
        Accounting a1 = new Accounting();
        System.out.print("How much a1? : ");
        a1.valueOfSupply = sc.nextDouble();
        a1.vatRate = 0.1;
        a1.expenseRate = 0.3;
        a1.print();

        Accounting a2 = new Accounting();
        System.out.print("How much a2? : ");
        a2.valueOfSupply = sc.nextDouble();
        a2.vatRate = 0.05;
        a2.expenseRate = 0.2;
        a2.print();

    }
}

a1이랑 a2에 같은 값을 입력했을 때, 각각 다른 결과들을 확인할 수 있다.

 

 

 

15. 수업을 마치며

 

조각조각 흩어졌던 자바와 관련된 것이 정리된 기분이다.

메소드나 클래스, 인스턴스 등등.

아! 생활코딩 홈페이지에서 듣다가 중간에 부스트코스에서 듣는 걸로 바꿨다!

[쉽게 배우는 자바1] 수업이 끝났고, 이제 2를 들을 예정이다.

300x250