조건문은 조건식과 문장을 포함하는 블럭 '{}' 으로 구성되어 있으며, 조건식의 연산 결과에 따라 실행할 문장이 달라진다.
조건문은 if문과 switch문 두 가지가 있으며, 주로 if이 많이 사용된다. 처리해야할 경우의 수가 많을 때는 if문보다switch문이 효율적이지만 switch문은 제약이 많다.
1. if문
if문은 가장 기본적인 조건문으로 조건식과 괄호로 이루어져 있다. 조건식이 참인 경우 괄호 안의 문장들을 실행한다.
if (조건식) {
//조건식이 true일 때 수행되는 부분
}
int score = 80;
if(60 <= score) {
System.out.println("점수가 60 이상입니다.");
}
위의 예제를 실행하는 경우 score가 80이므로 '60 <= score' 조건식이 참이 되어서 괄호 안의 문장이 실행된다.
- 조건식
if문에 사용되는 조건식은 일반적으로 비교 연산자와 논리 연산자를 사용하여 구성된다.
조건식을 작성할 때 유의해야할 점은 조건식의 결과가 반드시 true 또는 false가 되어야 한다는 것이다.
- 블럭 {}
괄호를 이용하여 여러 문장을 하나의 단위로 묶을 수 있는데, 이것을 블럭이라고 한다. 블럭은 '{}' 괄호를 사용하는데, 블럭의 마지막에는 다른 문장들과 달리 ';' 기호를 붙이지 않는다.
블럭 내부의 문장들은 코드의 구조를 구분하기 쉽게 탭을 사용하여 블럭 안에 있음을 표현해주는 것이 좋다.
블럭 안에는 보토 여러 문장들을 넣지만, 한 문장을 넣거나 아무런 문장도 넣지 않을 수 있다. 만일 블럭 내의 문장이 하나뿐 일 때는 아래와 같이 괄호를 생략할 수 있다.
if(60 <= score) System.out.println("점수가 60 이상입니다."); // {} 괄호 생략
2. if - else문
if-else문의 구조는 다음과 같다. if문에 else 블럭이 추가되었다. else는 '그 밖의 다른'이라는 뜻으로 조건식의 결과가 참이 아닐 때 나머지 결과에 대해 수행되는 문장들이 기술되는 블럭이다.
if(조건식) {
// 조건식이 참일때 수행되는 문장
} else {
// 조건식이 참이 아닌 경우에 수행되는 문장
}
조건식이 참인 경우에는 첫번째 블럭이, 거짓인 경우에는 두번째 블럭이 수행된다.
3. else-if문
if-else문은 두가지 경우에 대해서 분기를 나누는 구조인데, 만약 조건의 경우의 수가 두가지가 넘어가는 경우 else에 if문을 추가하여서 if-else if 구조로 사용할 수 있다.
if(condition1) {
// exp 1
} else if(condition2) {
// exp 2
} else if(condition3) {
// exp 3
} else { // else문은 필요없는 경우에는 생략하여도 된다.
// exp 4
}
위의 예제에서는 첫번째 조건식부터 순서대로 판단하여서 만약 참이 되는 조건식이 있는 경우 해당 블럭을 수행하고 조건문을 탈출한다. 만일 모든 조건식이 거짓인 경우 마지막의 else 문의 블럭을 수행한다.
4. 중첩 if문
if문 내부에 또 다른 if문을 포함시키는 것이 가능한데, 이것을 중첩 if문이라고 부르며 중첩의 횟수에는 제한이 없다.
if(condition1) {
// block1
if(condition2) {
// block2
} else {
// block3
}
} else {
// block4
}
위와 같이 외부의 if문 안에 내부 if문이 포함된다. 이때 들여쓰기와 괄호를 이용하여서 각 블럭을 잘 구분해주는 것이 좋다.
5. switch문
if문은 조건식의 결과가 참과 거짓, 두 가지 밖에 없기 때문에 경우의 수가 많아지면 그에 따라 else-if문을 추가해주어야 했다. 이때문에 코드가 복잡해지고, 여러 조건식의 결과를 확인해야 하기 때문에 시간도 많이 걸린다.
이와달리 switch문은 단 하나의 조건식에 대하여 많은 경우의 수를 처리할 수 있고, 표현도 간결하여 가독성이 좋다. 그렇기 때문에 경우의 수가 많은 경우에는 switch 문을 작성하여 사용하는 것이 좋다.
switch문의 기본구조는 다음과 같다.
switch(condition) {
case val1:
// exp1
break;
case val2:
// exp2
…
default:
// exp_default
// 조건식의 결과와 일치하는 case문이 없는 경우에 수행되는 문장 (else문과 유사하다)
}
switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문은 아래에 있는 문장들을 수행하며, break문을 만나면 switch문에서 탈출한다. case문 내부의 마지막에 break를 두지 않는 경우 다음 case문으로 넘어가서 switch문이나 다른 break문을 만날때까지 수행한다. 그렇기 때문에 결과에 따라서 서로 다른 case의 문장을 실행해야 하는 경우 break문을 잊지 않아야 한다.
만일 조건식의 결과와 일치하는 case문이 없는 경우에는 default문으로 이동한다.
- switch문의 제약조건
switch문의 조건식은 결과값이 반드시 정수이어야 하며, 이 값과 일치하는 case문으로 이동하기 때문에 case문의 값 역시 정수이어야 한다. 그리고 case문의 값들은 중복되지 않아야 한다. 그리고 case문의 값은 반드시 상수이어야 한다. 변수나 실수, 문자열은 case문의 값으로 사용할 수 없다.
[switch문의 제약조건]
- switch문의 조건식 결과는 정수 또는 문자열이어야 한다.
- case문의 값은 정수, 상수만 가능하며, 중복되지 않아야 한다.
- switch문의 중첩
if문처럼 switch문도 중첩이 가능하다.
switch(condition1) {
case val1-1:
switch(condition2) {
case val2-1:
//…
break;
case val2-2:
//…
break;
}
break;
case val1-2:
// …
break;
default:
// …
}
위와 같이 switch문을 중첩하는 경우 각 구현에 맞춰 break문을 빼먹지 않도록 하는 것이 중요하다.
'프로그래밍언어 > JAVA' 카테고리의 다른 글
[JAVA] 배열 (Array) (0) | 2021.08.24 |
---|---|
[JAVA] 반복문 - for, while, do-while (0) | 2021.08.22 |
[JAVA] 연산자 - 논리 연산자 (0) | 2021.08.13 |
[JAVA] 연산자 - 비교 연산자 (0) | 2021.08.12 |
[JAVA] 연산자 - 산술 연산자 (0) | 2021.08.11 |