[ JAVA1 ] 생활코딩 myApp 만들기 [메소드]

행복한 콩🌳·2022년 12월 20일
0

JAVA

목록 보기
9/26

JAVA1을 듣고 myApp을 만들어보았다.

public class accountingApp {
    public static void main(String[] args){
        // 공급가
        double valueOfSupply = 12345.0;
        // 세금
        double vatRate = 0.1;
        // 지출 비율
        double expenseRate = 0.3;
        // 수익
        double income = (valueOfSupply - valueOfSupply*expenseRate);
        // 지출
        double expense = (valueOfSupply*expenseRate);
        // 공급가 + VAT = Total
        double total = (valueOfSupply + valueOfSupply*vatRate);
        // 부가 가치세
        double vat = (valueOfSupply*vatRate);
        // 1번 투자자에게 배당금
        double devidend1 = (valueOfSupply - valueOfSupply*expenseRate) * 0.5;
        // 2번 투자자에게 배당금
        double devidend2 = (valueOfSupply - valueOfSupply*expenseRate) * 0.3;
        // 3번 투자자에게 배당금
        double devidend3 = (valueOfSupply - valueOfSupply*expenseRate) * 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("Income : "+ devidend1);
        System.out.println("Income : "+ devidend2);
        System.out.println("Income : "+ devidend3);
    }
}

메소드 도입

public class accountingMethodApp {
    //vauleOfSupply, vatRate 전역 변수로 생성
    public static double valueOfSupply = 12345.0;
    public static double vatRate = 0.1 ;
    public static double expenseRate = 0.3;
    public static void main(String[] args){
        // 수익
        double income = getIncome();
        // 지출
        double expense = getExpense();
        // 공급가 + VAT = Total
        double total = getTotal();

        // 부가 가치세
        //double vat = (valueOfSupply*vatRate);
        double vat = getVat();

        // 1번 투자자에게 배당금
        double devidend1 = getDiviend1();
        // 2번 투자자에게 배당금
        double devidend2 = getDiviend2();
        // 3번 투자자에게 배당금
        double devidend3 = getDiviend3();

        print();

    }
    public static double getVat (){
        return valueOfSupply * vatRate;
    }
    public static double getIncome (){
        return valueOfSupply - getExpense();
    }
    public static double getExpense (){
        return valueOfSupply * expenseRate;
    }
    public static double getTotal (){
        return valueOfSupply * getVat();
    }
    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 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("Income : "+ getDiviend1());
        System.out.println("Income : "+ getDiviend2());
        System.out.println("Income : "+ getDiviend3());
    }
}

객체는, 클래스는 서로 연관된 변수와 메소드를 그룹화하여 명명한 것이다.
클래스는 뼈대 같은 느낌쓰
메소드가 도입된 코드에 클래스를 도입해 보았다.

Structure로 어떤 멤버들 리스트 (클래스 안에 소속된 변수 또는 메소드들) 확인!

  • 전역 변수를 자바에서 필드라고 함
  • 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
  • Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
class Accouting{
    public static double valueOfSupply;
    public static double vatRate;
    public static double expenseRate;

    public static double getVat (){
        return valueOfSupply * vatRate;
    }
    public static double getIncome (){
        return valueOfSupply - getExpense();
    }
    public static double getExpense (){
        return valueOfSupply * expenseRate;
    }
    public static double getTotal (){
        return valueOfSupply * getVat();
    }
    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 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("Income : "+ getDiviend1());
        System.out.println("Income : "+ getDiviend2());
        System.out.println("Income : "+ getDiviend3());
    }
}

public class accountingClassApp {
    // 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
    // Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
    public static void main(String[] args){
        // 공급가
        Accouting.valueOfSupply = 12345.0;
        // 세금
        Accouting.vatRate = 0.1;
        // 지출 비율
        Accouting.expenseRate = 0.3;
        // 수익

        Accouting.print();


    }

}

여기서 인스턴스 개념을 추가해 보았다(생활코딩님이 ㅋ)

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

만약 어쩌다 한 번 세금(Accouting.vatRate)이나 지출 비용(Accouting.expenseRate)이 달라지면?

