생활코딩 JAVA 입문 수업

치즈말랑이·2021년 9월 25일
0
post-thumbnail

Write once, run anywhere

1. JAVA1 - 2.c Java설치 - 윈도우

https://www.oracle.com/java/technologies/downloads/

3.java 개발환경 eclipse 설치

4.1 실행 - HelloWorld

Package Explorer : 개발하기 편리하게 화면을 바꿔서 보여줌
Navigator : 파일을 있는 그대로 보여줌

public class HelloWorldApp {
	public static void main(String[] args ) {
		System.out.println("Hello World!!");
	}
}

4.2 실행 - Java의 동작원리

.java를 컴파일 하여 .class 파일을 만든다.

원인 : source, code, language
결과 : application, program

Java Source code (.java)
↓(Compile)
Java Application (.class)
↓(Run)
Java Virtual Machine
↓(Run)
computer

5. Hello Java World

5번 강의는 다 구경

5.a. 데스크톱 애플리케이션 만들기

import javax.swing.*;   
import java.awt.Dimension;
import java.awt.Toolkit;
public class HelloWorldGUIApp{
    public static void main(String[] args){
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("HelloWorld GUI");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setPreferredSize(new Dimension(800, 500));
                JLabel label = new JLabel("Hello World!!", SwingConstants.CENTER);
                frame.getContentPane().add(label);
                Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                frame.setLocation(dim.width/2-400/2, dim.height/2-300/2);

                frame.pack();
                frame.setVisible(true);
            }
        });
    }
} 

결과 :

5.b. 사물을 자바로 제어하기

라즈베리파이에는 GPIO라고 부르는 핀이 있다.
라즈베리파이로 전구 키기

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class HelloWorldRaspberryPi {

	public static void main(String[] args) throws InterruptedException {

		final GpioController gpio = GpioFactory.getInstance();
		final GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "PinLED", PinState.LOW);
		final int SHORT_INTERVAL = 200;
		final int LONG_INTERVAL = SHORT_INTERVAL * 3;
		final int LETTER_INTERVAL = SHORT_INTERVAL * 7;

		while (true) {
			// H
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LETTER_INTERVAL);

			// e
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LETTER_INTERVAL);

			// l
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(LONG_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LONG_INTERVAL);

			// l
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(LONG_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);

			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(SHORT_INTERVAL);
			pin.high();
			Thread.sleep(SHORT_INTERVAL);
			pin.low();
			Thread.sleep(LONG_INTERVAL);
		}
	}
}

pin.high(); : pin에 전기 줌
pin.low(); : pin에서 전기 뺌
final int SHORT_INTERVAL = 200;
Thread.sleep(SHORT_INTERVAL); : 0.2초만큼 키고 끔

5.c. 안드로이드 애플리케이션 만들기

구경

6.1. 데이터와 연산 (data & operation)

6.2. 데이터와 연산 (data & operation)

Number : +, -, /, *
String : length,substring,search

System.out.println(); 단축키 : sysout 쓰고 Ctrl+ Space

public class Datatype{
	public static void main(String[] args) {
		System.out.println(6); // Number
		System.out.println("six"); // String
		
		System.out.println("6"); // String 6
		
		System.out.println(6+6); // 12
		System.out.println("6" + "6"); // 66 결합연산자 (문자열을 위한 연산)
		
		System.out.println(6*6); // 36
//		System.out.println("6"*"6"); 
		
		System.out.println("1111".length()); // 4
//		System.out.println(1111.length());
		
		System.out.println("Hello World"); //String 문자열
        System.out.println('H'); //Char 문자
        System.out.println("H");
	}
}

6.3. 숫자와 연산


public class Number {

	public static void main(String[] args) {
		// Operator(연산자)
		System.out.println(6 + 2); // 8
		System.out.println(6 - 2); // 4
		System.out.println(6 * 2); // 12
		System.out.println(6 / 2); // 3
		
		System.out.println(Math.PI); // 3.141592653589793
		System.out.println(Math.floor(Math.PI)); // floor : 소수점 아래 버림
		System.out.println(Math.ceil(Math.PI)); // ceil : 올림
	}

}

6.4. 문자열의 표현


