1. 제어문(control flow statement)
: 원하는 결과를 얻기 위해서 프로그램의 순차적인 흐름을 제어하는 것을 제어문이라고 한다.
2. 조건문(conditional statements)
: 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문이다.
-if문
: 조건식의 결과가 참(true)이면 주어진 명령문을 실행하며, 거짓(false)이면 아무것도 실행하지 않는다.
if(조건식){
실행문;
실행문;
}
-> 조건식에는 true 또는 false 값을 산출할 수 있는 연산식이나, boolean 변수가 올 수 있다.
조건식이 true이면 { } 블록 안의 실행문을 실행하고 false이면 실행하지 않는다.
-if~else문
: if문과 함께 사용하는 else문은 if문과 반대로 주어진 조건식의 결과가 거짓(false)이면 주어진 명령문을 실행한다.
if(조건식){
실행문;
} else {
실행문;
}
-> 조건식이 true이면 if문의 블록이 실행되고 false이면 else문의 블록이 실행된다.
-if~else if~else문
: 조건문이 여러 개인 if문이다.
if(조건식1){
실행문;
} else if(조건식2){
실행문;
} else {
실행문;
}
-> 조건식1이 true이면 if문의 블록이 실행되고 조건식2가 true이면 else if문의 블록이 실행되고 두 개의 조건식이 모두 다 false이면 else문의 블록이 실행된다.
이때 else if문은 여러 번 사용할 수 있지만, if문과 else문은 단 한 번만 사용할 수 있다.
-중첩 if문
: if문의 블록 내부에 또 다른 if문을 사용한다.
if(조건식1) {
if(조건식2){
실행문1;
} else {
실행문2;
}
} else {
실행문3;
}
-> 조건식1이 true이면 중첩된 if문 안의 조건식2를 판단하고 조건식2가 true이면 if문의 블록이 실행되고 false이면 else문의 블록이 실행된다. 조건식1이 false이면 바로 else문의 블록(실행문3)이 실행된다.
-switch문
: if문과 마찬가지로 조건 제어문이지만 조건식이 true일 경우 블록 내부의 실행문을 실행하는 것이 아니라, 변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다.
경우의 수가 많아질수록 if~else문보다 코드가 간결하다.
switch(변수) {
case 값1 :
실행문;
break;
case 값2 :
실행문;
break;
case 값3 :
실행문;
break;
default:
실행문;
break;
}
-> 변수와 동일한 값을 갖는 case로 가서 실행문을 실행시키고, 만약 변수와 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. (default는 생략 가능하다.)
※break 키워드
: 반복문인 for문, while문, do-while문을 실행 중지할 때 사용되고, switch문에서도 사용한다. case절 및 default절에는 반드시 break 키워드를 포함하고 있어야 하는데 break 키워드는 조건 값에 해당하는 case절이나 default절이 실행된 뒤 다음 case를 실행하지 말고 switch문을 빠져나가기 위해서이다.
※break with label 키워드
: 일반적인 break 문은 단 하나의 반복문만을 빠져나가게 하는데, 여러 반복문이 중첩된 상황에서 한 번에 모든 반복문을 빠져나가거나 특정 반복문까지만 빠져나가고 싶을 때 사용하는 방법으로 반복문에 이름(label)을 설정하는 것이다.
가장 바끝쪽 반복문이 빠져나가고 싶은 특정 반복문에 이름을 설정 후, break 키워드 다음 해당 이름을 명시하면 된다.
loopOut :
for (int i = 2; i < 10; i++) {
for (int j = 2; j < 10; j++) {
if (i == 5) {
break loopOut;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
-> 구구단 2단계부터 4단계까지만을 출력한다.
3. 반복문(iteration statementes)
: 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문이다.
-for문
: 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문이다.
-> for문이 실행될 때 초기화식이 가장 먼저 실행된다. 그다음 조건식을 평가해서 true이면 실행문을 실행시키고, false이면 for문 블록을 실행하지 않고 종료한다. 블록 내의 실행문들이 모두 실행되면 증감식을 실행시키고 다시 조건식을 판단한다. 이후 순서대로 다시 진행하고 false이면 for문을 종료한다.
for(int i=1; i<=10; i++) {
System.out.println(i);
}
-> i가 1일때부터 10과 같거나 클 때까지 for문을 반복시킨다. 그 결과 i는 1부터 10까지 출력된다.
-while문
: for문이 정해진 횟수만큼 반복한다면, while문은 조건식이 true일 경우에 계속해서 반복한다.
-> 조건식이 true일 경우 실행문을 실행하고, 실행문이 모두 실행되면 다시 조건식으로 되돌아가서 조건식을 판단한다. 조건식이 true라면 ② -> ①로 다시 진행, false라면 while문 종료한다.
int i=1;
while (i<=10){
System.out.println(i);
i++; // i가 계속 증가하다 10을 넘어가면 while문의 조건이 거짓이 되므로 무한루프에 빠지지 않는다.
}
-> i가 10이하일때까지 true이므로 while문을 10번 반복시킨다. 그 결과 i는 1부터 10까지 출력된다.
※무한 루프(infinite loop)
: while문 내부에 조건식의 결과를 변경하는 명령문이 존재하지 않을 때는 프로그램이 영원히 반복하게 되며 이것을 무한 루프에 빠졌다고 한다. while문을 작성할 때는 조건식의 결과가 어느 순간 거짓(false)을 갖도록 조건식의 결과를 변경하는 명령문을 반드시 포함시켜야 한다.
-do / while문
: 조건식에 의해 반복 실행한다는 점에서는 while문과 동일하지만 시작할 때부터 조건식을 검사하여 블록 내부를 실행할지 결정하는 while문과 달리 블록 내부의 실행문을 우선 실행시키고 실행 결과에 따라 반복 실행을 결정하는 경우에는 do-while문을 사용한다.
-> 실행문이 모두 실행되면 조건식을 평가한다. 그 결과가 true이면 ① -> ②와 같이 반복 실행을 하고, 조건식의 결과가 false이면 do-while문을 종료한다.
int i=1;
do {
System.out.println("do 블록의 변수 i의 값 = " + i);
i++; // 이 부분이 없으면 무한루프에 빠진다.
} while(i < 1);
System.out.println("변수 i의 값 = " + i);
-> do의 블록을 무조건 한 번 루프를 실행해주기때문에 do 블록의 변수 i의 값은 1이 나오고 종료된 후 변수 i의 값은 2가 저장되어 출력된다.
※continue 키워드
: for문, while문, do-while문에서만 사용되는 키워드로, 블록 내부에서 continue문이 실행되면 for문의 증감식 또는 while문, do-while문의 조건식으로 이동한다.
public class main {
public static void main(String args[]) {
for(int i=1; i<=10; i++) {
if(i%2 != 0) { // 2로 나눈 나머지가 0이 아닐 경우 == 홀수인 경우
continue;
}
System.out.println(i); // 2, 4, 6, 8, 10 출력
}
}
}
※break 키워드와 continue 키워드의 차이점?
: continue문은 반복문을 종료하지 않고 계속 반복을 수행하는 반면에 break문은 반복을 종료한다.
'Programming > JAVA' 카테고리의 다른 글
자바의 참조 타입과 배열 (0) | 2019.12.23 |
---|---|
BufferedReader, BufferedWriter를 이용한 빠른 입출력 (0) | 2019.12.20 |
자바의 연산 (0) | 2019.12.17 |
자바의 변수와 타입 (0) | 2019.12.13 |
자바 개요 (0) | 2019.12.12 |