1. 조건문
1-1조건문이란?
- 조건문이란 주어진 조건에 따라 다른 문장을 선택할 수 있도록 프로그래밍하는 것을 말합니다.
1-2 if문과 if-else문
- 조건문의 가장 단순한 형식은 if문입니다.
- if를 우리말로 해석하면 '만약 ~이라면'입니다.
- if문의 형식은 아래와 같습니다.

- 주어진 조건식이 참일 경우에 중괄호 안에 있는 문장을 수행합니다.
- 조건식에는 결과가 참, 거짓으로 판별되는 식이나 참, 거짓의 값을 가진 변수, 상수를 사용할 수 있습니다.
- 연산의 결과가 참, 거짓이 되는 관계 연산자를 자주 사용합니다.
- '만약 나이가 8살 이상이면 학교에 다닌다'라는 문장을 if문으로 나타내면 아래와 같습니다.

- 조건식을 만족하는 경우와 만족하지 않는 경우를 모두 나타낼 때는 if-else문을 사용합니다.
- if-else문은 '만약 ~이라면, 그렇지 않다면'으로 해석할 수 있습니다.
- 주어진 조건식이 '참'일 경우에 if문 블럭 안에 있는 문장을 수행하고 '거짓'일 경우에는 else문 블럭 안에 있는 문장을 수행합니다.
- 즉 else문에는 '조건식'을 사용하지 않습니다.
- if-else문의 형식은 아래와 같습니다.

if-else문 예제
- if-else문을 사용하면 처음에 설명한 '만약 나이가 8살 이상이면 학교에 다닌다. 그렇지 않으면 학교에 다니지 않는다'라는 문장을 코드로 나타낼 수 있습니다.
예제 4-1 나이에 따라 다른 문장 출력하기
public class IfExample1 {
public static void main(String[] args) {
int age = 7;
if(age >= 8) {
System.out.println("학교에 다닙니다.");
} else {
System.out.println("학교에 다니지 않습니다.");
}
}
}

- age 변수 값이 7이므로 '학교에 다니지 않습니다.'라는 결과 값이 나왔습니다.
1-3 if-else if-else문
- 하나의 상황에 조건이 여러 개인 경우 if-else if-else문으로 표현할 수 있습니다.
- if-else if-else문의 형식은 아래와 같습니다.

- if-else if-else문에서는 하나의 조건을 만족하면 이후의 조건은 비교하지 않습니다.
예제 3-2 if-else if-else문으로 입장료 계산하기
public class IfExample2 {
public static void main(String[] args) {
int age = 25;
int charge;
if(age < 8) {
charge = 1000;
System.out.println("취학 전 아동입니다.");
} else if(age < 14){
charge = 2000;
System.out.println("초등학생입니다.");
} else if(age < 20){
charge = 2500;
System.out.println("중, 고등학생입니다.");
} else {
charge = 3000;
System.out.println("성인입니다.");
}
System.out.println("입장료는 " + charge + "원 입니다.");
}
}

if-else if문과 if-if문의 차이
- if-else if문은 하나의 조건을 만족하면 나머지 조건을 비교하지 않고 다음 수행문으로 넘어갑니다.
- if문으로만 이루어진 코드는 조건마다 각각 비교합니다.
- 예로 age를 7이라고 생각하면 모든 성인일때를 제외하고 모두 충족하므로 원하지 않는 출력 결과가 나올 것입니다.
- 코드를 작성할 때 하나의 상황에 여러 조건을 비교하는 경우에는 if-else if문으로 구현해야 합니다.
- 하나의 조건을 만족하면 그렇지 않은 경우를 더 이상 비교하지 않습니다.
- 나이같이 동일 조건이 아닌 성별처럼 개별 조건을 비교해야 하는 상황일때는 if문을 따로 사용해야 합니다.
1-4 조건문과 조건 연산자
- if-else문은 Chapter3에서 배운 조건 연산자로도 구현할 수 있습니다.
- 서로 다른 두 수 a, b를 비교해서 둘 중 더 큰 수를 max 변수에 대입하는 코드를 구현할 때 if-else문과 조건 연산자를 사용한 코드는 아래와 같습니다.

