이것저것 공부기록
[부스트코스] 자바로 회계 처리 프로그램 만들기_2 (조건문, 배열, 반복문) 본문
*부스트코스 <쉽게 배우는 자바1> 강의를 통해 학습한 내용+개인적으로 공부한 내용을 바탕으로 작성한 글입니다.
이전 글에서 만든 프로그램에 여러 가지 기능을 추가해보면서 제어문과 배열에 대해서 알아보고 메소드, 클래스, 인스턴스를 어떻게 활용할 수 있는지 보도록 하자.
4. 조건문
제어문은 프로그램의 실행 과정을 조건에 따라 바꾸는 것인데, 자바의 제어문에는 조건문과 반복문 두 가지가 있다.
그리고 조건문에는 if문과 switch/case문이 있는데, 이번에는 if문을 사용해보자.
문제 상황에 다음과 같은 조건이 새로 추가되었다고 하자.
수익(income)이 1만원을 넘을 경우에만 동업자들에게 기존의 배당률대로 수익을 배당한다.
수익이 1만원 이하일 때는 1번 동업자에게만 모든 수익을 배당한다.
if문의 기본 구조는 다음과 같다.
if (조건문) {
<수행할 문장 1>
<수행할 문장 2>
⋯
} else {
<수행할 문장 1>
<수행할 문장 2>
⋯
}
조건문이 참이면 if문 바로 다음의 문장들을 수행하고, 거짓이면 else문 다음의 문장들을 수행한다.
* if - else 문만으로는 다양한 조건 판단을 하기가 어렵기 때문에 else if를 이용해 다중 조건 판단을 할 수 있다.
추가된 조건은 판단해야 할 사항이 하나뿐이기 때문에 if와 else만을 사용해도 충분히 구현할 수 있다.
배당률을 선언해주는 부분을 다음과 같이 수정한다.
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;
}
만약 아래처럼 if문 안에서 변수를 선언하면 괄호를 빠져나오는 순간 변수가 사라지며 실행 시 변수를 찾을 수 없다는 오류 메시지가 뜨므로 주의해야 한다. (변수의 선언 위치에 따라 생존 범위가 달라짐)
if (income > 10000.0) {
double dividend1 = income * 0.5;
double dividend2 = income * 0.3;
double dividend3 = income * 0.2;
} else {
double dividend1 = income * 1.0;
double dividend2 = income * 0;
double dividend3 = income * 0;
}
5. 배열(Array)
배열은 조건문을 알고 있어야 배울 수 있는 것이 아니므로, 조건문을 구현하기 전의 코드를 가지고 배열을 익혀보자.
먼저 배당률에 해당하는 변수를 생성해준다.
double rate1 = 0.5;
double rate2 = 0.3;
double rate3 = 0.2;
double dividend1 = income * rate1;
double dividend2 = income * rate2;
double dividend3 = income * rate3;
배당률인 rate1, rate2, rate3은 코드를 작성할 당시에는 같은 성격을 띠는 변수임을 인지하고 있지만, 훗날 다시 코드를 봤을 때 한눈에 알아보기 힘들 수도 있고 흔한 변수명 때문에 코드 중간에 값이 변경되어 프로그램이 전혀 엉뚱하게 돌아갈 수도 있다. 또한 만약 동업자가 늘어나 수익을 배당할 인원이 늘게 되면, rate4, rate5, ⋯ 처럼 계속해서 변수를 추가해야 한다.
이처럼 서로 연관된 정보, 같은 성격의 정보들을 묶어서 표현하고 관리하고 싶은 경우 사용하는 것이 배열이다. 또한 배열을 사용함으로써 변수를 무한정 늘릴 필요도 없어진다.
배열은 같은 자료형을 여러 개 담을 수 있는 객체로, 위 코드를 배열을 이용하여 수정하면 다음과 같다.
double[] dividendRates = new double[3]; // 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];
첫 줄은 dividendRates라는 이름을 가진 double형 데이터 3개를 담을 수 있는 상자를 만든 것과 같고, 배열 내의 데이터에 접근할 때는 인덱스를 이용한다. (인덱스는 0부터 시작한다.)
데이터 타입 옆에 대괄호([])를 붙여 배열임을 나타내고, 인스턴스를 만들 때는 배열의 길이를 지정하여 생성한다.
배열은 반복문과 함께 사용할 때 그 편리성이 극대화되므로, 반복문에 대해 알아보고 프로그램을 좀 더 좋은 방향으로 수정해보자.
6. 반복문
반복문(loop)은 제어문 중 하나로, 조건이 참인 한 해당되는 구간을 계속 반복한다.
반복문에는 for문, while문, do while문 등이 있는데, 이번에는 while문을 사용해볼 것이다.
System.out.println("Dividend 1 : " + dividend1);
System.out.println("Dividend 2 : " + dividend2);
System.out.println("Dividend 3 : " + dividend3);
앞서 했던 가정을 다시 해보도록 하겠다.
위 코드는 전체 코드 중 일부로, 배당금을 출력해주는 부분이다. 위 세 줄은 똑같은 기능을 하지만, 서로 다른 데이터를 사용한다는 점에서 다르다고 할 수 있다.
만약 동업자가 10명, 100명으로 늘어나면 출력을 위한 print문도 10줄, 100줄이 될 것이다. 어딘가 수정해야 될 일이라도 생기게 된다면 한 줄 한 줄 수정해야 하는데, 반복문을 사용하면 print문을 한 줄로 표현할 수 있다.
int i = 0;
while (i < dividendRates.length) { // dividendRates.length = 3 (배열의 길이, 원소의 개수)
System.out.println("Dividend : " + (income*dividendRates[i]));
i = i + 1;
}
정수형 변수 i를 선언하고 이를 이용해 반복문의 횟수를 조절한다.
i가 0부터 시작하여 0, 1, 2일 때까지 조건이 참이므로 블록 안의 작업을 문장들을 수행하여 총 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;
}
// 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);
while문을 이용해 반복적으로 동작하던 작업을 간결하게 바꿀 수 있게 되었다.
* 반복문의 횟수를 조절하는 변수 i를 배열의 인덱스로 사용한 부분을 잘 봐두면 좋을 것 같다. 반복문으로 배열 내의 데이터에 쉽게 접근할 수 있기 때문에 함께 쓰면 굉장히 편하다.
조건문과 배열, 반복문은 지난 1년동안 자주 보고 썼기에 매우 익숙했다. 평소 코딩할 때 "이러이러한 상황이니까 이 문법을 써야지"라고 생각조차 하지 않을 정도로 당연한 것이 되어버렸다. 그래서 이미 알고 있는 내용인 만큼 그 사용법에 대해 고민하기보다는, 어떤 부분을 개선하기 위해 이 문법이 만들어졌는지에 집중하면서 처음 배울 때처럼 강의를 들었다.
C를 가장 먼저 배웠는데, 그 후에 C++을 배웠을 때는 객체와 참조 등이 추가되어서 그 느낌이 확연히 달랐고, 파이썬은 인터프리터 언어라서 새로웠는데 자바는 아직까지는 C++이랑 비슷하다는 생각이 많이 들었다. 기본적인 문법과 기초 개념은 다 비슷비슷하니까, 조금만 찾아보고 공부해도 간단한 프로그램은 만들 수 있을 것 같다. 이래서 언어 하나를 잘 배워두면 다른 언어를 배울 때 쉽게 배울 수 있다는 거구나 생각했다.
다 함께 배우고 성장하는 부스트코스
부스트코스(boostcourse)는 모두 함께 배우고 성장하는 비영리 SW 온라인 플랫폼입니다.
www.boostcourse.org
'부스트코스 서포터즈 3기' 카테고리의 다른 글
[부스트코스] 쉽게 배우는 자바1 완강 (0) | 2021.01.27 |
---|---|
[부스트코스] 자바로 회계 처리 프로그램 만들기_3 (메소드, 클래스, 인스턴스) (0) | 2021.01.27 |
[부스트코스] 자바로 회계 처리 프로그램 만들기_1 (변수, 입력값) (0) | 2021.01.26 |
[부스트코스] 자바 API와 클래스, 인스턴스, 패키지, 상속 (0) | 2021.01.25 |
[부스트코스] 자바 직접 컴파일하고 실행하기 (0) | 2021.01.21 |