클래스의 내부의 상태를 변화시키면 버그를 유발할 가능성이 크다.
ex)

    public static void main(String[] args){
        Accouting.valueOfSupply = 12345.0;
        Accouting.vatRate = 0.1;
        Accouting.expenseRate = 0.3;

        Accouting.valueOfSupply = 20000.0;
        Accouting.vatRate = 0.2;
        Accouting.expenseRate = 0.5;

        Accouting.valueOfSupply = 33000.0;
        Accouting.vatRate = 0.8;
        Accouting.expenseRate = 0.1;
        }

-> 클래스를 복제해 봄

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

    public static double getVat (){
        return valueOfSupply * vatRate;
    }
    public static double getIncome (){
        return valueOfSupply - getExpense();
    }
    public static double getExpense (){
        return valueOfSupply * expenseRate;
    }
    public static double getTotal (){
        return valueOfSupply * getVat();
    }
    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 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("Income : "+ getDiviend1());
        System.out.println("Income : "+ getDiviend2());
        System.out.println("Income : "+ getDiviend3());
    }
}
class Accouting2{
    public static double valueOfSupply;
    public static double vatRate;
    public static double expenseRate;

    public static double getVat (){
        return valueOfSupply * vatRate;
    }
    public static double getIncome (){
        return valueOfSupply - getExpense();
    }
    public static double getExpense (){
        return valueOfSupply * expenseRate;
    }
    public static double getTotal (){
        return valueOfSupply * getVat();
    }
    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 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("Income : "+ getDiviend1());
        System.out.println("Income : "+ getDiviend2());
        System.out.println("Income : "+ getDiviend3());
    }
}
public class accountingClassApp {
    // 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
    // Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
    public static void main(String[] args){
        Accouting1.valueOfSupply = 12345.0;
        Accouting1.vatRate = 0.1;
        Accouting1.expenseRate = 0.3;
        Accouting1.print();
        
        Accouting2.valueOfSupply = 20000.0;
        Accouting2.vatRate = 0.2;
        Accouting2.expenseRate = 0.5;
        Accouting2.print();



    }

}

서로 다른 상태, 서로 같은 메소드를 갖게 함
복제된 클래스를 이용하여 더 버그가 적은 코딩이 가능하게 함
하지만 코드가 너무 길어지고 복제한 클래스의 메소드 변경이 번거로움

인스턴스를 선언해서 클래스의 복제를 막아줌

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

    public  double getVat (){
        return valueOfSupply * vatRate;
    }
    public  double getIncome (){
        return valueOfSupply - getExpense();
    }
    public  double getExpense (){
        return valueOfSupply * expenseRate;
    }
    public  double getTotal (){
        return valueOfSupply * getVat();
    }
    public  double getDiviend1 (){
        return getIncome() * 0.5;
    }
    public  double getDiviend2 (){
        return getIncome() * 0.3;
    }
    public  double getDiviend3 (){
        return getIncome() * 0.2;
    }
    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("Income : "+ getDiviend1());
        System.out.println("Income : "+ getDiviend2());
        System.out.println("Income : "+ getDiviend3());
    }
}

public class accountingClassApp {
    // 전역 변수로 선언되어 있던 vauleOfSupply, vatRate, expenseRate을 Accounting class에 멤버로 바꿈
    // Accounting과 관련 없는 변수들과 같이 쓰이는 경우 코드의 복잡성을 줄이기 위해 Accounting과 관련된 코드들은 Accounting class의 멤버로 바꿈
    public static void main(String[] args){
        Accouting a1 = new Accouting();
        a1.valueOfSupply = 12345.0;
        a1.vatRate = 0.1;
        a1.expenseRate = 0.3;
        a1.print();
        
        Accouting a2 = new Accouting();
        a2.valueOfSupply = 10000.0;
        a2.vatRate = 0.2;
        a2.expenseRate = 0.5;
        a2.print();
        // accounting Class에서 쓰인 static은 쓸 수 없음, 지워줘야함
    }

}

static 왜 쓰면 안되는지 안말해줌 찾아봤는데 ㅎ..
https://unabated.tistory.com/1041

profile
매일매일 조금씩 모여 숲이 되자🐣

0개의 댓글