Java 생활코딩 강의 JAVA1 - 14-2. 나의 앱 만들기2

별의개발자커비·2023년 1월 23일
0

Java

목록 보기
12/66
post-thumbnail

14.6. 조건문

		if (income > 10000.0) {
			dividend1 = income * 0.5;
			dividend2 = income * 0.3;
			dividend3 = income * 0.2;
		} else {
			dividend1 = income * 1;
			dividend2 = income * 0;
			dividend3 = income * 0;
		}

14.7. 배열 ( 강의 댓글 참고 )

배열이란 마치 서로 연관된 것을 함께 넣어두는 수납장처럼, 비슷한 값/같이 사용할 값들/ 등등을 '하나의 공간'에 묶어 넣어놓은 공간이다.
이 배열이 유용한 이유는 '어떤 것 용'의 한 수납장 안에 넣어놓기 때문에 '그 어떤 것'과 관련된 값을 쉽게 찾을 수 있고, 한 공간에 넣어놓기 때문에 값이 변질되거나, 다른 이름과 겹쳐 오염되는 것을 방지할 수 있다.
그리고 값 하나 하나에 일일이 변수를 지정해야하는 번거로운 일을 피할 수 있다.

		double[] dividendRates = new double[3]; 
		// double형 데이터로 이루어진 배열 의미        // double형 데이터 3개를 담을 수 있는 수납 상자
		dividendRates[0] = 0.5 ;
		dividendRates[1] = 0.3 ;

14.8. 반복문

Dividend1 : 3500.0
Dividend2 : 2100.0
Dividend3 : 1400.0
		int i = 0 ;
		while ( i < dividendRates.length ) {
		System.out.println( "Dividend" + (i+1) +  " : " +  income * dividendRates[i]  );
		i++ ;
		}

14.9. 메소드 ( 강의 댓글 참고 )

메소드란 서로 연관된 코드들을 그룹핑해 이름지은 정리정돈해놓은 상자이다. 동시에 클래스 안의 함수이다.
메소드를 사용하는 이유는 필요한 기능을 담은 코드를 일일이 다 쓰지 않고, 해당 기능을 메소드로 구현해 따로 빼놓고 메소드명만으로 호출해서 쓰면, 전체 스크립트를 훨씬 더 간결하고 이해하기 쉽게 작성할 수 있기 때문이다.

		double vat =  getVAT(valueOfSupply, varRate);

	private static double getVAT(double valueOfSupply, double varRate) {
		return valueOfSupply * varRate;
	}
  • 메소드 추가 하는 법
  1. vat = valueOfSupply vatRate; 에서 < valueOfSupply vatRate > 블록 지정
  2. Refactor - Extract Method ( opt+cmd+M )
  3. Method name: getVAT 로 입력
  • 메소드 속 변수 전역 변수로 지정하는 법
    ( vat = getVAT(valueOfSupply, vatRate) -> vat = getVAT() 생략하려면
    -> 아래 만들어진 getVAT 메소드 속 변수가 모든 메소드에서 접근할 수 있는 변수이게해야하기 때문)
  1. valueOfSupply 블록 지정하고 - Refactor - Convert Local Variable to Field
  2. Field name: valueOfSupply 그대로 두고 - public 체크
  • private static -> public static 으로 바뀜
  • 변수 선언은 바깥에서 하고 변수 값 세팅은 main 안에서 하는 것 권장

메소드로 바꾼 전체 코드

public class AccountingMethodApp {
	public static double valueOfSupply;
	public static double varRate;
	private static double expenseRate;

	public static void main(String[] args) {
		
		valueOfSupply = 10000.0 ;
		varRate = 0.1;
		expenseRate = 0.3;

		
		print();
	}

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

	private static double getDividend1() {
		return getIncome() * 0.5;
	}
	
	private static double getDividend2() {
		return getIncome() * 0.3;
	}
	
	private static double getDividend3() {
		return getIncome() * 0.2;
	}
	
	private static double getIncome() {
		return valueOfSupply - getExpense() ;
	}

	private static double getExpense() {
		return valueOfSupply * expenseRate;
	}

	private static double getTotal() {
		return valueOfSupply + getVAT();
	}

	private static double getVAT() {
		return valueOfSupply * varRate;
	}

}

14.10. 클래스 ( 강의 댓글 참고 )

클래스란 비슷한 종류의 멤버들(변수,메소드)을 묶어 놓아 이름붙여 정리해놓은 상자이다.
클래스를 사용하는 이유는

  • 여러 다른 종류의 변수/메소드들이 혼재되어 있어도 '클래스 소속'을 밝혀주면 각 멤버들의 성격을 한눈에 파악할 수 있음
  • 구현되어있는 변수,메소드들을 메인 스크립트에 다 적어줄 필요 없이, 클래스로 만들어 따로 빼놓고 필요한 부분에 클래스명.변수/메소드 식으로 바로 호출해 쓸 수 있어 편리함.
  • print처럼 흔한 이름의 메소드,변수가 여러 개 존재할 경우, 클래스 소속만 다르면 중복오류없이 한 스크립트내에 쓰일 수 있음.
