본문 바로가기
Java/생활코딩

생활코딩 자바입문 (나의앱 만들기)

by 자연송어 2021. 5. 10.

14.2. 나의 앱 만들기 - 기본 기능 구현

구현할 기능

 

- search 또는 find/replace 

 

replace로 숫자를 일괄적으로 바꿀 수 있는 기능
숫자가 일괄적으로 바뀐 모습

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

6줄 args에 값을 입력하지 않아서 에러가 나타난 것. 

- 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. 나의 앱 만들기 - 배열

rate1 변수를 추가한 후  dividendRates 배열로 변환

- 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. 나의 앱 만들기 - 메소드

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

 

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