public class StringApp {

	public static void main(String[] args) {

		System.out.println("Hello World"); // String : 문자열
		System.out.println("H"); // Character : 문자
		
		System.out.println("Hello "
				+ "World");
		// \n: new line
		System.out.println("Hello \nWorld");
		
		// \"내용\": escape
		System.out.println("Hello \"World\""); // Hello "World"
	}

}

6.5. 문자열 다루기


public class StringOperation {

	public static void main(String[] args) {
		
		System.out.println("Hello World".length());
		System.out.println("Hello, [[name]] ... bye. ".replace("[[name]]", "egoing"));
	}

}

7. 작심삼일 공학

작심삼일 : 공부를 그만하라는 뇌의 명령
지금까지 배운 것과 삶의 문제의 접점을 찾으려고 한다.
중간에 그만 둔 사람 -> 아무것도 할 수 없는 무능한 상태
완주한 사람 -> 무엇부터 해야할지 모르는 무기력한 상태

8.1. 변수의 정의


public class Variable {

	public static void main(String[] args) {
		
		int a = 1; // Number -> integer (정수)
		System.out.println(a);
		
		double b = 1.1; // real number (실수) ... -2.0, -1.0, 0, 1.0, 2.0, ...
		System.out.println(b);
		
		String c = "Hello World" ;
		System.out.println(c);
	}

}

8.2. 변수의 효용


public class Letter {

	public static void main(String[] args) {
		String name = "egoing";
		System.out.println("Hello, " + name +  "..." + name + " egoing ... egoing ... bye");
		
		double VAT = 10.0;
		System.out.println(VAT);
	}

}

8.3. 데이터 타입의 변환 (casting)


public class Casting {

	public static void main(String[] args) {
		
		double a = 1.1;
		double b = 1; // int 1에서 double로 되도 잃는게 없어서 자동 변환
		double b2 = (double) 1;
		System.out.println(b); 
		
//		int c = 1.1; // 1.1은 바로 int로 변환하면 소수점 이하는 잃게되어 에러남
		double d = 1.1;
		int e = (int) 1.1; // int로 바꿔주겠다고 cast 해야 변환 가능
		System.out.println(e);
		
		// 1 to String
		String f=Integer.toString(1);
		System.out.println(f.getClass());
	}

}

9.1 프로그래밍이란 무엇인가?

프로그램: 시간의 순서에 따라 어떤 일이 일어나는 것
자동화(Automation)

9.2. 프로그램 만들기 - IoT 라이브러리 설치하기

다른사람이 만든 소스코드 가져오기
https://github.com/egoing/java-iot

org 폴더를 추가하면 이게 패키지가 된다.

9.3. IOT 프로그램 만들기

import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;
public class OKJavaGoinHome {

	public static void main(String[] args) {
		
		String id = "JAVA APT 507";
		
		// Elevator call
		Elevator myElevator = new Elevator(id); // myElevator의 데이터 타입은 Elevator 이다.
		myElevator.callForUp(1);
		
		// Security off
		Security mySecurity = new Security(id);
		mySecurity.off(); // 괄호로 시작해서 괄호로 끝나는 명령어 : 메소드
		
		// Light on
		Lighting hallLamp = new Lighting(id + " / Hall Lamp");
		hallLamp.on();
		
		Lighting floorLamp = new Lighting(id + " / floor Lamp");
		floorLamp.on();
		
		
		// 
	}

}

10. 디버거

9.3에서 작성한 코드로 디버깅을 한다.
우측 상단 디버그 버튼은 perspective 라고 하며 누르면 디버깅을 위한 창으로 변한다.
각 숫자를 더블클릭하면 breakpoint가 생긴다.
좌측 상단 stepover를 누르면 한 줄씩 디버깅을 하고, stepinto를 누르면 메소드가 어떻게 작동되는지에 대한 정보가 나온다.

11.1. 입력과 출력

INPUT -> Program -> OUTPUT
Argument : 프로그램을 실행할 때 텍스트 정보를 주는 것
File
Network
Audio
Program

11.2. 입력과 출력 : arguments & parameter