class Accounting {  // 이 안에 다 넣어버리고
}

Accounting.valueOfSupply = 10000.0 ;
// 아래에서는 Accounting. (클래스 이름.) 붙이기

클래스 지정한 전체 코드

class Accounting {
	public static double valueOfSupply;
	public static double varRate;
	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 : " +  getDividend1()  );
		System.out.println( "Dividend 2 : " +  getDividend2()  );
		System.out.println( "Dividend 3 : " +  getDividend3()  );
	}

	// 근데 얘는 왜 private 으로 놔도 실행되 거지?
	private static double getDividend1() {
		return getIncome() * 0.5;
	}
	
	private static double getDividend2() {
		return getIncome() * 0.3;
	}
	
	private static double getDividend3() {
		return getIncome() * 0.2;
	}
	
	private static double getIncome() {
		return valueOfSupply - getExpense() ;
	}

	private static double getExpense() {
		return valueOfSupply * expenseRate;
	}

	private static double getTotal() {
		return valueOfSupply + getVAT();
	}

	private static double getVAT() {
		return valueOfSupply * varRate;
	}

}

public class AccountingClassApp {


	public static void main(String[] args) {
		
		Accounting.valueOfSupply = 10000.0 ;
		Accounting.varRate = 0.1;
		Accounting.expenseRate = 0.3;

		
		Accounting.print();
		
		// anotherVariable = ... ;
		// anotherMethod = ... ;

	}

}

14.11. 인스턴스 ( 강의 댓글 참고 ) -- 복습하기!!

인스턴스는 클래스를 복제한 복제본이다.

  • 인스턴스를 사용하는 이유는 "클래스의 각 기능들을 갖고있는 동시에 각 인스턴스마다 다른 데이터값을 넣어 사용할 수 있기 때문"이다. 클래스의 기능들에 여러 값을 자꾸 넣어줘야 할 시 이랬다 저랬다 하면 버그가 발생할 수 있는데, 인스턴스를 만들어 사용해 아예 '경우1' '경우2' ... 식으로 독립적인 인스턴스를 생성해 사용해버리면 버그발생과 같은 일을 미연에 방지할 수 있기 때문이다.
  • 인스턴스는 클래스로부터 비롯된 분신인데, 클래스가 붕어빵 틀이라면 인스턴스는 각 붕어빵 이다.

인스턴스 적용한 전체 코드

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

	public  double getDividend1() {
		return getIncome() * 0.5;
	}
	
	public  double getDividend2() {
		return getIncome() * 0.3;
	}
	
	public  double getDividend3() {
		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 = 이걸 이용하려면  public 뒤 'static'은 없애야
		Accounting a1 = new Accounting() ;
		a1.valueOfSupply = 10000.0 ;
		a1.vatRate = 0.1 ;
		a1.expenseRate = 0.3 ;
		
		Accounting a2 = new Accounting() ;
		a2.valueOfSupply = 20000.0 ;
		a2.vatRate = 0.05 ;
		a2.expenseRate = 0.2 ;

		a1.print() ;
	}

}

나에 맞게 추가해보기

  1. Scanner로 valueOfSupply, vatRate, expenseRate 받기
import java.util.Scanner;

class Accounting1 {
	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 : " +  getDividend1()  );
		System.out.println( "Dividend 2 : " +  getDividend2()  );
		System.out.println( "Dividend 3 : " +  getDividend3()  );
	}

	public  double getDividend1() {
		return getIncome() * 0.5;
	}
	
	public  double getDividend2() {
		return getIncome() * 0.3;
	}
	
	public  double getDividend3() {
		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 AccountingScannerApp {


	public static void main(String[] args) {
		
		Scanner in = new Scanner( System.in ) ;

		System.out.print( "물건의 공급가를 입력해주세요: " );
		double inVal = in.nextDouble() ;
		
		System.out.print( "부가세율을 입력해주세요 (기본:0.1): " );
		double inVat = in.nextDouble() ;
		
		System.out.print( "물건 생산에 소요되는 비용의 비율을 입력해주세요 (기본:0.3): ");
		double inExpense = in.nextDouble() ;
			
		Accounting1 a1 = new Accounting1() ;
		a1.valueOfSupply = inVal ;
		a1.vatRate =inVat ;
		a1.expenseRate = inExpense ;
		
		a1.print() ;
		
	}
}

0개의 댓글