오늘은 Java에서 사용하는 조건문인 if, else if, else 그리고 switch와 같은 조건문에 대해 알아보는 시간을 가져보자. 조건문은 프로그램의 흐름을 제어하는 중요한 도구이다. 이러한 조건문은 다음과 같은 이유로 프로그래밍을 하는 데 있어 꼭 필요한 존재이다.
이유
내용
조건부 실행
조건문을 사용하면 특정 조건이 충족되는 경우에만 코드 블록을 실행할 수 있다. 이로써 프로그램은 특정 상황에 따라 다른 작업을 수행할 수 있게 된다.
분기 로직
조건문은 다양한 분기 로직을 처리하는 데 사용된다. 예를 들어, 사용자 입력에 따라 다른 동작을 처리하거나, 조건에 따라 다른 계산을 수행할 수 있다.
에러 처리
조건문은 오류나 예외 상황을 처리하는 데 사용될 수 있다. 예를 들어, 예외 상황이 발생하면 if 또는 switch를 사용하여 해당 예외를 처리하거나 로그를 기록할 수 있다.
1. if
if 문은 주어진 조건이 참인 경우에만 특정 코드 블록을 실행한다. 사용법은 아래 예제 코드를 살펴보자.
예제 코드 1
if (조건) {
// 조건이 참일 때 실행할 코드
}
예를 들어, 어떤 숫자가 양수인지 여부를 확인하는 코드는 다음과 같을 수 있다.
예제 코드 2
int number = 10;
if (number > 0) {
System.out.println("양수입니다.");
}
number 변수에 10이 저장되고 조건은 number > 0이다, 당연히 10은 0보다 크므로 조건이 true가 되고 if 문 안에 실행할 코드, System.out.println("양수입니다.");가 실행된다.
2. else if, else
else if 문은 여러 개의 조건을 순차적으로 검사하고, 첫 번째로 참인 조건이 발견되면 해당 코드 블록을 실행한다. 모든 조건이 거짓일 때 else 블록이 실행된다.
예제 코드 1
if (조건1) {
// 조건1이 참일 때 실행할 코드
} else if (조건2) {
// 조건2가 참일 때 실행할 코드
} else {
// 모든 조건이 거짓일 때 실행할 코드
}
가장 처음에 검사하는 조건은 if 문 안에 있는 조건 1이고 만약 조건 1이 거짓이라면 else if 구문으로 넘어가 조건 2를 검사한다. 그리고 만약 조건 1과 조건 2가 모두 거짓이라면 조건의 여부와 상관없이 else 구문을 실행하게 된다. 필자가 생각하기에 if, else if, 그리고 else 구문을 설명하는 데 있어 가장 이해하기 쉬웠던 예시는 학생의 점수에 따라 등급을 부여하는 예제이다.
예제 코드 2
int score = 20;
if (score >= 90) {
return 'A';
} else if (score >= 80) {
return 'B';
} else if (score >= 70) {
return 'C';
} else if (score >= 60) {
return 'D';
} else {
return 'F';
}
현재 score 변수에 정수형 데이터 20이 저장되어 있고 프로그램이 if 문을 시작으로 조건을 검사한다. 첫 번째 if 구문에서 score >= 90은 false가 반환되어 다음 조건인 score >= 80으로 넘어간다, 마찬가지로 false가 반환되고 마지막 else if 조건인 score >= 60에서마저도 false가 반환될 것이다. 결국 마지막으로 남는 else 구문으로 넘어가 'F'를 반환하고 조건문이 종료된다. 여기서 기억해야 할 점은 else if 구문을 사용하는 데는 횟수의 제한이 없다.
예제 코드 3
if(조건1){
// 조건1이 참일 경우 실행할 코드
}else if(조건2){
// 조건2가 참일 경우 실행할 코드
}
else if(조건3){
// 조건3이 참일 경우 실행할 코드
}
...
else if(조건99){
// 조건99가 참일 경우 실행할 코드
}
else{
// 위의 모든 조건이 거짓일 경우 실행할 코드
}
위의 예제처럼 조건 99까지 사용해도 프로그램의 로직상 문제는 없지만 사실 저렇게까지 사용하지는 않는다.
또한 여기서 알아야 할 점은 if 문을 기준으로 하나의 조건 블록이 형성된다는 것이다. 예제 코드 4를 보면서 무슨 뜻인지 자세히 살펴보자.
예제 코드 4
if(조건1){
// 조건1이 참이면 실행할 코드
}else if(조건2){
// 조건2가 참이면 실행할 코드
}else if(조건3){
// 조건3이 참이면 실행할 코드
}else{
// 모든 조건이 거짓일 때 실행할 코드
}
// 여기까지 조건 블록1
if(조건){
// 조건이 참이면 실행할 코드
}
// 여기까지 조건 블록2
if(조건){
// 조건이 참이면 실행할 코드
}
// 여기까지 조건 블록3
위의 구조는 여러 조건을 비교하고 조건이 참인 경우 해당 코드 블록을 실행한다. 아래에 각 조건 블록에 대한 설명을 살펴보자.
1. 조건 블록 1 여러 개의 조건을 순차적으로 비교하며, 처음으로 참인 조건을 만나면 해당 코드 블록을 실행한다. 조건 1, 조건 2 및 조건 3은 순차적으로 평가된다. 어떤 조건도 참이 아닌 경우, else 구문 안에 코드 블록이 실행된다.
2. 조건 블록 2 단일 조건을 검사하고 조건이 참인 경우 해당 코드 블록을 실행한다. 다른 조건은 고려하지 않고 조건이 거짓이면 아무 작업도 수행하지 않는다.
3. 조건 블록 3 또 다른 단일 조건
필자가 강조하고 싶은 부분은 조건 블록 1,2,3은 모두 개별적인 코드 블록이다. 조건 블록 1이 끝나면 조건 블록 2가 실행되고 조건 블록 2가 끝나면 조건 블록 3이 실행된다.
3. switch
switch 문은 다중 분기를 처리하는 데 사용된다. 특정 변수나 표현식의 값을 기준으로 여러 가지 경우(case)중 하나를 선택하여 실행한다.
예제 코드 1
int choice = 2;
switch (choice) {
case 1:
// choice가 1일 때 실행할 코드
break;
case 2:
// choice가 2일 때 실행할 코드
break;
case 3:
// choice가 3일 때 실행할 코드
break;
default:
// 모든 case에 해당하지 않을 때 실행할 코드
}
switch 문에서 break 문을 사용하여 해당 case에서 실행을 중지하고 다음 case로 넘어가지 않도록 할 수 있다. 만약 case 구문마다 break문이 없다면 모든 case 구문이 실행될 것이다.
예제 코드 2
int choice = 2;
switch (choice) {
case 1:
System.out.println("1을 선택하셨습니다.");
case 2:
System.out.println("2를 선택하셨습니다.");
case 3:
System.out.println("3을 선택하셨습니다.");
default:
System.out.println("다른 선택을 하셨습니다.");
}
2를 선택하셨습니다.
3을 선택하셨습니다.
다른 선택을 하셨습니다.
위의 예제처럼 switch 문에서 break 문이 없는 경우에는 처음 조건이 참이 되는 case 구문을 시작으로 그다음 case의 코드도 계속해서 실행된다. 이것을 fall-through 현상이라고 한다.
예제 코드 3
int choice = 2;
switch (choice) {
case 1:
case 2:
System.out.println("1 혹은 2를 선택하셨습니다.");
break;
case 3:
System.out.println("3을 선택하셨습니다.");
break;
default:
System.out.println("다른 선택을 하셨습니다.");
break;
}
1 혹은 2를 선택하셨습니다.
만약 다중으로 조건을 처리하고 싶다면 위의 예제 코드와 같이 case 1과 case 2를 묶어서 사용할 수 있다. choice = 2이므로 case 2에 해당이 되기 때문에 "1 혹은 2를 선택하셨습니다."가 출력된다.
만약 문자열 데이터를 switch 구문에서 사용하고 싶다면 case "문자열"로 다음과 같이 사용할 수 있다.
예제 코드 4
String choice = "two";
switch (choice) {
case "one":
System.out.println("1을 선택하셨습니다.");
break;
case "two":
System.out.println("2를 선택하셨습니다.");
break;
case "three":
System.out.println("3을 선택하셨습니다.");
break;
default:
System.out.println("다른 선택을 하셨습니다.");
break;
}
예제 코드에서 보면 알 수 있듯이 case 뒤에는 검사하고자 하는 데이터 유형으로 적으면 된다.