1. if 문
2. if ~ else
3. if ~ else if
1. if문
if문은 구조에 따라 세가지로 구분할 수 있는데, if문, if~else문, if~else if문으로 나눌 수 있습니다. if문은 조건식의 결과에 따라 실행문의 실행여부가 결정되는 구문입니다.
if라는 영어 단어는 우리말로 만약 ~라면이라는 뜻을 가지고 있습니다. 프로그램에서도 마찬가지로 "만약 조건식이 참이라면" 이라고 생각하면 됩니다. if 뒤에 괄호안에 있는 조건식을 확인해서 이 조건식이 참(true)이라면 중괄호{} 블록 안의 실행문이 실행되고, 그렇지 않다면(false)라면 if문의 중괄호블록 안의 실행코드 실행되지 않습니다. 만약 실행문이 한줄이라면 중괄호를 생략하고 사용할 수도 있습니다.
if문의 괄호안에는 조건식이 오는데, 이 조건식의 판단결과는 true아니면 false의 결과를 갖습니다. 즉 참과 거짓 둘 중 하나인 boolean 자료형의 값이 올 수 있습니다. 이 결과값이 나오는 경우는 앞에서 배운 연산 중 비교연산과 논리연산이 있습니다. 이 두 연산식과 boolean 자료형이 그 조건식 자리에 올 수 있는데, 결국 어떤 연산이던, 변수이던 뒤에서 배울 메서드가 오던 무조건 true, false 둘 중 하나만 올 수 있는 것입니다.
예제를 보겠습니다.
public class IfSample {
public static void main(String[] args) {
int score = 70;
System.out.println("시험 시작");
if (score >= 60) {
System.out.println("합격입니다.");
}
System.out.println("시험 끝");
}
}
실행 결과
시험 시작
합격입니다.
시험 끝
위 예제에서 정수타입의 score라는 변수를 선언하고 70이라는 값으로 초기화하였습니다. 다음 바로 아래 “시험 시작”이라고 출력하고, 그리고 if문이 있는데 조건식이 score >= 60 입니다. score변수에는 현재 70이 담겨 있으므로 이 조건식은 참(true)이 되겠죠? 따라서 if문 중괄호 블록 안에 있는 "합격입니다."라는 문자열이 출력되며, 이제 if문을 빠져나와 마지막으로 "시험 끝"이라는 문자열이 출력되고 프로그램이 종료됩니다. 이제 score라는 변수의 값을 50으로 수정해서 다시 실행보겠습니다. 실행 결과가 "합격입니다."라는 문자열이 출력되지 않는걸 알 수 있습니다. "시험 시작"과 "시험 끝"은 if문과는 별개로 항상 실행되며, if문 중괄호 블록 안의 실행문만 조건이 참인 경우에 실행되게 됩니다.
2. if ~ else
if ~ else문은 else라는 블록과 함께 사용되어 조건식의 결과에 따라 실행되는 블록을 선택적으로 결정합니다. else라는 단어는 "그렇지 않으면", "그밖에" 라는 뜻을 가지고 있죠? if 문의 조건식이 true이면 if 문의 중괄호 블록 내의 실행문이 실행되고, false이면 else 문의 중괄호 블록 내의 실행문이 실행되게 됩니다.
if (조건식) {
실행문1; // 조건식이 true인 경우 실행되는 실행문
} else {
실행문2; // 조건식이 false인 경우 실행되는 실행문
}
if 하나만 있는 구조에서 else문이 추가됐는데, else 문 역시 중괄호 블록을 가지고 있습니다. if문의 조건식이 true이면 실행문1이 실행되고, 그렇지 않으면 else 블록의 실행문2가 실행됩니다. 여기서 주의할 점은 조건식이 true이냐, false이냐에 따라 실행문1과 실행문2 둘 중 하나만 선택적으로 실행된다는 것이다. 예제를 살펴보겠습니다.
public class IfSample1 {
public static void main(String[] args) {
int score = 50;
System.out.println("시험 시작");
if (score >= 60) {
System.out.println("합격입니다.");
} else {
System.out.println("불합격입니다.");
}
System.out.println("시험 끝");
}
}
실행 결과
시험 시작
불합격입니다.
시험 끝
이 예제는 score 변수에 50으로 초기화하고, if문의 조건식은 score >= 60이라는 비교식으로 구성되어 있는 if 문입니다. 여기에 if문의 블록에서 끝나는 중괄호가 위치하는 곳에 else 문이 추가되고 또다시 중괄호가 나옵니다. 이 else문의 중괄호 블록은 if문의 조건이 false인 경우 실행되는 구문이므로, score 변수에 50이 담겨 있는 상태에서 60 이상이라는 조건이 만족하지 않아 else 중괄호 블록의 실행문 "불합격입니다."를 출력 후 전체 if문은 종료되고 "시험 끝"이라는 문자열이 출력됩니다.
3. if ~ else if
if (조건식1) {
실행문1; // 조건식1이 true인 경우 실행
} else if (조건식2) {
실행문2; // 조건식1이 false, 조건식2가 true인 경우 실행
} else {
실행문3; // 조건식1도 false, 조건식2도 false인 경우 실행
}
위에서 보듯이 if문에 else if 가 추가된 구조입다. 또 다른 조건식이 추가된 것이죠. 프로그램 실행 순서에 의해 처음 if 문의 조건식1을 만나 해당 조건식이 true이면 실행문1을 실행하고, false이면 두 번째 else if 문의 조건식2를 만나 조건을 확인하여 true이면 실행문2를 실행하는데, 이 조건식2도 false라면 마지막 else문의 블록 안에 실행문3이 실행됩니다. 이 구조에서도 조건식1이나 조건식2, else문 중 하나의 실행문만 실행되며 조건식1이나 조건식2 중 하나라도 true이면 이 전체 if문은 종료하고 다음 프로그램으로 실행을 이어가게 됩니다.
else if 문은 몇 개라도 추가될 수 있으며, 아무리 추가되도 전체 조건 중 하나라도 만족하게 되면 if 문 자체가 종료된다는 점 을 꼭 기억하세요. 이번 예제는 점수 비교해서 학점을 출력하는 소스입니다.
public class IfSample2 {
public static void main(String[] args) {
int score = 80;
String grade = "";
System.out.println("학점부여 시작");
if (score >= 95) {
grade = "A+";
} else if (score >= 90){
grade = "A";
} else if (score >= 85) {
grade = "B+";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
System.out.println("당신의 학점은 "+grade+"입니다.");
System.out.println("학점부여 끝");
}
}
실행 결과
학점부여 시작
당신의 학점은 B입니다.
학점부여 끝
score변수에 80을 대입하고, 아래 grade라는 변수는 학점을 담을 변수인데, ""로 빈문자열로 초기화하였습니다. "학점부여 시작"이라고 출력 후 if 문이 시작되는데, 11라인에서 첫 번째 조건식을 만나게 됩니다. 조건식은 score >= 95 라는 조건식은 score 변수에 80이 담겨있기 때문에 false가 되어 다음 조건식으로 넘어가고 score >= 90 도 false여서 다음 조건식으로 넘어가며 이번 조건식 score >= 85 역시 false, 그래서 다음 조건식인 score >= 80가 true 이므로 해당 중괄호 블록 내의 실행문인 grade 변수에 "B"를 대입하고 if문 전체는 종료됩니다. if 문 아래 grade라는 변수를 문자열로 연결하여 "당신의 학점은 B입니다."라고 출력한 후 다음 실행문 "학점 부여 끝"을 출력하고 프로그램은 종료됩니다. 이 예제에서 score변수를 다양한 값으로 바꿔보면서 실행해보면 조건에 맞는 학점이 출력되는 것을 알 수 있습니다.
score >= 95 이면 grade = A+
score >= 90 이면 grade = A
score >= 85 이면 grade = B+
score >= 80 이면 grade = B
score >= 70 이면 grade = C
score >= 60 이면 grade = D
score < 60 이면 (else) grade = F
만약 score변수가 95라고 가정하면 모든 조건식을 살펴보면 전부 true가 됩니다. 90이상이기도 하고, 85이상이기도 하며, 80이상, 70이상, 60이상 모든 조건이 전부 true인 것입니다. 하지만 if 문에서는 위쪽에서부터 조건식을 하나하나 비교하면서 false 이면 다음 조건으로 넘어가고 true 이면 해당 실행문을 실행하고 종료하기 때문에 grade 변수에 A+라는 값이 대입되고 전체 if 문은 종료되는 것입니다.