제어문
프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장들을 ‘제어문(control statement)’이라고 한다. 제어문에는 ‘조건문과 반복문’이 있는데, 조건문은 조건에 따라 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행한다.
조건문 if
‘조건식’과 ‘괄호{}’로 이루어져 있다. ‘if’의 뜻이 ‘만일 ~이라며..’이므로 ‘만일(if) 조건식이 참(true)이면 괄호{} 안의 문장들을 수행하라’라는 의미로 이해하면 된다.
if(조건식) {
// 조건식이 참(true)일 떄 수행될 문장들을 적는다.
}
예시
조건식 ‘score > 60’이 참(ture)이면 괄호{} 안의 문장이 수행되어 화면에 “합격입니다.”라고 출력되고 거짓(false)이면, if문 다음의 문장으로 넘어간다.
if (score > 60) {
System.out.println("합격입니다.");
}
/* 실행과정
score > 60
-> 80 > 60
-> true 조건식이 참(true)이므로 괄호{} 안의 문장이 실행된다.
*/
if-else
거짓일 때 else블록의 문장을 수행하라는 뜻
if (조건식) {
// 조건식이 참(ture)일 때 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
if-else if
처리해야 할 경우의 수가 셋 이상인 경우, 한 문장에 여러 개의 조건식을 쓸 수 있는 ‘if-else if’ 문을 사용한다.
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) { // 여러 개의 else if를 사용할 수 있다.
// 조건식 3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 마지막은 보통 else블럭으로 끝나며, else블럭은 생략가능하다.
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
if-else if 확인
if (score >= 90) {
grade = 'A';
} else if (score >= 80){
grade = 'B';
} else if (score >= 70){
grade = 'C';
} else {
grade = 'D';
}
‘score>=90’이 거짓이라는 것은 ‘score < 90’이 참이라는 뜻이므로 두 번째 조건식에서 ‘score < 90’이라는 조건을 중복해서 확인할 필요가 없다.
중첩 if문
if문의 블록 내에 또 다른 if문을 포함시키는 것, 중첩 횟수에 제한은 거의 없다.
if (조건식1) {
// 조건식1의 연산결과가 true일 때 수행될 문장들을 적는다.
if (조건식2) {
// 조건식 1과 조건식 2가 모두 ture일 때 수행될 문장들)
} else {
// 조건식 1이 ture이고, 조건식 2가 false일 때 수행되는 문장들
}
} else {
// 조건식1이 false일 때 수행되는 문장들
}
중첩 if문에서는 괄호{}의 생략에 더욱 조심해야 한다.
바깥쪽의 if문과 안쪽의 if문이 서로 엉켜서 if문과 else블록의 관계가 의도한 바와 다르게 형성될 수도 있기 때문
Switch문
switch문은 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하다.
그래서 처리할 경우의 수가 많은 경우에 if문 보다 switch문으로 작성하는 것이 좋다.
switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하며, break문을 만나면 전체 switch문을 빠져나가게 된다.
- 조건식을 계산한다.
- 조건식의 결과와 일치하는 case문으로 이동한다.
- 이후의 문장들을 수행한다.
- break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.
break문은 각 case문의 영역을 구분하는 역할, 만일 break문을 생략하면 case문 사이의 구분이 없어지므로
다른 break문을 만나거나 switch문 블록{}의 끝을 만날 때까지 나오는 모든 문장들을 수행한다.
Switch문의 제약조건
1. switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
2. case문의 값은 정수 상수 (문자포함), 문자열만 가능하며, 중복되지 않아야 한다.
public static void main(String[] args){
int num, result;
final int ONE = 1;
...
switch(result){
case '1': // OK. 문자 리터럴(정수 49와 동일)
case ONE: // OK. 정수 상수
case "YES": // OK. 문자열 리터럴. JDK 1.7부터 허용
case num: // 에러. 변수는 불가
case 1.0: // 에러. 실수도 불가
...
}
}
'Server > 자바의정석' 카테고리의 다른 글
[Java 입문] 배열(Array) (0) | 2022.09.27 |
---|---|
[Java 입문] 반복문(for, while, do-while) (0) | 2022.09.26 |
[Java 입문] 연산자2 (0) | 2022.09.26 |
[Java 입문] 연산자1 (0) | 2022.09.26 |
[Java 입문] 형변환 (0) | 2022.09.26 |