제어문
제어문이란 프로그램의 순차적인 흐름을 제어해야만 할 때 사용되며 조건문, 반복문 등이 있다.
제어문에 속하는 명령문들을 ({}) 중괄호로 둘러싸고 있다.
1. 조건문
주어진 조건식의 결과에 따라 별도의 명령을 수행한다.
1.1 if 문
if문은 조건식이 참(true)이면 주어진 명령문을 실행하고, 거짓(false) 면 아무것도 실행하지 않는다.
// 1. if문 기본 문법
if(condition) {
...
}
// 2. if문 {} 생략
if(condition)
System.out.println("오늘 입니다.");
// 3. if문 {} 생략시 주의
if(condition)
System.out.println("오늘 입니다."); // if문
System.out.println("반갑습니다."); // if문 아님
위의 예제에서 ...은 명령문이 들어가는 영역이며 if문 안에 들여 쓰기를 하여 가독성을 높인다.
- 2번 if문의 경우 명령문의 한 줄 일 경우 중괄호를 생략할 수 있다.
- 3번 if문의 경우 중괄호 생략은 한 줄의 명령문만 인지 함으로 "반갑습니다."는 항상 출력이 된다.
1.2 if-else 문
if문의 변형으로 if문 조건식이 거짓(false) 일 경우 else문을 실행한다. 주로 조건이 상반되는 경우에 실행되며 두 개의 if문을 합친 것과 같다.
조건이 상반되지 않을 경우 if문을 두 개 사용하면 된다.
// 1. if-else문 기본 문법
if(condition) {
...
}else {
...
}
// 2. if-else문 중괄호 생략
if(condition)
...
else
...
위 예제 2번처럼 if-else문도 중괄호가 생략 가능하다. 단 중괄호 생략 시 한 줄의 명령문만 인식하니 주의해야 한다.
1.3 if-else if 문
if-else if문은 처리해야 할 경우가 셋 이상인 경우 사용한다. 문법은 if-else문을 연속하여 붙인 것과 같다.
첫 번째 조건부터 차례대로 실행되면 조건이 부합하지 않으면 else문이 실행된다.
// if-else if문 기본 문법
if(condition) {
...
} else if(condition1) {
...
} else if(condition2) {
...
} else {
...
}
위 예제처럼 if-else문을 여러 개 붙인 것과 같으면 if문은 언제나 중괄호를 생략할 수 있다.
1.4 중첩 if 문
if문 안에 if문을 넣는 문법으로 중첩에 제한은 없다.
// 1. 중첩 if문 기본 문법
if(condition) {
if(innerCondition){
...
}
} else {
...
}
// 2. 중첩 if문 중괄호 생략
if(condition)
if(innerCondition)
...
else
...
중첩 if문도 중괄호 생략이 가능하지만 위의 예제에서 2번의 경우 if문 안에 if-else문이 된다.
그래서 중첩 if문을 사용할 때는 괄호를 명시해주어야 한다.
1.5 switch 문
- switch문은 조건식을 먼저 계산하고 그에 맞는 case문으로 이동한다.
- break문을 만나면 switch문을 빠져나가지만 break문이 없다면 위에서 아래로 내려오면서 defaule문을 실행한다.
- 경우의 수가 많아질수록 if문보다 switch문이 효율적이다.
- switch문은 if문으로 변경 가능하지만 if문은 switch문으로 변경되지 않는 경우가 많다.
- if-else문 보다 가독성이 좋고, 컴파일러가 최적화를 쉽게 할 수 있어 속도 또한 빠른 편이다.
- default절은 위의 case절에 하나도 해당하지 않는다면 실행된다.
- default절은 case절 중간에 위치해도 상관없다.
- default절은 반드시 break문을 포함해야 한다.
// 1. switch문 기본 문법
switch(lastName) {
case "김":
...
break;
case "이":
...
break;
case "박":
...
case "나":
...
default:
...
break;
}
위의 예제에서 성이 김, 이를 만나면 해당하는 case문을 실행하고 break문을 만나 switch문을 빠져나간다.
박을 만나면 박, 나, default를 실행, 나를 만나면 나, default를 실행한다.
1.5.1 switch문의 제약 조건
- 조건식의 결과 값은 정수 또는 문자열이 여야 한다.
- case의 값은 정수 상수만 가능하며, 중복되면 안 된다.
1.5.2 switch문의 중첩
// 1. switch문 중첩
switch(lastName) {
case "김":
switch(firstName) {
case "기범":
...
break;
case "태훈":
...
break;
case "동혁":
...
case "승주":
...
default:
...
break;
}
break;
default:
...
break;
}
2. 반복문
반복문이란? 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어하는 명령문이다.
2.1 while 문
while문은 특정 조건이 만족할 때까지 계속해서 명령문을 실행한다.
조건식이 true면 명령문을 실행하고 명령 문안에서 break를 만나지 않으면 다시 조건식으로 돌아가 명령문을 실행할지 조건식을 판단한다. break문을 만난다면 while문을 빠져나간다.
또한 continue문을 사용하면 while문의 명령문의 continue아래 로직은 실행되지 않고 조건식으로 돌아간다.
// 1. while문 기본 문법
while(condition) {
...
}
// 2. while문 조건 추가
while(x > 0) {
...
}
while문의 조건식을 보면 x > 0이다. 조건식으로 읽으면 x가 0보다 클 때까지(참, true) while문을 반복한다는 의미이다.
조건식이 거짓(false) 면 while문을 실행하지 않는다.
2.1.1 for문과 while문의 비교
// for문
for(int i = 0; i < 10; i++) {
...
}
// while문
while(i < 10) {
i++;
}
for문과 while문은 서로 변환이 가능하며 위와 같이 조건식이 다를 수 있다.
2.1.2 while 문의 조건식 생략 불가
while문의 조건식은 생략이 불가능하지만 무한으로 반복할 수 있게 특정 조건을 넣을 수 있다.
// while 무한 반복
while(true) {}
조건식에 true를 넣으면 while문이 무한으로 반복된다. 무한으로 반복되면 while문 이후의 로직이 진행이 되지 않아 무한루프에 빠질 수 있으니 주의해야 한다.
2.1.3 while 문 중괄호 생략
// while문 중괄호 생략
while(true)
System.out.println("무한");
while문의 명령문이 한 줄뿐이라면 중괄호를 생략할 수 있다.
2.1.4 중첩 while 문
while문안에 while문을 넣어 중첩할 수 있으며 중첩에 제한은 없다.
// while문 중첩
while(true){
while(true) {
...
}
}
2.2 do-while 문
do-while문은 괄호를 먼저 실행하고 나서 조건식을 검사하는 while문으로 최소 한 번의 동작을 한다.
// do-while문 기본 문법
do {
...
} while(condition);
2.3 break 문 & continue 문
break문 : 자신이 포함된 가장 가까운 반복문으로 벗어난다.
continue문 : 반복문을 끝으로 이동하여 다시 반복문을 실행한다. for 문운 증감식으로 이동, while 문은 조건식으로 이동
for(;;) {
if(condition){
break; or continue;
}
}
while(true) {
if(condition){
break; or continue;
}
}
3. for 문
while문과 달리 자체적으로 초기식, 조건식, 증감식을 모두 포함하고 있는 반복문이다.
조건식의 결과가 참(true) 일 경우 반복문을 수행한다.
// 1. for문 기본 문법
for(초기식; 조건식; 증감식) {
...
}
// 2. for문 예제
for(int i = 0; i < 10; i++) {
...
}
- 초기식 : for문안에서 사용하는 변수를 선언한다. 콤마(,)로 구분하여 여러 개의 변수를 선언할 수 있다. for문이 종료되면 같이 소멸된다.
- 조건식 : for문을 실행시킬지 검사하는 조건을 넣는다.
- 증감식 : 조건의 범위를 증가, 감소시킨다. 콤마(,)로 구분하여 변수를 증감할 수 있다.
실행 순서로는 1. 초기화, 2. 조건식, 3. 명령문, 4. 증감식이다. 한번 반복된 이후는 1. 조건식, 2. 명령문, 3. 증감식 순서로 진행된다.
3.1 for문의 초기, 조건, 증감식과 중괄호 생략
for문의 초기, 조건, 증감식을 모두 생략할 수 있으며 생략되는 경우 무한루프가 된다.
for문의 명령문이 한 줄이라면 중괄호를 생략할 수 있다.
// 초기식, 조건식, 증감식 생략
for(;;) {
...
}
// 중괄호 생략
for(;;)
...
3.2 중첩 for문
for문안에 for문을 넣어 중첩할 수 있으며 중첩에 제한은 없다.
// for문 중첩
for(;;) {
for(;;) {
...
}
}
4. 향상된 for문 (Enhanced for문)
JDK 1.5부터 Enhanced for 문이라는 반복문이 추가되었다.
컬렉션, 배열에서 유용하게 사용된다.
int[] list = {1, 2, 3, 4, 5};
for(int i : list) {
System.out.println(i);
}
// 결과
1
2
3
4
5
위의 예제를 보면 list에 선언된 값을 하나씩 읽어온다. 그래서 값을 읽어오는 용으로만 사용할 수 있다는 제약이 있다.
'개발 언어 > Java' 카테고리의 다른 글
[Java] 객체 지향 프로그래밍 (0) | 2021.08.20 |
---|---|
[Java] 배열 (0) | 2021.08.19 |
[Java] 연산자 (0) | 2021.08.18 |
[Java] 형변환 (0) | 2021.08.18 |
[Java] 실수형의 소수점 표현 방식과 BigDecimal (0) | 2021.08.13 |