조건문이란?
프로그램은 조건에 따라 다른 동작을 수행해야 할 때가 많습니다. 조건문은 프로그램의 실행 흐름을 제어하는 가장 기본적인 도구입니다.
"만약 비가 오면 우산을 챙긴다, 그렇지 않으면 우산을 챙기지 않는다"
이런 일상의 논리를 프로그램으로 표현한 것이 바로 조건문입니다.
조건문의 종류
Java에서 제공하는 조건문은 다음과 같습니다:
| 조건문 | 용도 |
|---|---|
if |
조건이 참일 때만 실행 |
if-else |
조건이 참/거짓일 때 각각 다른 코드 실행 |
if-else if-else |
여러 조건을 순차적으로 검사 |
switch |
값에 따라 여러 경우의 수 중 하나 선택 |
| 삼항 연산자 | 간단한 조건문을 한 줄로 표현 |
if 문
if 문은 가장 기본적인 조건문으로, 조건이 참(true)일 때만 코드를 실행합니다.
기본 문법
if (조건식) {
// 조건이 true일 때 실행되는 코드
}
단일 if 문 예제
int age = 20;
if (age >= 18) {
System.out.println("성인입니다.");
}
// 출력: 성인입니다.
int score = 85;
if (score >= 90) {
System.out.println("A학점입니다.");
}
// 출력 없음 (조건이 false)
중괄호 생략
조건문 안에 문장이 하나만 있으면 중괄호를 생략할 수 있습니다.
int num = 10;
// 중괄호 있음
if (num > 0) {
System.out.println("양수입니다.");
}
// 중괄호 생략 (권장하지 않음)
if (num > 0)
System.out.println("양수입니다.");
문장이 하나만 있어도 중괄호를 사용하는 것을 권장합니다. 나중에 코드를 추가할 때 실수를 방지할 수 있습니다.
if-else 문
if-else 문은 조건이 참일 때와 거짓일 때 각각 다른 코드를 실행합니다.
기본 문법
if (조건식) {
// 조건이 true일 때 실행
} else {
// 조건이 false일 때 실행
}
if-else 예제
int age = 15;
if (age >= 18) {
System.out.println("성인입니다.");
} else {
System.out.println("미성년자입니다.");
}
// 출력: 미성년자입니다.
int number = -5;
if (number >= 0) {
System.out.println("양수입니다.");
} else {
System.out.println("음수입니다.");
}
// 출력: 음수입니다.
실습: 짝수/홀수 판별
public class EvenOddTest {
public static void main(String[] args) {
int number = 17;
if (number % 2 == 0) {
System.out.println(number + "는 짝수입니다.");
} else {
System.out.println(number + "는 홀수입니다.");
}
}
}
// 출력: 17는 홀수입니다.
if-else if-else 문
여러 조건을 순차적으로 검사할 때 사용합니다.
기본 문법
if (조건1) {
// 조건1이 true일 때 실행
} else if (조건2) {
// 조건1이 false이고 조건2가 true일 때 실행
} else if (조건3) {
// 조건1, 조건2가 false이고 조건3이 true일 때 실행
} else {
// 모든 조건이 false일 때 실행
}
성적 등급 판별
int score = 85;
String grade;
if (score >= 90) {
grade = "A";
} 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);
// 출력: 학점: B
시간대에 따른 인사말
int hour = 14; // 오후 2시
String greeting;
if (hour < 12) {
greeting = "좋은 아침입니다!";
} else if (hour < 18) {
greeting = "좋은 오후입니다!";
} else {
greeting = "좋은 저녁입니다!";
}
System.out.println(greeting);
// 출력: 좋은 오후입니다!
if-else if-else 문은 위에서 아래로 순차적으로 검사하며, 조건이 참인 블록을 실행한 후 나머지는 건너뜁니다.
중첩 if 문
if 문 안에 또 다른 if 문을 넣을 수 있습니다.
기본 문법
if (조건1) {
if (조건2) {
// 조건1과 조건2 모두 true일 때 실행
}
}
중첩 if 예제
int age = 25;
boolean hasLicense = true;
if (age >= 18) {
if (hasLicense) {
System.out.println("운전할 수 있습니다.");
} else {
System.out.println("면허증이 필요합니다.");
}
} else {
System.out.println("나이가 부족합니다.");
}
// 출력: 운전할 수 있습니다.
학점 세부 판정
int score = 95;
String grade;
if (score >= 90) {
if (score >= 95) {
grade = "A+";
} else {
grade = "A";
}
} else if (score >= 80) {
if (score >= 85) {
grade = "B+";
} else {
grade = "B";
}
} else {
grade = "C";
}
System.out.println("학점: " + grade);
// 출력: 학점: A+
중첩이 깊어지면 코드가 복잡해집니다. 논리 연산자(&&)를 사용하면 더 간결하게 표현할 수 있습니다.
논리 연산자로 개선:
int age = 25;
boolean hasLicense = true;
if (age >= 18 && hasLicense) {
System.out.println("운전할 수 있습니다.");
} else if (age >= 18) {
System.out.println("면허증이 필요합니다.");
} else {
System.out.println("나이가 부족합니다.");
}
switch 문
switch 문은 변수의 값에 따라 여러 경우 중 하나를 선택하여 실행합니다.
기본 문법
switch (변수) {
case 값1:
// 변수가 값1과 같을 때 실행
break;
case 값2:
// 변수가 값2와 같을 때 실행
break;
default:
// 모든 case에 해당하지 않을 때 실행
break;
}
switch 문 기본 예제
int day = 3;
String dayName;
switch (day) {
case 1:
dayName = "월요일";
break;
case 2:
dayName = "화요일";
break;
case 3:
dayName = "수요일";
break;
case 4:
dayName = "목요일";
break;
case 5:
dayName = "금요일";
break;
case 6:
dayName = "토요일";
break;
case 7:
dayName = "일요일";
break;
default:
dayName = "잘못된 요일";
break;
}
System.out.println(dayName);
// 출력: 수요일
break의 중요성
break를 생략하면 다음 case로 계속 실행됩니다 (Fall-through).
int month = 3;
String season;
switch (month) {
case 12:
case 1:
case 2:
season = "겨울";
break;
case 3:
case 4:
case 5:
season = "봄";
break;
case 6:
case 7:
case 8:
season = "여름";
break;
case 9:
case 10:
case 11:
season = "가을";
break;
default:
season = "잘못된 월";
break;
}
System.out.println(season);
// 출력: 봄
switch 문 vs if-else
switch 문 사용 가능 조건:
- 변수가 정수형(
byte,short,int,char) - 문자열(
String) - Java 7 이상 - 열거형(
enum)
사용할 수 없는 경우:
- 실수형(
float,double) - 범위 비교(
>=,<=등)
// ✅ switch 사용 가능
String grade = "A";
switch (grade) {
case "A":
System.out.println("우수");
break;
case "B":
System.out.println("양호");
break;
default:
System.out.println("보통");
break;
}
// ❌ switch 사용 불가 (범위 비교)
int score = 85;
// switch (score >= 90) { ... } // 오류!
// ✅ if-else 사용
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
}
Java 14+ Enhanced Switch (참고)
Java 14 이후에는 화살표(->) 문법을 사용할 수 있습니다.
int day = 3;
String dayName = switch (day) {
case 1 -> "월요일";
case 2 -> "화요일";
case 3 -> "수요일";
case 4 -> "목요일";
case 5 -> "금요일";
case 6 -> "토요일";
case 7 -> "일요일";
default -> "잘못된 요일";
};
System.out.println(dayName);
// 출력: 수요일
삼항 연산자
삼항 연산자는 간단한 if-else 문을 한 줄로 표현할 수 있는 연산자입니다.
기본 문법
조건식 ? 값1 : 값2
- 조건식이
true이면값1반환 - 조건식이
false이면값2반환
삼항 연산자 예제
int age = 20;
String result = (age >= 18) ? "성인" : "미성년자";
System.out.println(result);
// 출력: 성인
int a = 10, b = 20;
int max = (a > b) ? a : b;
System.out.println("최댓값: " + max);
// 출력: 최댓값: 20
if-else 문과 비교
if-else 문:
int score = 85;
String result;
if (score >= 60) {
result = "합격";
} else {
result = "불합격";
}
삼항 연산자:
int score = 85;
String result = (score >= 60) ? "합격" : "불합격";
중첩 삼항 연산자
삼항 연산자를 중첩해서 사용할 수 있지만, 가독성이 떨어질 수 있습니다.
int score = 85;
String grade = (score >= 90) ? "A" :
(score >= 80) ? "B" :
(score >= 70) ? "C" : "F";
System.out.println(grade);
// 출력: B
• 간단한 조건문은 삼항 연산자로 표현하면 코드가 간결해집니다.
• 복잡한 조건이나 여러 문장이 필요한 경우 if-else 문을 사용하세요.
• 중첩 삼항 연산자는 가독성이 떨어지므로 주의하세요.
종합 실습
문제 1 - if 문 기초 (기초)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int number = 15;
if (number > 10) {
System.out.println("10보다 큽니다.");
}
}
}
문제 2 - if-else 문 (기초)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int age = 16;
if (age >= 18) {
System.out.println("성인");
} else {
System.out.println("미성년자");
}
}
}
문제 3 - if-else if-else (기초)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int score = 75;
if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 70) {
System.out.println("C");
} else {
System.out.println("D");
}
}
}
문제 4 - switch 문 (중급)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int month = 8;
String season;
switch (month) {
case 3: case 4: case 5:
season = "봄";
break;
case 6: case 7: case 8:
season = "여름";
break;
case 9: case 10: case 11:
season = "가을";
break;
default:
season = "겨울";
break;
}
System.out.println(season);
}
}
문제 5 - 삼항 연산자 (중급)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int num = 7;
String result = (num % 2 == 0) ? "짝수" : "홀수";
System.out.println(result);
}
}
문제 6 - 중첩 if 문 (중급)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int score = 92;
if (score >= 90) {
if (score >= 95) {
System.out.println("A+");
} else {
System.out.println("A");
}
}
}
}
문제 7 - break 없는 switch (고급)
다음 Java 프로그램의 실행 결과는 무엇입니까? (줄바꿈 포함)
public class Test {
public static void main(String[] args) {
int num = 2;
switch (num) {
case 1:
System.out.println("one");
case 2:
System.out.println("two");
case 3:
System.out.println("three");
break;
default:
System.out.println("other");
}
}
}
문제 8 - 복합 조건 (고급)
다음 Java 프로그램의 실행 결과는 무엇입니까?
public class Test {
public static void main(String[] args) {
int x = 10;
int y = 20;
String result = (x > 5 && y < 30) ? "조건1" :
(x > 15 || y > 15) ? "조건2" : "조건3";
System.out.println(result);
}
}
실전 프로그래밍
과제 1: BMI 계산기
체질량 지수(BMI)를 계산하고 비만도를 판정하는 프로그램을 작성하세요.
요구사항:
- 몸무게(kg)와 키(m)를 변수에 저장
- BMI = 몸무게 / (키 * 키)
- BMI에 따른 판정:
- 18.5 미만: 저체중
- 18.5 이상 25 미만: 정상
- 25 이상 30 미만: 과체중
- 30 이상: 비만
예시 답안 보기
public class BMICalculator {
public static void main(String[] args) {
double weight = 70.0; // kg
double height = 1.75; // m
double bmi = weight / (height * height);
String status;
if (bmi < 18.5) {
status = "저체중";
} else if (bmi < 25) {
status = "정상";
} else if (bmi < 30) {
status = "과체중";
} else {
status = "비만";
}
System.out.printf("BMI: %.2f\n", bmi);
System.out.println("판정: " + status);
}
}
출력:
BMI: 22.86
판정: 정상
과제 2: 계산기 프로그램
두 숫자와 연산자를 입력받아 계산하는 간단한 계산기 프로그램을 작성하세요.
요구사항:
- 두 개의 정수 변수 선언 (예: 10, 5)
- 연산자 변수 선언 (‘+’, ‘-‘, ‘*’, ‘/’, ‘%’)
- switch 문을 사용하여 연산 수행
- 결과 출력
예시 답안 보기
public class Calculator {
public static void main(String[] args) {
int num1 = 10;
int num2 = 5;
char operator = '*';
int result;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
case '%':
result = num1 % num2;
break;
default:
System.out.println("잘못된 연산자입니다.");
return;
}
System.out.printf("%d %c %d = %d\n", num1, operator, num2, result);
}
}
출력:
10 * 5 = 50
과제 3: 학점 세부 판정 시스템
점수를 입력받아 학점과 세부 등급(+, 0)을 판정하는 프로그램을 작성하세요.
요구사항:
- 0~100 점수를 변수에 저장
- 학점 판정:
- 90 이상: A
- 80 이상: B
- 70 이상: C
- 60 이상: D
- 60 미만: F
- 각 구간에서 상위 50%는 +, 하위 50%는 0 (F 제외)
- 예: 95점 이상은 A+, 90~94는 A
예시 답안 보기
public class GradeSystem {
public static void main(String[] args) {
int score = 87;
String grade;
if (score >= 90) {
grade = (score >= 95) ? "A+" : "A";
} else if (score >= 80) {
grade = (score >= 85) ? "B+" : "B";
} else if (score >= 70) {
grade = (score >= 75) ? "C+" : "C";
} else if (score >= 60) {
grade = (score >= 65) ? "D+" : "D";
} else {
grade = "F";
}
System.out.println("점수: " + score);
System.out.println("학점: " + grade);
}
}
출력:
점수: 87
학점: B+
핵심 요약
이번 챕터에서 배운 내용
- if 문
if (조건) { // 조건이 true일 때 실행 } - if-else 문
if (조건) { // true일 때 } else { // false일 때 } - if-else if-else 문
if (조건1) { // 조건1 true } else if (조건2) { // 조건2 true } else { // 모두 false } - switch 문
switch (변수) { case 값1: // 실행 코드 break; case 값2: // 실행 코드 break; default: // 기본 코드 break; } - 삼항 연산자
조건 ? 값1 : 값2 - 주요 포인트
구분 용도 if 계열 범위 비교, 복잡한 조건 switch 값의 일치 비교 (정수, 문자열, enum) 삼항 연산자 간단한 조건, 값 할당 - 중요 사항
- switch 문에서
break를 빠뜨리면 Fall-through 발생 - 중괄호 생략은 권장하지 않음
- 중첩이 깊어지면 논리 연산자 사용 고려
- 삼항 연산자는 간단한 경우에만 사용
- switch 문에서
다음 챕터 예고
다음 챕터에서는 반복문을 배웁니다.
- for 문
- while 문
- do-while 문
- 중첩 반복문
- break와 continue
- 무한 루프
조건문 학습 완료!
조건에 따라 프로그램의 흐름을 제어하는 방법을 배웠습니다.
이제 반복문을 배우면 더욱 강력한 프로그램을 만들 수 있습니다!