[부스트코스/쉽게 배우는 자바 1] 14. 나의 앱 만들기(2) - 조건문, 배열, 반복문

zzzzsb·2021년 2월 27일
0

부스트코스 쉽게 배우는 자바 1


Chaper 14


14-5. 나의 앱 만들기_오리엔테이션2


쉽게 배우는 자바 1 강의에서 배운 내용을 토대로 우리가 맞닥뜨린 문제를 해결할 수 있는 프로그램을 짜보았다.

만약 내가 알고있거나 배웠던 내용만으로 문제가 해결되지 않는다면, 그 불편함을 해소하기 위해 공부를 하게 될 것이다.

이번 강의에서는 문제를 해결하면서 발생할 수 있는 불편함을 해소할 수 있을만한 도구들에 대해 배울 것이다.


14-6. 나의 앱 만들기_조건문

제어문은 프로그램의 실행 과정을 조건에 따라 바꾸는 것이다.
자바에는 두 가지 제어문이 있는데, 크게 조건문과 반복문이 있다.

조건문을 활용해 프로그램을 만들어볼 것이다.

조건문

  • MyApp 프로젝트에 AccountingIFApp 클래스를 생성해 보자.

AccountingIFApp.java 소스코드

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

만약, 문제 상황에 새로운 조건이 하나 생겼다고 가정해보자.

수익(income)이 1만원이 넘을 경우에만 동업자들에게 기존의 배당률대로 수익을 배당하고,

수익이 1만원 이하일 경우에는 1번 동업자에게만 모든 수익을 배당하게 되었다.

우리가 배운 내용만으로 문제를 해결하려면 ,

  • 수익이 1만원이 넘을 경우에 사용할 프로그램
  • 수익이 1만원 이하일 경우에 사용할 프로그램

이렇게 두개의 프로그램을 만들어야 할것이다.

이런 경우 조건문을 사용하면 하나의 프로그램으로 모든 문제를 해결할 수 있다.

AccountingIFApp.java 소스코드 분석

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;
        }
}
  • 위 코드는 수입이 1만원을 넘을 경우 기존 배당률대로 수익을 배당하고,
  • 수익이 1만원 이하일 겅우에는 1번 동업자에게만 모든 수익을 배당하게 하는 코드이다.

14-7. 나의 앱 만들기_배열

배열(Array)

main 메소드의 args 파라미터는 String 자료를 여러개 담을 수 있는 문자열 배열이다.

배열은 같은 자료형을 여러 개 담을 수 있는 객체이다.

  • MyAPP 프로젝트에 AccountingArrayApp 클래스를 생성해보자.

AccountingArrayApp.java 소스코드

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

	}

}

AccountingArrayApp.java 소스코드 분석

double rate1 = 0.5;
double rate2 = 0.3;
double rate3 = 0.2;
       
double dividend1 = income * rate1;
double dividend2 = income * rate2;
double dividend3 = income * rate3;
  • 배당률에 해당하는 부분을 변수화 하였다.
  • 이런 경우 수익을 배당할 동업자가 점점 늘어나게 되면 배당률 변수를 계속 추가해 줘야 한다.

배당률 변수를 하나로 묶어서 표현하면, 계속 추가할 필요가 없을 것이다.

배열을 사용해보자.

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];
  • 배열 내의 데이터는 인덱스를 이용해 접근할 수 있다.
  • 배열의 인덱스는 0부터 시작한다.

프로그램의 기능은 변하지 않았지만, 배당률을 배열로 묶어서 표현함으로써 각 배당률이 서로 연관된 정보라는 것을 분명히 할 수 있게 되었고, 변수의 개수도 줄어들게 되었다.


14-8. 나의 앱 만들기_반복문

반복문

반복문은 조건이 참일때, 해당되는 구간을 계속 반복한다. 배열과 반복문을 이용하면 프로그램을 훨씬 간결하게 만들 수 있다.

  • MyApp 프로젝트에 AccountingArrayLoopApp 클래스를 생성해보자.

AccountingArrayLoopApp.java 소스코드

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

AccountingArrayLoopApp.java 소스코드 분석

int i = 0;
while(i < dividendRates.length) {
            System.out.println("Dividend : " + (income*dividendRates[i]) );
            i = i + 1;
}
  • while 문은 괄호안의 조건이 참이면 블록 내의 작업을 계속 반복한다.
  • i 변수는 반복하는 횟수를 의미하고, 0으로 초기화 하여 사용한다.
  • 배열의 길이만큼 반복하여 동업자에게 배당 금액을 계산하는 반복문이다.

배열만을 사용했을 때

double dividend1 = income * dividendRates[0];
double dividend2 = income * dividendRates[1];
double dividend3 = income * dividendRates[2];

System.out.println("Dividend 1 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
  • 위 코드는 동업자에게 배당하는 금액을 수익*배당률 로 3번씩 반복하고 있다.
  • 배당금액을 출력하는 작업 또한 3번씩 반복하고 있다.

반복문을 함께 사용했을 때

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;
}
  • while 문을 사용해 3번씩 반복하던 작업을 간결하게 수정하였다.
  • 만약 동업자가 백만명으로 늘어난다면 이전 방식에서는 2억줄이 넘는 코드가 늘어져 있었을텐데, 반복문을 사용하면 3명이든, 백만명이든 언제나 5줄의 코드이다.

부스트코스
https://www.boostcourse.org/opencourse

부스트코스 쉽게 배우는 자바 1
https://www.boostcourse.org/cs126


profile
성장하는 developer

0개의 댓글