▶︎[JAVA]맛보기 포스팅는 유튜브 '생활코딩'의 JAVA1 수업을 수강하며 기록했다.
이번 수업의 목적
1. 최소한으로 배워서 최대한으로 활용하는 사례 보기
2. 아는 것만으로 한계가 오는 상황에서, 그 불편함을 해소해주는 지식을 공부하고 프로젝트에 반영하는 사례 보기
각각의 지식은 문제 해결을 위한 목적지임과 동시에, 더 많은 지식을 배우기 위한 경유지가 된다.
수업에서 만들 App의 내용
-> 물건을 팔고 세금(VAT)과 비용을 제외한 후 남은 이익을 동업자들과 나누는 작업

매번 계산기로 하기에는 번거롭고, 시중에 나와있는 기업용 프로그램은 너무 복잡하니까!
*현실에서 발견한 문제를 자바로 해결해보는 경험이 매우 중요하다
본질적인 기능(명령을 시간의 순서에 따라 실행)을 구현해보자.
->구현 후 생기는 불만족에 대해서 해결할 수 있는 지식들을 추가할 것이다.
System.out.println("Value of supply : "+10000.0); // 공급가
System.out.println("VAT : "+ (10000.0*0.1)); // 부가가치세
System.out.println("Total : "+ (10000.0 + 10000.0*0.1)); // 판매가
System.out.println("Expense : "+ (10000.0*0.3)); // 비용
System.out.println("Income : "+ (10000.0 - 10000.0*0.3)); // 이익
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.5 );
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.3 );
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.2 ); //5:3:2 배당
계산기로 여러번 두드려야 할 일을 한번에 계산하는 과정을 만들었다. (오리엔테이션 그림 참고)
여기서 공급가가 바뀔 때, 변수를 사용하지 않고 쉽게 적용할 수 있을까?
command+F 로 Find/Replace 를 열어 공급가를 변경해줄 수 있다.

지금까지 만든 앱에서 불편한 점:
1. 판매수익이 발생할 때마다 Find/Replace로 공급가 값을 변경해줘야 한다.
2. 비용이 수정될 수도 있다.
3. Find/Replace로 값을 변경할 때, 원하지 않는 부분(값이 동일)도 함께 바뀔 위험성이 있다.
4. 각 줄에서 반복되는 연산이나 값들의 의미를 바로 알기 어렵다.
System.out.println("Value of supply : "+10000.0); // 공급가
System.out.println("VAT : "+ (10000.0*0.1)); // 부가가치세
System.out.println("Total : "+ (10000.0 + 10000.0*0.1)); // 판매가
System.out.println("Expense : "+ (10000.0*0.3)); // 비용
System.out.println("Income : "+ (10000.0 - 10000.0*0.3)); // 이익
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.5 );
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.3 );
System.out.println("Dividend : " + (10000.0 - 10000.0*0.3) * 0.2 ); //5:3:2 배당
여기서 10000.0이라는 공급가를 변수로 정의해서 수정을 보다 편하게 하고싶다.
그런데, 이미 너무 많이 쓰여있어서 변수 정의 후 하나하나 교체해주는 게 귀찮다.
반복되는 값을 변수로 정의하고 싶을 때:
값 선택 - 우클릭 - Refactor - Extract Local Variable 변수명을 입력한 후 Ok
(단축키: opt+cmd+L)
*Preview를 통해 수정되는 곳을 미리 확인할 수 있다.
무턱대고 변수로 변경하면 같은 값의 부분들이 모두 바뀌어버릴 수 있기 때문에 조심해야 한다.
double ValueOfSupply = 12345.0;
System.out.println("Value of supply : "+ValueOfSupply);
System.out.println("VAT : "+ (ValueOfSupply*0.1));
System.out.println("Total : "+ (ValueOfSupply + ValueOfSupply*0.1));
System.out.println("Expense : "+ (ValueOfSupply*0.3));
System.out.println("Income : "+ (ValueOfSupply - ValueOfSupply*0.3));
System.out.println("Dividend : " + (ValueOfSupply - ValueOfSupply*0.3) * 0.5 );
System.out.println("Dividend : " + (ValueOfSupply - ValueOfSupply*0.3) * 0.3 );
System.out.println("Dividend : " + (ValueOfSupply - ValueOfSupply*0.3) * 0.2 );
위 코드는 Extract Local Variable 을 통해서 공급가가 변수로 정의된 모습이다.
이런식으로 변수로 정의할 수 있는 모든 값을 정리한다.
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("Dividend1 : " + dividend1 );
System.out.println("Dividend2 : " + dividend2 );
System.out.println("Dividend3 : " + dividend3 );
변수 정의를 통한 코드 1차 정리를 통해
1. 각각의 값과 연산의 의미를 명확히 알 수 있게 되었다.
2. 공급가 변경 시 변수 정의 부분만 수정하여 안전하고 간편하게 해결할 수 있게 되었다.
지금까지 만든 앱에서 불편한 점:
1. 공급가가 바뀔때마다 코드를 수정해야 한다.
공급가(변수 ValueOfSupply)를 입력값으로 받아오도록 코드를 변경했다.

그런데 오류가 떴다.
이유는 args로 들어오는 값은 String 형식인데 ValueOfSupply의 데이터 타입은 double이기 때문이다.
따라서 String을 double로 변환하는 코드를 추가해야한다.

Double.parseDouble("")라는 메소드를 찾았다.

오류가 사라졌다. 야호우!
arguments에 입력값을 미리 설정해주고 실행해보니 결과가 잘 나온다.
그렇다면 이클립스 없이 간편하게 이 프로그램을 사용해보자!
*작업 중인 프로젝트 경로 보는 방법:
Package Explorer에서 프로젝트 우클릭 - Properties - Resource 선택
우측에서 Location에 쓰인 디렉토리 경로 복사

Terminal에서 복사한 경로로 내 위치를 이동시킨 후,
java 파일명 입력값 이라는 명령어를 통해 입력값을 넣어 프로그램을 실행했다.
각 입력값이 변할때마다 그에 맞는 결과가 도출되는 것을 볼 수 있다.
그렇다면 이 자바 프로그램을 다른 컴퓨터에서도 실행할 수 있을까?
소스코드도 함께 가져가고 싶다면 .java 와 .class 파일을 둘다 가져가면 되지만,
실행에 필요한 파일은 .class 파일이다. 그 파일을 전송한다.
(*실행하고자 하는 다른 컴퓨터에도 java는 설치되어 있어야 실행된다.)
java가 설치되어 있지 않은 컴퓨터에서 프로그램을 사용하게 하고 싶다면?
Launch4j와 같은 프로그램을 통해 어디서든 실행할 수 있는 형태로 감쌀 수 있다.
지금까지 만든 앱에서 불편한 점:
1. terminal을 사용하지 않고도 사용할 수 있도록 input상자를 통해 입력값을 받을 수 있다면 좋겠다.
느낀 점
이렇게 간단하지만 유용한 프로그램을 만들어보니, 내 실생활에서도 복잡한 과정들이 필요한 일들을 자바로 해결해볼 수 있지 않을까 하는 흥미가 생겼다.
직접 만들고 싶은 프로그램을 만들어 보면서 공부를 해나가는 것이 기억에도 잘 남고 재미있을 것 같다.
아주 간단한 일이라도 내가 자주 하는 작업 중 자바로 해결할 수 있는 일을 고민해봐야겠다.
건강관리? 술자리 N/1 계산법?(2~3차 인원변경시) 등