- 두 코드 중 if-else문으로 구현한 코드가 가독성은 더 좋습니다.
- 단, 간단한 조건문이고 선택이 두 가지만 있는 경우에는 조건 연산자도 사용한다는 것을 기억해두면 좋습니다.
1-5 switch-case문
- 조건문을 구현할 때 if문을 사용하면 번거로운 경우가 있습니다.

- 조건식의 결과가 정수 또는 문자열 값이고 그 값에 따라 수행되는 경우에는 switch-case문으로 구성하는 것이 코드도 깔끔하고 가독성도 좋습니다.
- case문에는 여러 문장이 있어도 { }를 여러 번 사용하지 않습니다.
- case; ~ break;까지가 조건에 해당하는 문장입니다.
- switch-case문의 일반적인 형식은 아래와 같습니다.

- if-else if문을 살펴보면 모든 조건을 만족하지 않을 경우에 맨 마지막 else문이 수행됩니다.
- switch-case문에서는 default문이 else문과 같은 역할을 합니다.
- 주어진 값이 어떤 case에도 해당하지 않으면 맨 마지막 default문을 수행합니다.
- break문은 switch-case문의 수행을 멈추고 빠져나가도록 만드는 역할을 합니다.
- switch-case문은 주로 조건이 하나의 변수 값이나 상수 값으로 구분되는 경우에 사용합니다.
예제 3-3 switch-case문 예제
public class SwitchCase1 {
public static void main(String[] args) {
int ranking = 1;
char medalColor;
switch(ranking) {
case 1: medalColor = 'G';
break;
case 2: medalColor = 'S';
break;
case 3: medalColor = 'B';
break;
default:
medalColor = 'A';
}
System.out.println(ranking + "위의 메달 색깔은 " + medalColor + "입니다.");
}
}

case문 동시에 사용하기
- case문은 여러 경우를 동시에 처리할 때도 자주 사용합니다.
- 각 달의 날짜를 출력하는 예제가 여기에 해당됩니다.

swtich-case문에서 break문의 역할
- break문은 swtich-case문의 수행을 멈추고 빠져나가도록 만든다고 했습니다.
- break문을 사용하지 않으면 첫 번째 case 조건을 만족해서 변수가 대입되더라도 switch-case문을 빠져나오지 않고, 모두 수행되어서 맨 마지막 default문에 있는 값이 변수에 대입됩니다.
1-6 case문에 문자열 사용하기
- 문자열을 직접 case문에 사용할 수 있으므로 프로그램을 좀 더 간결하게 구현할 수 있습니다.
예제 4-4 switch-case문 예제(2)
public class SwitchCase2 {
public static void main(String[] args) {
String medal = "Gold";
switch(medal) {
case "Gold":
System.out.println("금메달입니다.");
break;
case "Silver":
System.out.println("은메달입니다.");
break;
case "Bronze":
System.out.println("동메달입니다.");
break;
default:
System.out.println("메달이 없습니다.");
break;
}
}
}

2 반복문
2-1 반복문이란?
- 반복되는 일을 처리하기 위해 사용하는 것이 반복문입니다.
- 반복문의 종류에는 while문, do-while문, for문이 있습니다.
2-2 while문
- while문은 조건식이 참인 동안 수행문을 반복해서 수행합니다.
- while문의 형식은 아래와 같습니다.

- 어떠한 조건식을 만족하는 동안 중괄호 { } 안의 수행문을 반복해서 처리합니다.
- 조건문과 마찬가지로 수행문이 하나인 경우에는 { }를 사용하지 않을 수 있습니다.
- 아래는 while문이 반복되는 과정을 보여 주는 표입니다.

