[Java] 나의 앱 만들기

당당·2023년 4월 19일
0

Java

목록 보기
10/20

📔설명

자바 어플리케이션을 하나 만들어보자!


🌊변수 없는 앱

Edit->Find/Replace에서 값을 다른 값으로 변환할 수 있다.
먼저 처음에는 변수 없이 코딩을 해보자.

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);//배당 1
		System.out.println("Dividend : "+(12345.0-12345.0*0.3)*0.3);//배당 2
		System.out.println("Dividend : "+(12345.0-12345.0*0.3)*0.2);//배당 3
	}

}

대체 똑같은 값을 몇번이나 적은건지!
불편한 점이 나와야 개선을 할 수 있다.


🌝변수 도입

이제는 변수를 도입해보자.

이클립스에는 아까 위의 12345.0 수 위에 우클릭을 하면
Refactor->Extract Local variable
변수로 한번에 치환할 수 있다. 엄청난 기능! (Shift+Alt+L)

지금봤는데 저 위의 사진에서 부가가치세 +가 아니고 *입니다..

일괄 변경할 때 preview를 보면 어떻게 변할지 미리 확인할 수 있다.
0.3을 expense로 바꾸려고 하니 저 빨간 부분은 분배 비율이지 expense가 아니다.
그러므로 이것은 수동으로 바꿔주자..

그리고 댓글을 통해 알게된 엄청 좋은 단축키가 하나 더 있다!
ALT+방향키 를 하면 해당 줄을 원하는 위치로 옮길 수 있다!!!

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 : "+dividend1);//배당 1
		System.out.println("Dividend : "+dividend2);//배당 2
		System.out.println("Dividend : "+dividend3);//배당 3
	}

}

변수를 도입해서 좋으나, 사용자의 값을 입력받을 수 없는 점이 불편하다!!!


💻입력값 도입

그러므로 이번엔 입력값 도입을 하자~

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);//배당 1
		System.out.println("Dividend : "+dividend2);//배당 2
		System.out.println("Dividend : "+dividend3);//배당 3
	}

}

args는 String 타입이므로
Double.parseDouble을 통해 Double타입으로 형 변환을 해주자.

그 다음 터미널을 켜서 터미널을 통해 해당 프로그램을 실행해보자.

class 파일을 실행해보자~ (AccountingApp.class)

https://develop247.tistory.com/149

나는 오류가 떠서
해당 티스토리를 참고하고 다시 컴파일하고 실행시켰다

마지막에 꼭 인자를 써주자~~
하지만 다른 컴퓨터에서는 AccountingApp.class를 실행시키고 싶은데
다른 컴퓨터에 jvm이 설치되어있어야 한다는 것이다..!!!!

jvm을 설치안하고 실행시키고 싶다면 launch4j를 이용하면 된다고 한다.


💬조건문 도입

해당 프로젝트에 조건문을 도입해보자.

만약 이익이 만원보다 작을 경우, 첫번째 사람이 이익을 다가지고
그렇지 않으면 5대 3대 2로 나눈다고 가정하자.
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 : "+dividend1);//배당 1
		System.out.println("Dividend : "+dividend2);//배당 2
		System.out.println("Dividend : "+dividend3);//배당 3
	}

}

입력값을 설정안해주면 오류가 난다.

이렇게 두개 만들어서 실행시켜주자.

공급가가 5만일때

공급가가 5만일때

공급가가 5천일때

공급가가 5천일때


📚배열 도입

배열을 이용해보자.

분배 비율을 배열을 이용해 저장하여 무엇을 의미하는지 알 수 있도록 하자.
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]; //size 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);//배당 1
		System.out.println("Dividend : "+dividend2);//배당 2
		System.out.println("Dividend : "+dividend3);//배당 3
	}

}


배열은 서랍장과 같은 역할을 한다.
실행하면 이전과 같은 결과지만 훨씬 편하게 된다.
하지만 for문을 쓰면 더 편할거같은데...


💫반복문 도입

반복문을 사용해보자.
배열과 반복문은 함께 쓰면 폭발적인 효과가 나타난다.

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]; //size 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;
		}
		
	}

}

한 줄 짜리가
dividendRates.length 의 크기 만큼 반복되게 된다. 즉 3번 출력된다.


💨메소드 도입

메소드는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자이다.
부가가치세 계산 코드를 메소드로 만들어보자.

아까 사용했던 Shift+ALT+L과 비슷하게
Shift+ALT+M을 하면 메소드로 변환해준다.

자바에서는 전역변수필드라고 한다.

public class AccountingMethodApp {

	public static double valueOfSupply; //global variable(Field)
	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());//배당 1
		System.out.println("Dividend : "+getDividend2());//배당 2
		System.out.println("Dividend : "+getDividend3());//배당 3
	}

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

}

메소드를 사용하니 진짜 훨씬 깔끔한 코드가 되었다.

와우!


🎁클래스 도입

클래스는 서로 연관된 변수와 메소드를 그룹핑한것이고, 그곳에 이름을 붙인것이다!

class Accounting{
	public static double valueOfSupply; //global variable(Field)
	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());//배당 1
		System.out.println("Dividend : "+getDividend2());//배당 2
		System.out.println("Dividend : "+getDividend3());//배당 3
	}

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


}

Accounting 클래스에 변수와 메소드를 넣어서
Accounting.~~ 를 통해 main문에서 호출을 해보았다!!

하지만 클래스 인스턴스를 따로 만들어서 호출하는것도 편할것같은데..


👍🏻인스턴스 도입

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

class Accounting{
	public double valueOfSupply; //global variable(Field)
	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());//배당 1
		System.out.println("Dividend : "+getDividend2());//배당 2
		System.out.println("Dividend : "+getDividend3());//배당 3
	}

	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
		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을 지워야 해서 위의 클래스
아래 변수들과 메소드들의 static을 지워야한다!


🕦이후

다음은 Java 제어문에 대해서 공부해보려고 한다!

profile
MySQL DBA 신입 지원

0개의 댓글