조건문은 조건식에 따라 다른 실행문을 실행하기 위해 주로 사용이 된다. 조건문의 종류로는 if문, switch문이 존재한다.
if문은 조건식에는 참과 거짓이 반환되는 연산이나 boolean타입의 변수가 올 수 있다. 여기서 조건식이 참이거나 변수가 true일 경우 블록을 실행하고, 아닐경우 블록을 뛰어넘는다.
실행문A
if( 조건식 ) {
실행문B
}
실행문C
위 처럼 구성이 되어 있을 때 조건식의 값에 따라 어떤 흐름을 갖는지 확인을 하면
추가적으로 조건문을 통해 실행문B를 실행시킬 경우 실행문C는 실행하지 않고, 실행문B를 실행하지 않을 경우 실행문C를 실행 시키는 방법은 어떻게 구성하는가? 라는 생각을 할 수 있다. 그럴 경우 if - else문을 이용하면 된다.
실행문A
if( 조건식 ) {
실행문B
} else{
실행문D
}
실행문C
// 조건식이 참일 경우 : 실행문A -> 실행문B -> 실행문C
// 조건식이 거짓일 경우 : 실행문A -> 실행문D -> 실행문C
if문뒤에 추가적인 조건을 붙이기 위해 사용되는 else if문을 제한 없이 붙여 여러 개의 조건문을 사용할 수 있다.
if( ) {
} else if( ) {
} else if( ) {
} else if( ) {
}
switch문은 if문과 마찬가지로 조건 제어문 이다. 하지만 조건식의 값을 기준으로 실행문을 실행하는 방식이 아닌 변수가 어떠한 값을 갖느냐에 따라 실행문이 선택된다.
switch( 변수 ) {
case 값1 : 실행문A // 변수의 값이 값1일 경우 실행문A 실행
break;
case 값2 : 실행문B // 변수의 값이 값2일 경우 실행문B 실행
break;
case 값3 : 실행문C // 변수의 값이 값3일 경우 실행문C 실행
break;
default : 실행문D // 변스의 값이 값A,B,C 외 다른 값일 경우 실행문D 실행
}
switch문은 변수의 값과 동일한 case로 이동하여 해당 실행문을 실행하게 된다. 만약 변수의 값이 case에서 해당하지 않는 경우 default로 이동하여 해당 실행문을 실행하게 되는 흐름이다.
또한 case와 case사이에 break;가 존재한다. 이는 해당 조건에 맞는 실행문을 실행하고 바로 switch를 빠져나오기 위해서 작성이 된다. 만약 break;가 없을 경우 다음 case로 이동하여 연달아 실행된다.
for(int i = 0; i < n; i++) { //for(초기화식; 조건식; 증감식) {
System.out.println(i); // 실행문
}
반복문 for문 은 아래와 같은 순서로 동작하게 된다.
1. 초기화식을 가장 먼저 실행한다.
2. 초기화된 변수를 갖고 조건식을 통해 검증을 한단.
for문 내부에 for문을 작성하여 중첩 반복문을 작성할 수 있다.
for(int i = 0; i < n; i++) {
System.out.println(i);
for(int j = 0; j < n; j++) {
System.out.println(j);
}
}
중첩 for문에서 외부 반복문이 한 번 실행할 때마다 내부 반복문이 지정된 횟수 만큼 반복해서 돌고 다시 외부 반복문이 동작하게 된다.
for문은 지정된 횟수만큼 반복을 하지만, while문은 지정된 횟수만큼 반복하는 것이 아니고 조건식이 참이될 경우 계속 반복하게 된다.
while( 조건식 ) {
실행문
}
while문 동작은 for문보다 간단하게 동작을 한다.
do - while문은 조건식에 의해 반복 실행한다는 점은 while문과 동일하다. 하지만 do - while문은 내부 실행문을 우선 실행을 하고 실행 결과에 따라 반복 실행을 계속 할지 결정할 수 있도록 한다.
do{
실행문A
} while(조건식);
개인적으로 반복문을 사용할 때 가장 중요하다고 생각되는 것이 break문이라고 생각한다. 그 이유는 break문을 이용하여 무한 반복될 수 있는 반복문을 방지할 수 있다.
break문사용은 조건문과 같이 사용하여 특정 조건에서 반복문을 빠져나올 수 있는 출구를 만들거나, 중첩 반복문에서 특정 조건에서 내부 반복문을 탈출하여 외부 반복문을 바로 동작할 수 있도록 만들수 있다.
for(int i = 0; i < n; i++) {
System.out.println(i);
for(int j = 0; j < n; j++) {
System.out.println(j);
if( i == 3 && j == 3) {
break;
}
}
}
간단한 예제로 위 코드를 보면, 조건문을 사용하여 변수 i, j가 모두 정수 3과 동일 할 경우 break가 동작하도록 했다.
이 경우 변수 i와 j가 모두 3일 경우에 내부 반복문을 종료가 되어 다음 출력에서 i의 값은 4, j의 값은 0이 출력된다.
그런데 break문을 사용하여 내부 반복문이 아닌 외부 반복문을 종료하고 싶을 때 어떻게 작성을 해야 하는가? 라는 궁금증이 생길 수 있다.
그럴 경우에는 외부 반복문 선언한 줄 앞 부분에 라벨을 붙여 brack문 뒤에 외부 반복문 라벨을 붙여주면 된다.
Label: for(int i = 0; i < n; i++) {
System.out.println(i);
for(int j = 0; j < n; j++) {
System.out.println(j);
if( i == 3 && j == 3) {
break Label;
}
}
}
위 처럼 작성하게 된다면 조건문을 통해서 외부 반복문이 종료하게 된다.
break문을 통해서 특정 타이밍에 반복문을 종료 시키는 방법을 알았다. 그러면 특정 조건일 때 실행하지 않고 바로 다음 동작으로 시킾하고 싶을 때는 어떻게 작성할 지 궁금할 것이다.
물론 if-esle문을 통해서 작성할 수 있다.
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if( i != 3 && j != 3) {
실행문
}
}
}
이렇게 작성하게 된다면 변수 i와 j의 값이 3이 아닐 경우에만 실행문이 실행 된다. 그러면 원하는 방법대로 동작을 하게 된다. 하지만 이 방법으로 작성할 때 조건문이 길어지거나 실행문이 길어질 경우에는 가독성이 떨어지게 된다는 단점이 존재한다.
그렇기 때문에 가독성을 높고, 작성하기 편한 continue문을 사용하면 된다.
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
if( i == 3 && j == 3) {
continue;
}
실행문
}
}
이 처럼 작성하게 되면 조건을 부정형으로 감싼 복잡한 if문 없이 예외적인 상황을 명확하게 걸래내며 가독성 좋게 작성할 수 있다.