args : 매개변수 (사용자와 프로그램 사이의 값을 매개) = parameter
Run configurations에서 Arguments에 쓴 값이 args로 들어온다.
String[] : 문자열로만 되어있는 배열

// import javax.swing.JOptionPane;

import org.opentutorials.iot.DimmingLights;
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;

public class OKJavaGoinHomeinput {
	
	// parameter, 매개변수
	public static void main(String[] args) {
		
//		String id =JOptionPane.showInputDialog("Enter a ID");
//		String bright = JOptionPane.showInputDialog("Enter a Bright level");
		
		String id = args[0];
		String bright = args[1];
		
		// Elevator call
		Elevator myElevator = new Elevator(id); // myElevator의 데이터 타입은 Elevator 이다.
		myElevator.callForUp(1);
		
		// Security off
		Security mySecurity = new Security(id);
		mySecurity.off(); // 괄호로 시작해서 괄호로 끝나는 명령어 : 메소드
		
		// Light on
		Lighting hallLamp = new Lighting(id + " / Hall Lamp");
		hallLamp.on();
		
		Lighting floorLamp = new Lighting(id + " / floor Lamp");
		floorLamp.on();
		
		DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
		moodLamp.setBright(Double.parseDouble(bright));
		moodLamp.on();
		
		// 
	}

}

12.1. 직접 컴파일하고 실행하기 : 소개

  1. Compile : 자바 확장자가 붙은 소스 코드를 클래스 확장자가 붙은 실행 파일로 바꿈
  2. Compile Run : 클래스 확장자가 붙은 파일을 실행
  3. Compile Run Input : 실행할 때 입력값을 준다.

12.2. 직접 컴파일하고 실행하기 : 실행환경 살펴보기

cmd에서 위치에 상관없이 java를 입력하면 실행되는 이유 : 환경변수 때문
환경변수 : 윈도우의 경우 내컴퓨터-> 오른쪽 마우스 ->설정->환경변수->path->편집->경로추가

12.3. 직접 컴파일하고 실행하기 : 컴파일과 실행하기

cmd에서 .java 파일이 있는 위치로 이동하고 javac로 실행하면 컴파일이 된다.
java 클래스명 을 입력하면 클래스명에 부합하는 파일을 찾아서 main의 중괄호 안에 있는 내용을 순차적으로 출력하고 종료된다.

12.4. 직접 컴파일하고 실행하기 : 라이브러리 이용

library : 다른사람이 사용할 수 있게 정리된 파일들

java -cp ".;lib" OKJavaGoinHome
.;lib 은 현재 폴더와 lib폴더에서 찾는다는 의미

12.5. 직접 컴파일하고 실행하기 - 입력과 출력

args[0], args[1] 에 값을 넣는 방법
java OKJavaGoinHomeinput "Java APT 507" 15.0

13.1. 자바 문서 보는 법

API (Application Programming Interface) : 프로그램을 만들기 위해서 사용하는 조작 방법
UI (User Interface) : 우리가 사용하는 조작 방법

13.2. 자바 문서 보는 법 - 패키지, 클래스, 변수, 메소드

패키지 : 비슷한 성격의 클래스를 모아서 이름을 붙인 것 ex)java.lang
클래스 : 서로 연관된 변수와 메소드를 모아서 이름 붙임. 변수≈메소드

13.3. 자바 문서 보는 법 - 클래스


public class ClassApp {

	public static void main(String[] args) {
		
		System.out.println(Math.PI); 
		System.out.println(Math.floor(1.6));
		System.out.println(Math.ceil(1.6));
		
	}

}

13.4. 자바 문서 보는 법 - 인스턴스

https://docs.oracle.com/javase/7/docs/api/

documentation에서 찾았을 때 constructor(생성자)가 있으면 여러번 반복해서 쓸 때 사용(PrintWriter)
constructor를 이용해서 instance를 만드는 것이 허용되어 있다.
없으면 1회용 (Math. 함수)

Throws: 예외

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
public class InstanceApp {

	public static void main(String[] args) throws IOException {
		
//		PrintWriter p1 = new PrintWriter("result1.txt"); 
//		p1.write("Hello 1");
//		p1.close();
//		
//		PrintWriter p2 = new PrintWriter("result2.txt");
//		p2.write("Hello 2");
//		p2.close();
		
		
	}

}

