프로그램은 소스코드를 위에서부터 1줄씩 처리한다.
하지만 프로그램을 작성하다 보면 이런 처리 순서를 의도적으로 바꿔야 할 때가 있는데, 이 역할을 수행하는 것이 바로 제어문이다.
1. 제어문의 개념
제어문과 제어 키워드를 이용하면 프로그램의 실행 순서를 다양한 방법으로 제어할 수 있다.
자바에는 2개의 선택 제어문 ( if, switch )와 3개의 반복 제어문 ( for, while, do-while ) 으로 구성된 5개의 제어문과 2개의 제어 키워드 ( break, continue ) 가 있다.
2. if 선택 제어문
if 문은 조건식에 따라 실행문의 실행 여부를 결정하는 선택 제어문이다.
if (조건문){
true 일때 실행
}
else if (조건문) {
if 가 false이고 else if 가 true 일때 실행
}
else{
위 조건문이 모두 false 일 때 실행
}
else if 구문은 개수에 상관없이 추가할 수 있으며, if 구문처럼 소괄호 안에 조건식이 들어간다.
여기서 생각해야하는 것은 조건식을 실행할 때 항상 위에서부터 조건문을 검사하며, 처음으로 조건식이 true가 나오는 중괄호 블록을 만나면 그 구문만 실행하고 if 문을 탈출한다.
구문이 많은 if-else 문은 여러개의 체를 동시에 쓰는 것이라고 생각하면 된다.
위에서부터 차례로 걸러지며 마지막까지 걸리지 않은 구문은 else 라는 마지막 체로 걸러지게 된다.
3. switch 선택 제어문
switch 문은 점프 위치 변수값에 따라 특정위치 ( case ) 로 이동해 구문을 실행하는 선택 제어문이다.
점프할 수 있는 위치는 'case 위치값:' 으로 설정하며, 콜론( : ) 문자가 붙은 값이 이동할 위치를 가리키는 팻말 역할을 한다.
switch 문에도 else 같은 구문이 있는데, 바로 default: 구문이다. 이도 역시 점프할 구간이 없을 경우 default 구문을 실행한다.
int a = 2;
switch(a){
case 1:
System.out.println("A");
break;
case 2:
System.out.println("B"); // 실행됨
break; //switch 문을 탈출
case 3:
System.out.println("C");
break;
default:
System.out.println("D");
각구문에 break; 를 써준 이유는 case문이 실행되고 나면 바로 다음 case 를 실행하기 때문인데 이를 방지하기 위하여 break문을 작성하였다.
4. for 반복 제어문
for문은 실행 구문을 반복적으로 수행하는 반복 제어문 으로, 일반적으로 반복 횟수가 정해질 때 주로 사용한다.
for문의 구문을 보면 몇 번 반복하는지 유추할 수 있어야 한다.
// 초기식 조건식 증감식
for (int i = 0; i < 5; i++){
System.out.println(i);
}
// 0, 1, 2, 3, 4 가 차례로 출력된다.
컴파일러는 for 문의 소괄호 안에 2개의 세미콜론이 있는지만 검사하기 때문에 for( ; ; ) 같은 특수한 형태가 가능하다.
몰론 조건식이 없기때문에 무한루프에 빠지게 된다.
4. 1 continue 제어 키워드
coninue 는 반복 제어문의 닫힌 중괄호 ( } ) 역할을 하는 제어 키워드 이다.
즉, 반복문 실행 도중 continue 를 만나면 실행해야 할 코드가 남아 있더라도 마치 닫힌 중괄호를 만난 것처럼 다음 반복을 실행한다.
이 continue 문은 주로 반복 과정에서 특정 구문을 실행하지 않고 건너뛰고자 할 때 사용한다.
for(int i = 0; i < 10; i++){
continue;
System.out.println(i); //오류 ( unreachable code )
}
반복문을 시작하자마자 continue 문을 만나면 아래쪽에 실행할 코드가 남아있더라도 다음 반복을 위해 증감식으로 이동한다.
자바는 이를 깨닫고 3번째 구문에 이 코드는 실행되지 않는다는 오류를 띄워준다.
이 특성을 활용해 continue 문은 보통 if 문과 함께 사용하여 특정 조건에서 반복문을 건너뛰고자 할 때 사용한다.
'java' 카테고리의 다른 글
[JAVA] 야구게임 맞추기 (0) | 2022.07.30 |
---|---|
[JAVA] 배열의 생성과 자료형 (0) | 2022.07.09 |
[JAVA] 연산자의 종류 (0) | 2022.07.09 |
[JAVA] 기본 자료형간의 타입변환, 연산 (0) | 2022.07.09 |
[JAVA] 자바의 자료형 (Data Type) (0) | 2022.07.09 |