보통 프로그램은 개발자가 작성한 순서대로 차례로 실행되지만 경우에 따라서는 조건에 따라 다른 부분을 실행하거나 반복하여 실행하는 등 실행 순서를 바꾸어 동작하기도 합니다.
다양한 종류가 있지만 그 중에서 조건문(Conditional Statement)이 있으며, 이 조건문은 주어진 조건에 따라 수행되는 부분이 다를 때 사용하는 방식으로 if문과 switch문이 존재합니다.
if라는 것은 영어 단어를 공부하신 분들은 아시겠지만 만약 ~ 라면
이라는 의미를 뜻합니다.
이 의미에서 생각하자면 만약 ~ 라면 A를 실행하고 그게 아니면 B를 실행해라 라는 것으로 추측할 수 있습니다.
if 문의 형태는 지정어 if
가 나오고 조건식
이 나타나며, 만약 조건식이 참일 때, 실행할 문장이 그 다음에 나옵니다. 조건식이 거짓일 경우 참 부분은 실행되지 않습니다.
주의할 점은 조건식의 연산 결과는 항상 true나 false 값이어야 합니다.
여기에 추가적으로 else
부분이 있는 if문이 있습니다.
이 부분은 예를 들어 설명하겠습니다.
if(math>=90){
System.out.println("합격");
} else {
System.out.println("불합격");
}
조건식인 math>=90
일 경우, 합격을 출력하며, 그게 아니면 불합격을 출력하는 프로그램입니다. 여기서 조건식이 거짓일 경우, 실행하는 부분이 else
부분입니다.
또한, if 문의 형태에서 실행되는 문장이 여러 개일 경우, 아래와 같이 블록으로 표시하고 문장이 한 줄일 경우, 블록 표시를 생략할 수 있습니다.
// 실행되는 문장이 여러 개일 경우, { } 표시
if(x > y){
System.out.println("문장1");
System.out.println("문장2");
System.out.println("문장3");
}
// 실행되는 문장이 한 줄일 경우, { } 표시 생략 가능
if(x > y)
System.out.println("문장1");
그리고 또 다른 if 문의 형태가 존재합니다.
바로 아래와 같은 코드 같은 형태입니다.
if(eng >= 90){
System.out.println("90점 이상");
} else if(eng >= 80){
System.out.println("90점 미만, 80점 이상");
} else if(eng >= 70){
System.out.println("80점 미만, 70점 이상");
} else if(eng >= 60){
System.out.println("70점 미만, 60점 이상");
} else {
System.out.println("?");
}
하나의 상황에서 여러 개의 조건이 존재할 경우, 각 조건에 따라 다르게 수행하는 역할을 하는 if - else if - else
가 존재합니다.
만약, eng가 97일 경우, 90점 이상
을 출력하고, 85일 경우, 90점 미만, 80점 이상
을 출력하고 if 문 밖으로 이동합니다. 이 과정 중에서 if 문의 여러 개의 조건식이 거짓이면, 맨 끝에 있는 else 다음의 문장인 ?
이 실행됩니다.
switch 문은 단순하게 if - else if - else
문을 단순하고 간결하게 표현할 수 있도록 구현한 것입니다.
어떤 형태인지 바로 살펴보겠습니다.
switch(day) {
case 1:
System.out.println("Sun");
break;
case 2:
System.out.println("Mon");
break;
case 3:
System.out.println("Tue");
break;
case 4:
System.out.println("Wed");
break;
case 5:
System.out.println("Thu");
break;
case 6:
System.out.println("Fri");
break;
case 7:
System.out.println("Sat");
break;
default:
System.out.println("Error!!");
}
switch 문 옆에 있는 값과 case 다음에 나타나는 값들을 비교하면서 두 값이 서로 같으면 문장을 실행합니다.
값들은 정수나 문자, 문자열 등 가능합니다.
여기서 일치하는 것이 없다면 default
에 있는 문장을 실행합니다.
주의할 점은 식과 상수식이 같은 곳에 있는 문장부터 순차적으로 계속 실행되기 때문에 break 문을 이용하여 switch 문 밖으로 이동하여야 합니다.
int day = switch(month) { // 식으로 되어 있기 때문에 값을 반환받아 변수 day에 저장
case 1, 3, 5, 7, 8, 10, 12 -> { // 쉼표(,)로 조건을 구분하며, 람다식을 사용
System.out.println("31일");
yield 31; // switch 문에서 반환 값을 얻기 위해 yield 키워드 사용(메서드에서 return과 비슷)
}
case 4, 6, 9, 11 -> {
System.out.println("30일");
yield 30;
}
case 2 -> {
System.out.println("28일");
yield 28;
}
default -> {
System.out.println("Error!!");
yield 0;
}
}; // 값을 반환받기 위해 문장의 끝 표현(세미콜론)
자바 14에서부터 지원되는 switch 문에서는 위와 같이 훨씬 더 간결하게 표현할 수 있습니다.
또한, break 문도 사용하지 않아도 된다는 것을 알 수 있습니다.
이상 자바 조건문에 대해서 간단하게 알아봤습니다.