예제 4-5 while문 활용하여 1부터 10까지 더하기
public class WhileExample1 {
public static void main(String[] args) {
int num = 1;
int sum = 0;
while(num <= 10) { // num 값이 10보다 작거나 같을 동안
sum += num; // 합계를 뜻하는 sum에 num을 더하고
num++; // num에 1씩 더해감
}
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}

- 변수를 사용하여 연산을 하거나 그 값을 가져다 사용하려면 변수는 반드시 어떤 값을 가지고 있어야 합니다.
while문이 무한히 반복되는 경우
- while문은 특정 조건을 만족하는 동안 반복되는 명령을 수행하고, 그렇지 않으면 수행을 중단한 후 while문을 빠져나옵니다.
- 어떤 일을 수행할 때는 멈추면 안되고 무한 반복해야 하는 경우도 있습니다.
- 예로 인터넷 쇼핑몰이 24시간 서비스하기 위해서는 웹 서버가 멈추지 않고 끊임없이 돌아가야 합니다.
- 웹 서버처럼 끊임없이 돌아가는 시스템을 데몬(daemon)이라 부릅니다.
- 데몬 서비스를 구현할 때 무한 반복을 사용합니다.
- 아래는 while문의 조건이 true인 경우입니다.

- 조건식 자리에 true가 들어가면 조건이 항상 '참'이 되어 무한 반복을 하게 됩니다.
2-3 do-while문
- while문은 조건을 먼저 검사하기 때문에 조건식에 맞지 않으면 반복 수행이 한 번도 일어나지 않습니다.
- do-while문은 { } 안의 문장을 무조건 한 번 수행한 후에 조건식을 검사합니다.
- 즉 조건이 만족하는지 여부를 마지막에 검사합니다.
- 중괄호 안의 문장을 반드시 한 번 이상 수행해야 할 때 while문 대신 do-while문을 사용합니다.
- 아래는 do-while문의 형식입니다.

예제 4-6 do-while문 예제
public class DoWhileExample {
public static void main(String[] args) {
int num = 1;
int sum = 0;
do {
sum += num; // 조건식이 참이 아니더라도 무조건 한 번 수행함
num++;
} while(num <= 10);
System.out.println("1부터 10까지의 합은 " + sum + "입니다.");
}
}

2-4 for문
- 반복문 중에서 가장 많이 사용하는 반복문이 for문입니다.
- for문은 while문이나 do-while문보다 구조가 조금 더 복잡합니다.
- 반복문을 구현하는데 필요한 여러 요소(변수의 초기화식, 조건식, 증감식)를 함께 작성하기 때문입니다.
for문의 기본 구조
- 아래는 for문의 형식입니다.
- 형식

- 초기화식은 for문이 시작할 때 딱 한 번만 수행하며 사용할 변수를 초기화합니다.
- 조건식에서 언제까지 반복 수행할 것인지를 구현합니다.
- 증감식에서 반복 횟수나 for문에서 사용하는 변수 값을 1만큼 늘리거나 줄입니다.
for문의 수행 순서을 이해하기 위한 예

단계 1
- (1) 처음 for문이 시작할 때 출력할 숫자인 num은 1로 초기화합니다.
단계 2
- (2) 조건식 num <= 5를 검사 했을 때 num은 1이므로 참입니다.
- (3) 조건식이 참이기 때문에 fot문의 System.out.println(num);을 수행하고 1을 출력합니다.
- (4) 증감식 num++를 수행하여 num 값은 2가 됩니다.
단계 3
- (2) 조건식 num <= 5를 검사 했을 때 num은 2이므로 참입니다.
- (3) 조건식이 참이기 때문에 fot문의 System.out.println(num);을 수행하고 2을 출력합니다.
- (4) 증감식 num++를 수행하여 num 값은 3가 됩니다.
-------------------------단계 3을 계속해서 반복함---------------------------
단계 4
- (2) 조건식 num <= 5를 검사했을 때 num 값은 6이므로 거짓임. for문이 끝납니다.
- 위 내용을 표로 정리하면 아래와 같습니다.

예제 4-7 for문 예제
public class ForExample1 {
public static void main(String[] args) {
int i;
int sum;
for(i = 1, sum = 0; i <= 10; i++) {
sum += i;
}
System.out.println("1부터 10까지의 합은 " + sum +"입니다.");
}
}

- 초기화 부분과 증감식 부분도 콤마( , )로 구분하여 여러 문장을 사용할 수 있습니다.
for문을 자주 사용하는 이유
- for문을 가장 많이 사용하는 이유는 반복 횟수를 관리할 수 있기 때문입니다.
- for문을 사용하여 구현하면 초기화, 조건 비교, 증감식을 한 줄에 쓸 수 있을뿐더러 while문보다 가독성이 좋습니다.
- for문은 배열과 함께 자주 사용합니다.
- 배열은 같은 자료형이 순서대로 모여 있는 구조인데, 배열 순서를 나타내는 색인은 항상 0부터 시작합니다.
- 배열의 전체 요소 개수가 n일 때, 요소 위치는 n-1번째로 표현할 수 있습니다.
- 배열의 특성과 증감에 따른 반복을 표현하는데 적합한 for문의 특성 때문에 for문과 배열을 함께 자주 사용하는 것입니다.
2-5 for문 요소 생략하기
- for문을 구성하는 요소는 코드가 중복되거나 논리 흐름상 사용할 필요가 없을 때 생략할 수 있습니다.
초기화식 생략

- 이미 이전에 다른 곳에서 변수가 초기화되어 중복으로 초기화할 필요가 없을 때 초기화 부분을 생략할 수 있습니다.
조건식 생략

- 어떤 연산 결과 값이 나왔을 때 바로 for문의 수행을 멈추려면 조건식을 생략하고 for문 안에 if문을 사용하면 됩니다.
- 예로 1부터 시작해 수를 더해 나갈 때 더한 결과 값이 200을 넘는지 검사하려면 for문 안에 if문을 사용합니다.
증감식 생략

- 증감식의 연산이 복잡하거나 다른 변수의 연산 결과 값에 좌우된다면 증감식을 생략하고 for문 안에 쓸 수 있습니다.
요소 모두 생략

- 모든 요소를 생략하고 무한 반복하는 경우에 사용합니다.
2-6 중첩된 반복문
- 반복문 안에 또 다른 반복문을 중첩해서 사용하는 경우가 종종 있습니다.
- 간단한 예로 구구단이 있음
예제 4-8 중첩된 반복문
package newstudy;
public class Variable {
public static void main(String[] args) {
int dan;
int times;
for(dan = 2; dan <= 9; dan++) { // 2단부터 9단까지 반복하는 외부 반복문
for(times = 1; times <= 9; times++) { // 각 단에서 1 ~ 9를 곱하는 내부 반복문
System.out.println(dan + " X " + times + " = " + dan * times);
}
System.out.println(); // 한줄 띄워서 출력
}
}
}

- 반복문을 중첩해서 사용할 때 외부 for문과 내부 for문이 어떤 순서로 실행되는지 잘 이해해야 합니다.
- 중첩 반복문을 쓸 때는 어떤 반복문을 먼저 수행해야 하는지 그리고 내부 반복문을 수행하기 전에 초기화해햐 할 값을 잘 초기화했는지를 살펴봐야 합니다.
- for문 외의 다른 반복문도 중첩해서 사용할 수 있습니다.
2-7 반복문을 언제, 어떤 경우에 사용하는게 좋을까?
- 반복 횟수가 정해진 경우에는 for문이 적합합니다.
- 수행문을 반드시 한 번 이상 수행해야 하는 경우에는 do-while문이 적합합니다.
- 위 두 경우 외에 조건의 참·거짓에 따라 반복문이 수행하는 경우 while문이 적합합니다.
2-8 continue문
- continue문은 반복문과 함께 쓰입니다.
- 반복문 안에서 continue문을 만나면 이후의 문장은 수행하지 않고 for문의 처음으로 돌아가 증감식을 수행합니다.
예제 4-9continue문 예제
public class ContinueExample {
public static void main(String[] args) {
int total = 0;
int num;
for(num = 1; num <= 100; num++) {
if(num % 2 == 0) {
continue;
}
total += num;
}
System.out.println("1부터 100까지의 홀수의 합은 " + total + "입니다.");
}
}

- continue문은 반복문을 계속 수행하는데, 특정 조건에서는 수행하지 않고 건너뛰어야 할 때 사용합니다.
2-9 break문
- 반복문에서 break문을 사용하면 그 지점에서 더 이상 수행문을 반복하지 않고 반복문을 빠져나옵니다.
예제 4-10 break문 예제
public class BreakExample {
public static void main(String[] args) {
int sum = 0;
int num = 0;
for(num = 0; ; num++) { // 조건식을 생략하는 대신 break문을 사용합니다.
sum += num;
if(sum >= 100) { // sum이 100보다 크거나 같을 때(종료 조건)
break; // 반복문 중단
}
}
System.out.println("num : " + num);
System.out.println("sum : " + sum);
}
}

- 프로그램 실행 중에 반복문을 중단하려면 break문을 사용해야 정확한 결과 값을 얻을 수 있습니다.
break문의 위치
- break문을 사용하면 모든 반복문을 빠져나오는 것이 아니고 break문을 감싸고 있는 반복문만 빠져나옵니다.