앞서 자료를 변수에 담고, 값의 조작을 가하는 연산자에 대해 알아보았다.
그렇다면 이번에는 실제 프로그램의 동작에 있어서 흐름을 제어할 수 있는 방법에 대해 알아보자.
조건문 : 특정 조건을 만족할 때 실행하고자 사용
조건문은 조건식의 참,거짓을 통해 특정 블럭의 실행 유무를 결정할 수 있다.
조건식을 비교 연산자와 논리 연산자를 통해 구성될 수 있다.
반드시 정수형(Enum,Method call) 또는 문자열 리터럴만 비교대상과 조건의 값이 될 수 있고, 중복이 불가능하다.
만족하는 가장 상단의 조건을 찾으면 이후 case 비교는 무시되며 모든 문장이 수행되므로, break를 사용해야 한다.
if(condition){
//statement
}
else if(condition2){
//statement
}
else {
}
switch(target){
case val1:
break;
default :
break;
}
따라서 모든 if-else문을 switch-case로 변환할 수는 없다는 것을 알 수 있다.
가독성을 위해서는 들여쓰기와 Block을 표기하자
조건문의 참 거짓 여부에 따라 실행되는 문장이 하나일 경우 Block({}) 생략이 가능하지만, 추후 유지보수를 위해 항상 표기하는 것이 바람직하며, 중첩되는 경우에는 들여쓰기(Indentation)을 통해서 가독성을 높이는 것이 좋다.
반복문 : 어떤 작업을 반복적으로 수행하고자 사용
조건문은 특정 조건을 만족 유무에 따라 실행 여부를 판단한다고 하였다.
반복문은 이를 확장하여, 조건을 만족하는 동안 혹은 정해진 횟수동안 실행문을 반복적으로 실행할 수 있다.
for : 반복 횟수를 알고 있는 경우에 사용한다.
for(init ; condition ; change){
//statement
|
int[] arr = new int[5]{10,20,30,40,50};
for(int val : arr){
System.out.println(val);
}
이는 향상된 for문으로, index는 불필요하고 반복되는 대상만 필요할 때 iterable한 대상에 한하여 사용가능하다.
while(conditon){
//statement
//change
}
do {
//statement
}while(condition);
따라서 for문과 while문은 상호 호환이 가능하며, 조건을 반복하는 동안 break,continue를 통해
흐름을 추가로 제어할 수 있다.
break문의 경우 별도로 이름을 명시하지 않으면 가장 가까운 scope에 속하는 반복문을 더이상 실행하지 않고 탈출하게 된다.
outer:
while(true){
...
for(;;){
if(condition){
break outer; // 바깥 Loop 탈출
}
if(condition2){
break; // 안쪽 Loop 탈출
}
}
}
continue의 경우 더이상 아래의 실행문을 수행하지 않고 증감식을 통해 다음 반복으로 흐름이 바뀐다.
break문에 이름을 붙이는 경우 원하는 위치의 반복문을 탈출할 수 있다.