new PrintWriter("result1.txt") : constructor
p1 : instance, 여기에 어떤 값이 올 수 있냐를 규제하기 위해 p1 앞에 PrintWriter class를 준다.

13.5 자바 문서 보는 법 - 상속

PrintWriter는 Writer를 상속받고, Writer는 Object를 상속받기 때문에
PrintWriter에 사용하려는 메소드가 없으면 Writer에 있는지 찾아보고, 그래도 없으면 Object에서 찾아본다.
Override : 부모클래스에서 메소드를 그대로 덮어쓰기 하는것

14.1. 나의 앱 만들기 - 오리엔테이션

이번에는 이런 프로세스에서 사용할 수 있는 앱을 만든다.

우선은 함수를 사용하지 않고 단순하게 작성해본다.


public class AccountingApp {

	public static void main(String[] args) {
		
		System.out.println("Value of supply : " +12345.0);
		System.out.println("VAT : " +(12345.0*0.1));
		System.out.println("Total : " +(12345.0+12345.0*0.1));
		System.out.println("Expense : " +(12345.0*0.3));
		System.out.println("Income : " +(12345.0-12345.0*0.3));
		System.out.println("Dividend : " +(12345.0-12345.0*0.3)*0.5);
		System.out.println("Dividend : " +(12345.0-12345.0*0.3)*0.3);
		System.out.println("Dividend : " +(12345.0-12345.0*0.3)*0.2);
	}

}

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

14.3. 나의 앱 만들기 - 변수도입


public class AccountingApp {

	public static void main(String[] args) {
		
		double valueOfSupply = 12345.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 : " +dividend1);
		System.out.println("Dividend : " +dividend2);
		System.out.println("Dividend : " +dividend3);
	}

}

14.4. 나의 앱 만들기 - 입력값 도입


public class AccountingApp {

	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 = 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 : " +dividend1);
		System.out.println("Dividend : " +dividend2);
		System.out.println("Dividend : " +dividend3);
	}

}

cmd로 실행할 때에는 java AccountingApp 33333.0 입력

14.5. 나의 앱 만들기 - 오리엔테이션2

14.6. 나의 앱 만들기 - 조건문 (Flow Control Statements)

제어문 : 조건문 + 반복문


public class AccountingAppif {

	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;
			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 : " +dividend1);
		System.out.println("Dividend : " +dividend2);
		System.out.println("Dividend : " +dividend3);
	}

}

14.7. 나의 앱 만들기 - 배열


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]; // double형 데이터로 이루어진 배열, 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 : " +dividend1);
		System.out.println("Dividend : " +dividend2);
		System.out.println("Dividend : " +dividend3);
	}

}

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;
		
		double[] dividendRates = new double [3]; // double형 데이터로 이루어진 배열, double형 3개 담을 수 있다.
		dividendRates[0] = 0.5;
		dividendRates[1] = 0.3;
		dividendRates[2] = 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);
		
		int i = 0;
		while(i < dividendRates.length) {
			System.out.println("Dividend : " + income * dividendRates[i]);
			i = i + 1;
		}

	}

}

14.9. 나의 앱 만들기 - 메소드

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


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

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

}

getDividend1,2,3에서 각 퍼센트가 없는데 어떻게 계산이 되는건지 이해가 안된다.

코딩은 하면 할수록 마법같다.

14.10. 나의 앱 만들기 - 클래스

객체(class)는 서로 연관된 메소드와 변수를 그룹핑하여 이름을 붙인 것이고 정리정돈의 상자이다.

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

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

	

}

class를 하나 만들어서 그 안에 다 넣고, variable들을 Accounting소속이라고 명시함으로써 더 구조를 단단하게 한다.
객체지향의 기본

14.11. 나의 앱 만들기 - 인스턴스

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

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 : " +getDividend1());
		System.out.println("Dividend : " +getDividend2());
		System.out.println("Dividend : " +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 : class 앞에 new 붙여서 복제한 것
		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();
		
	}
}

15. 수업을 마치며

2021.09.25~2021.09.26

profile
공부일기

0개의 댓글